]> git.immae.eu Git - github/fretlink/time-picker.git/commitdiff
Updates
authoryiminghe <yiminghe@gmail.com>
Thu, 4 Aug 2016 11:54:59 +0000 (19:54 +0800)
committeryiminghe <yiminghe@gmail.com>
Thu, 4 Aug 2016 11:54:59 +0000 (19:54 +0800)
17 files changed:
examples/common.css
examples/common.css.map
examples/common.js
examples/common.js.map
examples/disabled.html
examples/disabled.js
examples/disabled.js.map
examples/hidden.html
examples/hidden.js
examples/hidden.js.map
examples/pick-time.html
examples/pick-time.js
examples/pick-time.js.map
examples/value-and-defaultValue.html
examples/value-and-defaultValue.js
examples/value-and-defaultValue.js.map
index.html

index d0af16d4fa455c764413aa594363801968a0a49e..52ae5f6e25e4537ee69d50838b39bdc53eddd0c1 100644 (file)
@@ -20,7 +20,7 @@
   border: 1px solid #d9d9d9;
   border-radius: 6px;
   -webkit-transition: border 0.2s cubic-bezier(0.645, 0.045, 0.355, 1), background 0.2s cubic-bezier(0.645, 0.045, 0.355, 1), box-shadow 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
-          transition: border 0.2s cubic-bezier(0.645, 0.045, 0.355, 1), background 0.2s cubic-bezier(0.645, 0.045, 0.355, 1), box-shadow 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+  transition: border 0.2s cubic-bezier(0.645, 0.045, 0.355, 1), background 0.2s cubic-bezier(0.645, 0.045, 0.355, 1), box-shadow 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
 }
 .rc-time-picker-panel {
   z-index: 1070;
@@ -83,7 +83,7 @@
   line-height: 1;
   width: 20px;
   -webkit-transition: color 0.3s ease;
-          transition: color 0.3s ease;
+  transition: color 0.3s ease;
 }
 .rc-time-picker-panel-clear-btn:hover:after {
   color: #666;
index fd4e78a3ae8714dc40fb73966fb46ce8c4e2d1c6..055bc6dbabf2ea6716d75250926fd36c598479c3 100644 (file)
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///assets/index.less","webpack:///assets/Picker.less","webpack:///assets/Panel.less","webpack:///assets/Header.less","webpack:///assets/Select.less"],"names":[],"mappings":"AAEA;EACE;EACA;CADD;AADD;EAII;CAAH;ACLC;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;UAAA;CDOH;AEtBD;EACE;EACA;EACA;EACA;CFwBD;AE5BD;EAOI;CFwBH;AErBC;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CFuBH;AG5CC;EACE;EACA;EACA;EACA;EACA;EACA;EACA;CH8CH;AG5CG;EACE;EACA;EACA;EACA;CH8CL;AG3CG;EACE;CH6CL;AGzCC;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CH2CH;AGxCC;EACE;EACA;EACA;EACA;EACA;EACA;EACA;UAAA;CH0CH;AGvCC;EACE;CHyCH;AIvFD;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CJyFD;AIvFC;EACE;CJyFH;AItFC;EACE;EACA;CJwFH;AIrFC;EACE;CJuFH;AI5GD;EAyBI;EACA;EACA;EACA;EACA;EACA;CJsFH;AIpHD;EAkCI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;KAAA;MAAA;UAAA;CJqFH;AInFG;EACE;CJqFL;AIjFC;EACE;EACA;CJmFH;AIhFC;EACE;CJkFH;AIjFG;EACE;EACA;CJmFL","file":"common.css","sourcesContent":["@prefixClass: rc-time-picker;\n\n.@{prefixClass} {\n  display: inline-block;\n  box-sizing: border-box;\n  * {\n    box-sizing: border-box;\n  }\n}\n\n@import \"./index/Picker\";\n@import \"./index/Panel\";\n@import \"./index/Header\";\n@import \"./index/Select\";\n\n\n\n/** WEBPACK FOOTER **\n ** assets/index.less\n **/",".@{prefixClass} {\n  &-input {\n    width: 100%;\n    position: relative;\n    display: inline-block;\n    padding: 4px 7px;\n    height: 28px;\n    cursor: text;\n    font-size: 12px;\n    line-height: 1.5;\n    color: #666;\n    background-color: #fff;\n    background-image: none;\n    border: 1px solid #d9d9d9;\n    border-radius: 6px;\n    transition: border .2s cubic-bezier(0.645, 0.045, 0.355, 1), background .2s cubic-bezier(0.645, 0.045, 0.355, 1), box-shadow .2s cubic-bezier(0.645, 0.045, 0.355, 1);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** assets/Picker.less\n **/",".@{prefixClass}-panel {\n  z-index: 1070;\n  width: 170px;\n  position: absolute;\n  box-sizing: border-box;\n\n  * {\n    box-sizing: border-box;\n  }\n\n  &-inner {\n    display: inline-block;\n    position: relative;\n    outline: none;\n    list-style: none;\n    font-size: 12px;\n    text-align: left;\n    background-color: #fff;\n    border-radius: 3px;\n    box-shadow: 0 1px 5px #ccc;\n    background-clip: padding-box;\n    border: 1px solid #ccc;\n    line-height: 1.5;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** assets/Panel.less\n **/",".@{prefixClass}-panel {\n  &-input {\n    margin: 0;\n    padding: 0;\n    width: 100%;\n    cursor: auto;\n    line-height: 1.5;\n    outline: 0;\n    border: 1px solid transparent;\n\n    &-wrap {\n      box-sizing: border-box;\n      position: relative;\n      padding: 6px;\n      border-bottom: 1px solid #e9e9e9;\n    }\n\n    &-invalid {\n      border-color: red;\n    }\n  }\n\n  &-clear-btn {\n    position: absolute;\n    right: 6px;\n    cursor: pointer;\n    overflow: hidden;\n    width: 20px;\n    height: 20px;\n    text-align: center;\n    line-height: 20px;\n    top: 6px;\n    margin: 0;\n  }\n\n  &-clear-btn:after {\n    content: \"x\";\n    font-size: 12px;\n    color: #aaa;\n    display: inline-block;\n    line-height: 1;\n    width: 20px;\n    transition: color 0.3s ease;\n  }\n\n  &-clear-btn:hover:after {\n    color: #666;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** assets/Header.less\n **/",".@{prefixClass}-panel-select {\n  float: left;\n  font-size: 12px;\n  border: 1px solid #e9e9e9;\n  border-width: 0 1px;\n  margin-left: -1px;\n  box-sizing: border-box;\n  width: 56px;\n  overflow: hidden;\n  position: relative; // Fix chrome weird render bug\n\n  &:hover {\n    overflow-y: auto;\n  }\n\n  &:first-child {\n    border-left: 0;\n    margin-left: 0;\n  }\n\n  &:last-child {\n    border-right: 0;\n  }\n\n  ul {\n    list-style: none;\n    box-sizing: border-box;\n    margin: 0;\n    padding: 0;\n    width: 100%;\n    max-height: 144px;\n  }\n\n  li {\n    list-style: none;\n    box-sizing: content-box;\n    margin: 0;\n    padding: 0 0 0 16px;\n    width: 100%;\n    height: 24px;\n    line-height: 24px;\n    text-align: left;\n    cursor: pointer;\n    user-select: none;\n\n    &:hover {\n      background: #edfaff;\n    }\n  }\n\n  li&-option-selected {\n    background: #edfaff;\n    color: #2db7f5;\n  }\n\n  li&-option-disabled {\n    color: #bfbfbf;\n    &:hover {\n      background: transparent;\n      cursor: not-allowed;\n    }\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** assets/Select.less\n **/"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"sources":["webpack:///./assets/index.less","webpack:///index.less","webpack:///./assets/index/Picker.less","webpack:///./assets/index/Panel.less","webpack:///./assets/index/Header.less","webpack:///./assets/index/Select.less"],"names":[],"mappings":"AAEA;EACE;EACA;CCDD;ADDD;EAII;CCAH;ACLC;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAAA;CDOH;AEtBD;EACE;EACA;EACA;EACA;CFwBD;AE5BD;EAOI;CFwBH;AErBC;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CFuBH;AG5CC;EACE;EACA;EACA;EACA;EACA;EACA;EACA;CH8CH;AG5CG;EACE;EACA;EACA;EACA;CH8CL;AG3CG;EACE;CH6CL;AGzCC;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CH2CH;AGxCC;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EAAA;CH0CH;AGvCC;EACE;CHyCH;AIvFD;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CJyFD;AIvFC;EACE;CJyFH;AItFC;EACE;EACA;CJwFH;AIrFC;EACE;CJuFH;AI5GD;EAyBI;EACA;EACA;EACA;EACA;EACA;CJsFH;AIpHD;EAkCI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;KAAA;MAAA;UAAA;CJqFH;AInFG;EACE;CJqFL;AIjFC;EACE;EACA;CJmFH;AIhFC;EACE;CJkFH;AIjFG;EACE;EACA;CJmFL","file":"common.css","sourcesContent":["@prefixClass: rc-time-picker;\n\n.@{prefixClass} {\n  display: inline-block;\n  box-sizing: border-box;\n  * {\n    box-sizing: border-box;\n  }\n}\n\n@import \"./index/Picker\";\n@import \"./index/Panel\";\n@import \"./index/Header\";\n@import \"./index/Select\";\n\n\n\n/** WEBPACK FOOTER **\n ** ./assets/index.less\n **/",".rc-time-picker {\n  display: inline-block;\n  box-sizing: border-box;\n}\n.rc-time-picker * {\n  box-sizing: border-box;\n}\n.rc-time-picker-input {\n  width: 100%;\n  position: relative;\n  display: inline-block;\n  padding: 4px 7px;\n  height: 28px;\n  cursor: text;\n  font-size: 12px;\n  line-height: 1.5;\n  color: #666;\n  background-color: #fff;\n  background-image: none;\n  border: 1px solid #d9d9d9;\n  border-radius: 6px;\n  transition: border 0.2s cubic-bezier(0.645, 0.045, 0.355, 1), background 0.2s cubic-bezier(0.645, 0.045, 0.355, 1), box-shadow 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);\n}\n.rc-time-picker-panel {\n  z-index: 1070;\n  width: 170px;\n  position: absolute;\n  box-sizing: border-box;\n}\n.rc-time-picker-panel * {\n  box-sizing: border-box;\n}\n.rc-time-picker-panel-inner {\n  display: inline-block;\n  position: relative;\n  outline: none;\n  list-style: none;\n  font-size: 12px;\n  text-align: left;\n  background-color: #fff;\n  border-radius: 3px;\n  box-shadow: 0 1px 5px #ccc;\n  background-clip: padding-box;\n  border: 1px solid #ccc;\n  line-height: 1.5;\n}\n.rc-time-picker-panel-input {\n  margin: 0;\n  padding: 0;\n  width: 100%;\n  cursor: auto;\n  line-height: 1.5;\n  outline: 0;\n  border: 1px solid transparent;\n}\n.rc-time-picker-panel-input-wrap {\n  box-sizing: border-box;\n  position: relative;\n  padding: 6px;\n  border-bottom: 1px solid #e9e9e9;\n}\n.rc-time-picker-panel-input-invalid {\n  border-color: red;\n}\n.rc-time-picker-panel-clear-btn {\n  position: absolute;\n  right: 6px;\n  cursor: pointer;\n  overflow: hidden;\n  width: 20px;\n  height: 20px;\n  text-align: center;\n  line-height: 20px;\n  top: 6px;\n  margin: 0;\n}\n.rc-time-picker-panel-clear-btn:after {\n  content: \"x\";\n  font-size: 12px;\n  color: #aaa;\n  display: inline-block;\n  line-height: 1;\n  width: 20px;\n  transition: color 0.3s ease;\n}\n.rc-time-picker-panel-clear-btn:hover:after {\n  color: #666;\n}\n.rc-time-picker-panel-select {\n  float: left;\n  font-size: 12px;\n  border: 1px solid #e9e9e9;\n  border-width: 0 1px;\n  margin-left: -1px;\n  box-sizing: border-box;\n  width: 56px;\n  overflow: hidden;\n  position: relative;\n}\n.rc-time-picker-panel-select:hover {\n  overflow-y: auto;\n}\n.rc-time-picker-panel-select:first-child {\n  border-left: 0;\n  margin-left: 0;\n}\n.rc-time-picker-panel-select:last-child {\n  border-right: 0;\n}\n.rc-time-picker-panel-select ul {\n  list-style: none;\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n  width: 100%;\n  max-height: 144px;\n}\n.rc-time-picker-panel-select li {\n  list-style: none;\n  box-sizing: content-box;\n  margin: 0;\n  padding: 0 0 0 16px;\n  width: 100%;\n  height: 24px;\n  line-height: 24px;\n  text-align: left;\n  cursor: pointer;\n  user-select: none;\n}\n.rc-time-picker-panel-select li:hover {\n  background: #edfaff;\n}\nli.rc-time-picker-panel-select-option-selected {\n  background: #edfaff;\n  color: #2db7f5;\n}\nli.rc-time-picker-panel-select-option-disabled {\n  color: #bfbfbf;\n}\nli.rc-time-picker-panel-select-option-disabled:hover {\n  background: transparent;\n  cursor: not-allowed;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** index.less\n **/",".@{prefixClass} {\n  &-input {\n    width: 100%;\n    position: relative;\n    display: inline-block;\n    padding: 4px 7px;\n    height: 28px;\n    cursor: text;\n    font-size: 12px;\n    line-height: 1.5;\n    color: #666;\n    background-color: #fff;\n    background-image: none;\n    border: 1px solid #d9d9d9;\n    border-radius: 6px;\n    transition: border .2s cubic-bezier(0.645, 0.045, 0.355, 1), background .2s cubic-bezier(0.645, 0.045, 0.355, 1), box-shadow .2s cubic-bezier(0.645, 0.045, 0.355, 1);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./assets/index/Picker.less\n **/",".@{prefixClass}-panel {\n  z-index: 1070;\n  width: 170px;\n  position: absolute;\n  box-sizing: border-box;\n\n  * {\n    box-sizing: border-box;\n  }\n\n  &-inner {\n    display: inline-block;\n    position: relative;\n    outline: none;\n    list-style: none;\n    font-size: 12px;\n    text-align: left;\n    background-color: #fff;\n    border-radius: 3px;\n    box-shadow: 0 1px 5px #ccc;\n    background-clip: padding-box;\n    border: 1px solid #ccc;\n    line-height: 1.5;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./assets/index/Panel.less\n **/",".@{prefixClass}-panel {\n  &-input {\n    margin: 0;\n    padding: 0;\n    width: 100%;\n    cursor: auto;\n    line-height: 1.5;\n    outline: 0;\n    border: 1px solid transparent;\n\n    &-wrap {\n      box-sizing: border-box;\n      position: relative;\n      padding: 6px;\n      border-bottom: 1px solid #e9e9e9;\n    }\n\n    &-invalid {\n      border-color: red;\n    }\n  }\n\n  &-clear-btn {\n    position: absolute;\n    right: 6px;\n    cursor: pointer;\n    overflow: hidden;\n    width: 20px;\n    height: 20px;\n    text-align: center;\n    line-height: 20px;\n    top: 6px;\n    margin: 0;\n  }\n\n  &-clear-btn:after {\n    content: \"x\";\n    font-size: 12px;\n    color: #aaa;\n    display: inline-block;\n    line-height: 1;\n    width: 20px;\n    transition: color 0.3s ease;\n  }\n\n  &-clear-btn:hover:after {\n    color: #666;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./assets/index/Header.less\n **/",".@{prefixClass}-panel-select {\n  float: left;\n  font-size: 12px;\n  border: 1px solid #e9e9e9;\n  border-width: 0 1px;\n  margin-left: -1px;\n  box-sizing: border-box;\n  width: 56px;\n  overflow: hidden;\n  position: relative; // Fix chrome weird render bug\n\n  &:hover {\n    overflow-y: auto;\n  }\n\n  &:first-child {\n    border-left: 0;\n    margin-left: 0;\n  }\n\n  &:last-child {\n    border-right: 0;\n  }\n\n  ul {\n    list-style: none;\n    box-sizing: border-box;\n    margin: 0;\n    padding: 0;\n    width: 100%;\n    max-height: 144px;\n  }\n\n  li {\n    list-style: none;\n    box-sizing: content-box;\n    margin: 0;\n    padding: 0 0 0 16px;\n    width: 100%;\n    height: 24px;\n    line-height: 24px;\n    text-align: left;\n    cursor: pointer;\n    user-select: none;\n\n    &:hover {\n      background: #edfaff;\n    }\n  }\n\n  li&-option-selected {\n    background: #edfaff;\n    color: #2db7f5;\n  }\n\n  li&-option-disabled {\n    color: #bfbfbf;\n    &:hover {\n      background: transparent;\n      cursor: not-allowed;\n    }\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./assets/index/Select.less\n **/"],"sourceRoot":""}
\ No newline at end of file
index 9fddb37c74da6d10048be0163142c72e6d18cbea..1076b218e20c255828cff51644925be399fff3f5 100644 (file)
 /* 4 */
 /***/ function(module, exports, __webpack_require__) {
 
-       /**
-        * Copyright 2013-2015, Facebook, Inc.
+       /* WEBPACK VAR INJECTION */(function(process) {/**
+        * Copyright 2013-present, Facebook, Inc.
         * All rights reserved.
         *
         * This source code is licensed under the BSD-style license found in the
        
        'use strict';
        
-       var ReactDOM = __webpack_require__(5);
-       var ReactDOMServer = __webpack_require__(150);
-       var ReactIsomorphic = __webpack_require__(154);
-       
-       var assign = __webpack_require__(41);
-       var deprecated = __webpack_require__(159);
-       
-       // `version` will be added here by ReactIsomorphic.
-       var React = {};
-       
-       assign(React, ReactIsomorphic);
-       
-       assign(React, {
-         // ReactDOM
-         findDOMNode: deprecated('findDOMNode', 'ReactDOM', 'react-dom', ReactDOM, ReactDOM.findDOMNode),
-         render: deprecated('render', 'ReactDOM', 'react-dom', ReactDOM, ReactDOM.render),
-         unmountComponentAtNode: deprecated('unmountComponentAtNode', 'ReactDOM', 'react-dom', ReactDOM, ReactDOM.unmountComponentAtNode),
-       
-         // ReactDOMServer
-         renderToString: deprecated('renderToString', 'ReactDOMServer', 'react-dom/server', ReactDOMServer, ReactDOMServer.renderToString),
-         renderToStaticMarkup: deprecated('renderToStaticMarkup', 'ReactDOMServer', 'react-dom/server', ReactDOMServer, ReactDOMServer.renderToStaticMarkup)
-       });
-       
-       React.__SECRET_DOM_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = ReactDOM;
-       React.__SECRET_DOM_SERVER_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = ReactDOMServer;
-       
-       module.exports = React;
-
-/***/ },
-/* 5 */
-/***/ function(module, exports, __webpack_require__) {
-
-       /* WEBPACK VAR INJECTION */(function(process) {/**
-        * 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.
-        *
-        * @providesModule ReactDOM
-        */
+       var _assign = __webpack_require__(6);
        
-       /* globals __REACT_DEVTOOLS_GLOBAL_HOOK__*/
+       var ReactChildren = __webpack_require__(7);
+       var ReactComponent = __webpack_require__(19);
+       var ReactPureComponent = __webpack_require__(22);
+       var ReactClass = __webpack_require__(23);
+       var ReactDOMFactories = __webpack_require__(28);
+       var ReactElement = __webpack_require__(11);
+       var ReactPropTypes = __webpack_require__(34);
+       var ReactVersion = __webpack_require__(35);
        
-       'use strict';
+       var onlyChild = __webpack_require__(36);
+       var warning = __webpack_require__(13);
        
-       var ReactCurrentOwner = __webpack_require__(7);
-       var ReactDOMTextComponent = __webpack_require__(8);
-       var ReactDefaultInjection = __webpack_require__(73);
-       var ReactInstanceHandles = __webpack_require__(47);
-       var ReactMount = __webpack_require__(30);
-       var ReactPerf = __webpack_require__(20);
-       var ReactReconciler = __webpack_require__(52);
-       var ReactUpdates = __webpack_require__(56);
-       var ReactVersion = __webpack_require__(148);
+       var createElement = ReactElement.createElement;
+       var createFactory = ReactElement.createFactory;
+       var cloneElement = ReactElement.cloneElement;
        
-       var findDOMNode = __webpack_require__(93);
-       var renderSubtreeIntoContainer = __webpack_require__(149);
-       var warning = __webpack_require__(27);
+       if (process.env.NODE_ENV !== 'production') {
+         var ReactElementValidator = __webpack_require__(30);
+         createElement = ReactElementValidator.createElement;
+         createFactory = ReactElementValidator.createFactory;
+         cloneElement = ReactElementValidator.cloneElement;
+       }
        
-       ReactDefaultInjection.inject();
+       var __spread = _assign;
        
-       var render = ReactPerf.measure('React', 'render', ReactMount.render);
+       if (process.env.NODE_ENV !== 'production') {
+         var warned = false;
+         __spread = function () {
+           process.env.NODE_ENV !== 'production' ? warning(warned, 'React.__spread is deprecated and should not be used. Use ' + 'Object.assign directly or another helper function with similar ' + 'semantics. You may be seeing this warning due to your compiler. ' + 'See https://fb.me/react-spread-deprecation for more details.') : void 0;
+           warned = true;
+           return _assign.apply(null, arguments);
+         };
+       }
        
        var React = {
-         findDOMNode: findDOMNode,
-         render: render,
-         unmountComponentAtNode: ReactMount.unmountComponentAtNode,
-         version: ReactVersion,
        
-         /* eslint-disable camelcase */
-         unstable_batchedUpdates: ReactUpdates.batchedUpdates,
-         unstable_renderSubtreeIntoContainer: renderSubtreeIntoContainer
-       };
+         // Modern
        
-       // Inject the runtime into a devtools global hook regardless of browser.
-       // Allows for debugging when the hook is injected on the page.
-       /* eslint-enable camelcase */
-       if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' && typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.inject === 'function') {
-         __REACT_DEVTOOLS_GLOBAL_HOOK__.inject({
-           CurrentOwner: ReactCurrentOwner,
-           InstanceHandles: ReactInstanceHandles,
-           Mount: ReactMount,
-           Reconciler: ReactReconciler,
-           TextComponent: ReactDOMTextComponent
-         });
-       }
+         Children: {
+           map: ReactChildren.map,
+           forEach: ReactChildren.forEach,
+           count: ReactChildren.count,
+           toArray: ReactChildren.toArray,
+           only: onlyChild
+         },
        
-       if (process.env.NODE_ENV !== 'production') {
-         var ExecutionEnvironment = __webpack_require__(11);
-         if (ExecutionEnvironment.canUseDOM && window.top === window.self) {
+         Component: ReactComponent,
+         PureComponent: ReactPureComponent,
        
-           // First check if devtools is not installed
-           if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined') {
-             // If we're in Chrome or Firefox, provide a download link if not installed.
-             if (navigator.userAgent.indexOf('Chrome') > -1 && navigator.userAgent.indexOf('Edge') === -1 || navigator.userAgent.indexOf('Firefox') > -1) {
-               console.debug('Download the React DevTools for a better development experience: ' + 'https://fb.me/react-devtools');
-             }
-           }
+         createElement: createElement,
+         cloneElement: cloneElement,
+         isValidElement: ReactElement.isValidElement,
        
-           // If we're in IE8, check to see if we are in compatibility mode and provide
-           // information on preventing compatibility mode
-           var ieCompatibilityMode = document.documentMode && document.documentMode < 8;
+         // Classic
        
-           process.env.NODE_ENV !== 'production' ? warning(!ieCompatibilityMode, 'Internet Explorer is running in compatibility mode; please add the ' + 'following tag to your HTML to prevent this from happening: ' + '<meta http-equiv="X-UA-Compatible" content="IE=edge" />') : undefined;
+         PropTypes: ReactPropTypes,
+         createClass: ReactClass.createClass,
+         createFactory: createFactory,
+         createMixin: function (mixin) {
+           // Currently a noop. Will be used to validate and trace mixins.
+           return mixin;
+         },
        
-           var expectedFeatures = [
-           // shims
-           Array.isArray, Array.prototype.every, Array.prototype.forEach, Array.prototype.indexOf, Array.prototype.map, Date.now, Function.prototype.bind, Object.keys, String.prototype.split, String.prototype.trim,
+         // This looks DOM specific but these are actually isomorphic helpers
+         // since they are just generating DOM strings.
+         DOM: ReactDOMFactories,
        
-           // shams
-           Object.create, Object.freeze];
+         version: ReactVersion,
        
-           for (var i = 0; i < expectedFeatures.length; i++) {
-             if (!expectedFeatures[i]) {
-               console.error('One or more ES5 shim/shams expected by React are not available: ' + 'https://fb.me/react-warning-polyfills');
-               break;
-             }
-           }
-         }
-       }
+         // Deprecated hook for JSX spread, don't use this for anything.
+         __spread: __spread
+       };
        
        module.exports = React;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
 
 /***/ },
-/* 6 */
+/* 5 */
 /***/ function(module, exports) {
 
        // shim for using process in browser
-       
        var process = module.exports = {};
+       
+       // cached from whatever global is present so that test runners that stub it
+       // don't break things.  But we need to wrap it in a try catch in case it is
+       // wrapped in strict mode code which doesn't define any globals.  It's inside a
+       // function because try/catches deoptimize in certain engines.
+       
+       var cachedSetTimeout;
+       var cachedClearTimeout;
+       
+       (function () {
+           try {
+               cachedSetTimeout = setTimeout;
+           } catch (e) {
+               cachedSetTimeout = function () {
+                   throw new Error('setTimeout is not defined');
+               }
+           }
+           try {
+               cachedClearTimeout = clearTimeout;
+           } catch (e) {
+               cachedClearTimeout = function () {
+                   throw new Error('clearTimeout is not defined');
+               }
+           }
+       } ())
+       function runTimeout(fun) {
+           if (cachedSetTimeout === setTimeout) {
+               return setTimeout(fun, 0);
+           } else {
+               return cachedSetTimeout.call(null, fun, 0);
+           }
+       }
+       function runClearTimeout(marker) {
+           if (cachedClearTimeout === clearTimeout) {
+               clearTimeout(marker);
+           } else {
+               cachedClearTimeout.call(null, marker);
+           }
+       }
        var queue = [];
        var draining = false;
        var currentQueue;
        var queueIndex = -1;
        
        function cleanUpNextTick() {
+           if (!draining || !currentQueue) {
+               return;
+           }
            draining = false;
            if (currentQueue.length) {
                queue = currentQueue.concat(queue);
            if (draining) {
                return;
            }
-           var timeout = setTimeout(cleanUpNextTick);
+           var timeout = runTimeout(cleanUpNextTick);
            draining = true;
        
            var len = queue.length;
            }
            currentQueue = null;
            draining = false;
-           clearTimeout(timeout);
+           runClearTimeout(timeout);
        }
        
        process.nextTick = function (fun) {
            }
            queue.push(new Item(fun, args));
            if (queue.length === 1 && !draining) {
-               setTimeout(drainQueue, 0);
+               runTimeout(drainQueue);
            }
        };
        
 
 
 /***/ },
-/* 7 */
+/* 6 */
 /***/ function(module, exports) {
 
-       /**
-        * 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.
-        *
-        * @providesModule ReactCurrentOwner
-        */
-       
        'use strict';
+       /* eslint-disable no-unused-vars */
+       var hasOwnProperty = Object.prototype.hasOwnProperty;
+       var propIsEnumerable = Object.prototype.propertyIsEnumerable;
        
-       /**
-        * Keeps track of the current owner.
-        *
-        * The current owner is the component who should own any components that are
-        * currently being constructed.
-        */
-       var ReactCurrentOwner = {
+       function toObject(val) {
+               if (val === null || val === undefined) {
+                       throw new TypeError('Object.assign cannot be called with null or undefined');
+               }
        
-         /**
-          * @internal
-          * @type {ReactComponent}
-          */
-         current: null
+               return Object(val);
+       }
        
-       };
+       function shouldUseNative() {
+               try {
+                       if (!Object.assign) {
+                               return false;
+                       }
        
-       module.exports = ReactCurrentOwner;
+                       // Detect buggy property enumeration order in older V8 versions.
+       
+                       // https://bugs.chromium.org/p/v8/issues/detail?id=4118
+                       var test1 = new String('abc');  // eslint-disable-line
+                       test1[5] = 'de';
+                       if (Object.getOwnPropertyNames(test1)[0] === '5') {
+                               return false;
+                       }
+       
+                       // https://bugs.chromium.org/p/v8/issues/detail?id=3056
+                       var test2 = {};
+                       for (var i = 0; i < 10; i++) {
+                               test2['_' + String.fromCharCode(i)] = i;
+                       }
+                       var order2 = Object.getOwnPropertyNames(test2).map(function (n) {
+                               return test2[n];
+                       });
+                       if (order2.join('') !== '0123456789') {
+                               return false;
+                       }
+       
+                       // https://bugs.chromium.org/p/v8/issues/detail?id=3056
+                       var test3 = {};
+                       'abcdefghijklmnopqrst'.split('').forEach(function (letter) {
+                               test3[letter] = letter;
+                       });
+                       if (Object.keys(Object.assign({}, test3)).join('') !==
+                                       'abcdefghijklmnopqrst') {
+                               return false;
+                       }
+       
+                       return true;
+               } catch (e) {
+                       // We don't expect any of the above to throw, but better to be safe.
+                       return false;
+               }
+       }
+       
+       module.exports = shouldUseNative() ? Object.assign : function (target, source) {
+               var from;
+               var to = toObject(target);
+               var symbols;
+       
+               for (var s = 1; s < arguments.length; s++) {
+                       from = Object(arguments[s]);
+       
+                       for (var key in from) {
+                               if (hasOwnProperty.call(from, key)) {
+                                       to[key] = from[key];
+                               }
+                       }
+       
+                       if (Object.getOwnPropertySymbols) {
+                               symbols = Object.getOwnPropertySymbols(from);
+                               for (var i = 0; i < symbols.length; i++) {
+                                       if (propIsEnumerable.call(from, symbols[i])) {
+                                               to[symbols[i]] = from[symbols[i]];
+                                       }
+                               }
+                       }
+               }
+       
+               return to;
+       };
+
 
 /***/ },
-/* 8 */
+/* 7 */
 /***/ function(module, exports, __webpack_require__) {
 
-       /* WEBPACK VAR INJECTION */(function(process) {/**
-        * Copyright 2013-2015, Facebook, Inc.
+       /**
+        * Copyright 2013-present, 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.
         *
-        * @providesModule ReactDOMTextComponent
-        * @typechecks static-only
+        * @providesModule ReactChildren
         */
        
        'use strict';
        
-       var DOMChildrenOperations = __webpack_require__(9);
-       var DOMPropertyOperations = __webpack_require__(24);
-       var ReactComponentBrowserEnvironment = __webpack_require__(28);
-       var ReactMount = __webpack_require__(30);
+       var PooledClass = __webpack_require__(8);
+       var ReactElement = __webpack_require__(11);
+       
+       var emptyFunction = __webpack_require__(14);
+       var traverseAllChildren = __webpack_require__(16);
        
-       var assign = __webpack_require__(41);
-       var escapeTextContentForBrowser = __webpack_require__(23);
-       var setTextContent = __webpack_require__(22);
-       var validateDOMNesting = __webpack_require__(72);
+       var twoArgumentPooler = PooledClass.twoArgumentPooler;
+       var fourArgumentPooler = PooledClass.fourArgumentPooler;
+       
+       var userProvidedKeyEscapeRegex = /\/+/g;
+       function escapeUserProvidedKey(text) {
+         return ('' + text).replace(userProvidedKeyEscapeRegex, '$&/');
+       }
        
        /**
-        * Text nodes violate a couple assumptions that React makes about components:
-        *
-        *  - When mounting text into the DOM, adjacent text nodes are merged.
-        *  - Text nodes cannot be assigned a React root ID.
-        *
-        * This component is used to wrap strings in elements so that they can undergo
-        * the same reconciliation that is applied to elements.
-        *
-        * TODO: Investigate representing React components in the DOM with text nodes.
+        * PooledClass representing the bookkeeping associated with performing a child
+        * traversal. Allows avoiding binding callbacks.
         *
-        * @class ReactDOMTextComponent
-        * @extends ReactComponent
-        * @internal
+        * @constructor ForEachBookKeeping
+        * @param {!function} forEachFunction Function to perform traversal with.
+        * @param {?*} forEachContext Context to perform context with.
         */
-       var ReactDOMTextComponent = function (props) {
-         // This constructor and its argument is currently used by mocks.
+       function ForEachBookKeeping(forEachFunction, forEachContext) {
+         this.func = forEachFunction;
+         this.context = forEachContext;
+         this.count = 0;
+       }
+       ForEachBookKeeping.prototype.destructor = function () {
+         this.func = null;
+         this.context = null;
+         this.count = 0;
        };
+       PooledClass.addPoolingTo(ForEachBookKeeping, twoArgumentPooler);
        
-       assign(ReactDOMTextComponent.prototype, {
-       
-         /**
-          * @param {ReactText} text
-          * @internal
-          */
-         construct: function (text) {
-           // TODO: This is really a ReactText (ReactNode), not a ReactElement
-           this._currentElement = text;
-           this._stringText = '' + text;
+       function forEachSingleChild(bookKeeping, child, name) {
+         var func = bookKeeping.func;
+         var context = bookKeeping.context;
        
-           // Properties
-           this._rootNodeID = null;
-           this._mountIndex = 0;
-         },
+         func.call(context, child, bookKeeping.count++);
+       }
        
-         /**
-          * Creates the markup for this text node. This node is not intended to have
-          * any features besides containing text content.
-          *
-          * @param {string} rootID DOM ID of the root node.
-          * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction
-          * @return {string} Markup for this text node.
-          * @internal
-          */
-         mountComponent: function (rootID, transaction, context) {
-           if (process.env.NODE_ENV !== 'production') {
-             if (context[validateDOMNesting.ancestorInfoContextKey]) {
-               validateDOMNesting('span', null, context[validateDOMNesting.ancestorInfoContextKey]);
-             }
-           }
+       /**
+        * Iterates through children that are typically specified as `props.children`.
+        *
+        * See https://facebook.github.io/react/docs/top-level-api.html#react.children.foreach
+        *
+        * The provided forEachFunc(child, index) will be called for each
+        * leaf child.
+        *
+        * @param {?*} children Children tree container.
+        * @param {function(*, int)} forEachFunc
+        * @param {*} forEachContext Context for forEachContext.
+        */
+       function forEachChildren(children, forEachFunc, forEachContext) {
+         if (children == null) {
+           return children;
+         }
+         var traverseContext = ForEachBookKeeping.getPooled(forEachFunc, forEachContext);
+         traverseAllChildren(children, forEachSingleChild, traverseContext);
+         ForEachBookKeeping.release(traverseContext);
+       }
        
-           this._rootNodeID = rootID;
-           if (transaction.useCreateElement) {
-             var ownerDocument = context[ReactMount.ownerDocumentContextKey];
-             var el = ownerDocument.createElement('span');
-             DOMPropertyOperations.setAttributeForID(el, rootID);
-             // Populate node cache
-             ReactMount.getID(el);
-             setTextContent(el, this._stringText);
-             return el;
-           } else {
-             var escapedText = escapeTextContentForBrowser(this._stringText);
+       /**
+        * PooledClass representing the bookkeeping associated with performing a child
+        * mapping. Allows avoiding binding callbacks.
+        *
+        * @constructor MapBookKeeping
+        * @param {!*} mapResult Object containing the ordered map of results.
+        * @param {!function} mapFunction Function to perform mapping with.
+        * @param {?*} mapContext Context to perform mapping with.
+        */
+       function MapBookKeeping(mapResult, keyPrefix, mapFunction, mapContext) {
+         this.result = mapResult;
+         this.keyPrefix = keyPrefix;
+         this.func = mapFunction;
+         this.context = mapContext;
+         this.count = 0;
+       }
+       MapBookKeeping.prototype.destructor = function () {
+         this.result = null;
+         this.keyPrefix = null;
+         this.func = null;
+         this.context = null;
+         this.count = 0;
+       };
+       PooledClass.addPoolingTo(MapBookKeeping, fourArgumentPooler);
        
-             if (transaction.renderToStaticMarkup) {
-               // Normally we'd wrap this in a `span` for the reasons stated above, but
-               // since this is a situation where React won't take over (static pages),
-               // we can simply return the text as it is.
-               return escapedText;
-             }
+       function mapSingleChildIntoContext(bookKeeping, child, childKey) {
+         var result = bookKeeping.result;
+         var keyPrefix = bookKeeping.keyPrefix;
+         var func = bookKeeping.func;
+         var context = bookKeeping.context;
        
-             return '<span ' + DOMPropertyOperations.createMarkupForID(rootID) + '>' + escapedText + '</span>';
-           }
-         },
        
-         /**
-          * Updates this component by updating the text content.
-          *
-          * @param {ReactText} nextText The next text content
-          * @param {ReactReconcileTransaction} transaction
-          * @internal
-          */
-         receiveComponent: function (nextText, transaction) {
-           if (nextText !== this._currentElement) {
-             this._currentElement = nextText;
-             var nextStringText = '' + nextText;
-             if (nextStringText !== this._stringText) {
-               // TODO: Save this as pending props and use performUpdateIfNecessary
-               // and/or updateComponent to do the actual update for consistency with
-               // other component types?
-               this._stringText = nextStringText;
-               var node = ReactMount.getNode(this._rootNodeID);
-               DOMChildrenOperations.updateTextContent(node, nextStringText);
-             }
+         var mappedChild = func.call(context, child, bookKeeping.count++);
+         if (Array.isArray(mappedChild)) {
+           mapIntoWithKeyPrefixInternal(mappedChild, result, childKey, emptyFunction.thatReturnsArgument);
+         } else if (mappedChild != null) {
+           if (ReactElement.isValidElement(mappedChild)) {
+             mappedChild = ReactElement.cloneAndReplaceKey(mappedChild,
+             // Keep both the (mapped) and old keys if they differ, just as
+             // traverseAllChildren used to do for objects as children
+             keyPrefix + (mappedChild.key && (!child || child.key !== mappedChild.key) ? escapeUserProvidedKey(mappedChild.key) + '/' : '') + childKey);
            }
-         },
-       
-         unmountComponent: function () {
-           ReactComponentBrowserEnvironment.unmountIDFromEnvironment(this._rootNodeID);
+           result.push(mappedChild);
          }
+       }
        
-       });
+       function mapIntoWithKeyPrefixInternal(children, array, prefix, func, context) {
+         var escapedPrefix = '';
+         if (prefix != null) {
+           escapedPrefix = escapeUserProvidedKey(prefix) + '/';
+         }
+         var traverseContext = MapBookKeeping.getPooled(array, escapedPrefix, func, context);
+         traverseAllChildren(children, mapSingleChildIntoContext, traverseContext);
+         MapBookKeeping.release(traverseContext);
+       }
        
-       module.exports = ReactDOMTextComponent;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
-
-/***/ },
-/* 9 */
-/***/ function(module, exports, __webpack_require__) {
-
-       /* WEBPACK VAR INJECTION */(function(process) {/**
-        * Copyright 2013-2015, Facebook, Inc.
-        * All rights reserved.
+       /**
+        * Maps children that are typically specified as `props.children`.
         *
-        * 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.
+        * See https://facebook.github.io/react/docs/top-level-api.html#react.children.map
         *
-        * @providesModule DOMChildrenOperations
-        * @typechecks static-only
+        * The provided mapFunction(child, key, index) will be called for each
+        * leaf child.
+        *
+        * @param {?*} children Children tree container.
+        * @param {function(*, int)} func The map function.
+        * @param {*} context Context for mapFunction.
+        * @return {object} Object containing the ordered map of results.
         */
+       function mapChildren(children, func, context) {
+         if (children == null) {
+           return children;
+         }
+         var result = [];
+         mapIntoWithKeyPrefixInternal(children, result, null, func, context);
+         return result;
+       }
        
-       'use strict';
-       
-       var Danger = __webpack_require__(10);
-       var ReactMultiChildUpdateTypes = __webpack_require__(18);
-       var ReactPerf = __webpack_require__(20);
-       
-       var setInnerHTML = __webpack_require__(21);
-       var setTextContent = __webpack_require__(22);
-       var invariant = __webpack_require__(15);
+       function forEachSingleChildDummy(traverseContext, child, name) {
+         return null;
+       }
        
        /**
-        * Inserts `childNode` as a child of `parentNode` at the `index`.
+        * Count the number of children that are typically specified as
+        * `props.children`.
         *
-        * @param {DOMElement} parentNode Parent node in which to insert.
-        * @param {DOMElement} childNode Child node to insert.
-        * @param {number} index Index at which to insert the child.
-        * @internal
+        * See https://facebook.github.io/react/docs/top-level-api.html#react.children.count
+        *
+        * @param {?*} children Children tree container.
+        * @return {number} The number of children.
         */
-       function insertChildAt(parentNode, childNode, index) {
-         // By exploiting arrays returning `undefined` for an undefined index, we can
-         // rely exclusively on `insertBefore(node, null)` instead of also using
-         // `appendChild(node)`. However, using `undefined` is not allowed by all
-         // browsers so we must replace it with `null`.
-       
-         // fix render order error in safari
-         // IE8 will throw error when index out of list size.
-         var beforeChild = index >= parentNode.childNodes.length ? null : parentNode.childNodes.item(index);
-       
-         parentNode.insertBefore(childNode, beforeChild);
+       function countChildren(children, context) {
+         return traverseAllChildren(children, forEachSingleChildDummy, null);
        }
        
        /**
-        * Operations for updating with DOM children.
+        * Flatten a children object (typically specified as `props.children`) and
+        * return an array with appropriately re-keyed children.
+        *
+        * See https://facebook.github.io/react/docs/top-level-api.html#react.children.toarray
         */
-       var DOMChildrenOperations = {
-       
-         dangerouslyReplaceNodeWithMarkup: Danger.dangerouslyReplaceNodeWithMarkup,
-       
-         updateTextContent: setTextContent,
-       
-         /**
-          * Updates a component's children by processing a series of updates. The
-          * update configurations are each expected to have a `parentNode` property.
-          *
-          * @param {array<object>} updates List of update configurations.
-          * @param {array<string>} markupList List of markup strings.
-          * @internal
-          */
-         processUpdates: function (updates, markupList) {
-           var update;
-           // Mapping from parent IDs to initial child orderings.
-           var initialChildren = null;
-           // List of children that will be moved or removed.
-           var updatedChildren = null;
-       
-           for (var i = 0; i < updates.length; i++) {
-             update = updates[i];
-             if (update.type === ReactMultiChildUpdateTypes.MOVE_EXISTING || update.type === ReactMultiChildUpdateTypes.REMOVE_NODE) {
-               var updatedIndex = update.fromIndex;
-               var updatedChild = update.parentNode.childNodes[updatedIndex];
-               var parentID = update.parentID;
-       
-               !updatedChild ? process.env.NODE_ENV !== 'production' ? invariant(false, 'processUpdates(): Unable to find child %s of element. This ' + 'probably means the DOM was unexpectedly mutated (e.g., by the ' + 'browser), usually due to forgetting a <tbody> when using tables, ' + 'nesting tags like <form>, <p>, or <a>, or using non-SVG elements ' + 'in an <svg> parent. Try inspecting the child nodes of the element ' + 'with React ID `%s`.', updatedIndex, parentID) : invariant(false) : undefined;
-       
-               initialChildren = initialChildren || {};
-               initialChildren[parentID] = initialChildren[parentID] || [];
-               initialChildren[parentID][updatedIndex] = updatedChild;
-       
-               updatedChildren = updatedChildren || [];
-               updatedChildren.push(updatedChild);
-             }
-           }
-       
-           var renderedMarkup;
-           // markupList is either a list of markup or just a list of elements
-           if (markupList.length && typeof markupList[0] === 'string') {
-             renderedMarkup = Danger.dangerouslyRenderMarkup(markupList);
-           } else {
-             renderedMarkup = markupList;
-           }
-       
-           // Remove updated children first so that `toIndex` is consistent.
-           if (updatedChildren) {
-             for (var j = 0; j < updatedChildren.length; j++) {
-               updatedChildren[j].parentNode.removeChild(updatedChildren[j]);
-             }
-           }
-       
-           for (var k = 0; k < updates.length; k++) {
-             update = updates[k];
-             switch (update.type) {
-               case ReactMultiChildUpdateTypes.INSERT_MARKUP:
-                 insertChildAt(update.parentNode, renderedMarkup[update.markupIndex], update.toIndex);
-                 break;
-               case ReactMultiChildUpdateTypes.MOVE_EXISTING:
-                 insertChildAt(update.parentNode, initialChildren[update.parentID][update.fromIndex], update.toIndex);
-                 break;
-               case ReactMultiChildUpdateTypes.SET_MARKUP:
-                 setInnerHTML(update.parentNode, update.content);
-                 break;
-               case ReactMultiChildUpdateTypes.TEXT_CONTENT:
-                 setTextContent(update.parentNode, update.content);
-                 break;
-               case ReactMultiChildUpdateTypes.REMOVE_NODE:
-                 // Already removed by the for-loop above.
-                 break;
-             }
-           }
-         }
+       function toArray(children) {
+         var result = [];
+         mapIntoWithKeyPrefixInternal(children, result, null, emptyFunction.thatReturnsArgument);
+         return result;
+       }
        
+       var ReactChildren = {
+         forEach: forEachChildren,
+         map: mapChildren,
+         mapIntoWithKeyPrefixInternal: mapIntoWithKeyPrefixInternal,
+         count: countChildren,
+         toArray: toArray
        };
        
-       ReactPerf.measureMethods(DOMChildrenOperations, 'DOMChildrenOperations', {
-         updateTextContent: 'updateTextContent'
-       });
-       
-       module.exports = DOMChildrenOperations;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
+       module.exports = ReactChildren;
 
 /***/ },
-/* 10 */
+/* 8 */
 /***/ function(module, exports, __webpack_require__) {
 
        /* WEBPACK VAR INJECTION */(function(process) {/**
-        * Copyright 2013-2015, Facebook, Inc.
+        * Copyright 2013-present, 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.
         *
-        * @providesModule Danger
-        * @typechecks static-only
+        * @providesModule PooledClass
         */
        
        'use strict';
        
-       var ExecutionEnvironment = __webpack_require__(11);
+       var _prodInvariant = __webpack_require__(9);
        
-       var createNodesFromMarkup = __webpack_require__(12);
-       var emptyFunction = __webpack_require__(17);
-       var getMarkupWrap = __webpack_require__(16);
-       var invariant = __webpack_require__(15);
-       
-       var OPEN_TAG_NAME_EXP = /^(<[^ \/>]+)/;
-       var RESULT_INDEX_ATTR = 'data-danger-index';
+       var invariant = __webpack_require__(10);
        
        /**
-        * Extracts the `nodeName` from a string of markup.
-        *
-        * NOTE: Extracting the `nodeName` does not require a regular expression match
-        * because we make assumptions about React-generated markup (i.e. there are no
-        * spaces surrounding the opening tag and there is at least one attribute).
-        *
-        * @param {string} markup String of markup.
-        * @return {string} Node name of the supplied markup.
-        * @see http://jsperf.com/extract-nodename
+        * Static poolers. Several custom versions for each potential number of
+        * arguments. A completely generic pooler is easy to implement, but would
+        * require accessing the `arguments` object. In each of these, `this` refers to
+        * the Class itself, not an instance. If any others are needed, simply add them
+        * here, or in their own files.
         */
-       function getNodeName(markup) {
-         return markup.substring(1, markup.indexOf(' '));
-       }
-       
-       var Danger = {
-       
-         /**
-          * Renders markup into an array of nodes. The markup is expected to render
-          * into a list of root nodes. Also, the length of `resultList` and
-          * `markupList` should be the same.
-          *
-          * @param {array<string>} markupList List of markup strings to render.
-          * @return {array<DOMElement>} List of rendered nodes.
-          * @internal
-          */
-         dangerouslyRenderMarkup: function (markupList) {
-           !ExecutionEnvironment.canUseDOM ? process.env.NODE_ENV !== 'production' ? invariant(false, 'dangerouslyRenderMarkup(...): Cannot render markup in a worker ' + 'thread. Make sure `window` and `document` are available globally ' + 'before requiring React when unit testing or use ' + 'ReactDOMServer.renderToString for server rendering.') : invariant(false) : undefined;
-           var nodeName;
-           var markupByNodeName = {};
-           // Group markup by `nodeName` if a wrap is necessary, else by '*'.
-           for (var i = 0; i < markupList.length; i++) {
-             !markupList[i] ? process.env.NODE_ENV !== 'production' ? invariant(false, 'dangerouslyRenderMarkup(...): Missing markup.') : invariant(false) : undefined;
-             nodeName = getNodeName(markupList[i]);
-             nodeName = getMarkupWrap(nodeName) ? nodeName : '*';
-             markupByNodeName[nodeName] = markupByNodeName[nodeName] || [];
-             markupByNodeName[nodeName][i] = markupList[i];
-           }
-           var resultList = [];
-           var resultListAssignmentCount = 0;
-           for (nodeName in markupByNodeName) {
-             if (!markupByNodeName.hasOwnProperty(nodeName)) {
-               continue;
-             }
-             var markupListByNodeName = markupByNodeName[nodeName];
-       
-             // This for-in loop skips the holes of the sparse array. The order of
-             // iteration should follow the order of assignment, which happens to match
-             // numerical index order, but we don't rely on that.
-             var resultIndex;
-             for (resultIndex in markupListByNodeName) {
-               if (markupListByNodeName.hasOwnProperty(resultIndex)) {
-                 var markup = markupListByNodeName[resultIndex];
-       
-                 // Push the requested markup with an additional RESULT_INDEX_ATTR
-                 // attribute.  If the markup does not start with a < character, it
-                 // will be discarded below (with an appropriate console.error).
-                 markupListByNodeName[resultIndex] = markup.replace(OPEN_TAG_NAME_EXP,
-                 // This index will be parsed back out below.
-                 '$1 ' + RESULT_INDEX_ATTR + '="' + resultIndex + '" ');
-               }
-             }
-       
-             // Render each group of markup with similar wrapping `nodeName`.
-             var renderNodes = createNodesFromMarkup(markupListByNodeName.join(''), emptyFunction // Do nothing special with <script> tags.
-             );
+       var oneArgumentPooler = function (copyFieldsFrom) {
+         var Klass = this;
+         if (Klass.instancePool.length) {
+           var instance = Klass.instancePool.pop();
+           Klass.call(instance, copyFieldsFrom);
+           return instance;
+         } else {
+           return new Klass(copyFieldsFrom);
+         }
+       };
        
-             for (var j = 0; j < renderNodes.length; ++j) {
-               var renderNode = renderNodes[j];
-               if (renderNode.hasAttribute && renderNode.hasAttribute(RESULT_INDEX_ATTR)) {
+       var twoArgumentPooler = function (a1, a2) {
+         var Klass = this;
+         if (Klass.instancePool.length) {
+           var instance = Klass.instancePool.pop();
+           Klass.call(instance, a1, a2);
+           return instance;
+         } else {
+           return new Klass(a1, a2);
+         }
+       };
        
-                 resultIndex = +renderNode.getAttribute(RESULT_INDEX_ATTR);
-                 renderNode.removeAttribute(RESULT_INDEX_ATTR);
-       
-                 !!resultList.hasOwnProperty(resultIndex) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Danger: Assigning to an already-occupied result index.') : invariant(false) : undefined;
-       
-                 resultList[resultIndex] = renderNode;
-       
-                 // This should match resultList.length and markupList.length when
-                 // we're done.
-                 resultListAssignmentCount += 1;
-               } else if (process.env.NODE_ENV !== 'production') {
-                 console.error('Danger: Discarding unexpected node:', renderNode);
-               }
-             }
-           }
+       var threeArgumentPooler = function (a1, a2, a3) {
+         var Klass = this;
+         if (Klass.instancePool.length) {
+           var instance = Klass.instancePool.pop();
+           Klass.call(instance, a1, a2, a3);
+           return instance;
+         } else {
+           return new Klass(a1, a2, a3);
+         }
+       };
        
-           // Although resultList was populated out of order, it should now be a dense
-           // array.
-           !(resultListAssignmentCount === resultList.length) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Danger: Did not assign to every index of resultList.') : invariant(false) : undefined;
+       var fourArgumentPooler = function (a1, a2, a3, a4) {
+         var Klass = this;
+         if (Klass.instancePool.length) {
+           var instance = Klass.instancePool.pop();
+           Klass.call(instance, a1, a2, a3, a4);
+           return instance;
+         } else {
+           return new Klass(a1, a2, a3, a4);
+         }
+       };
        
-           !(resultList.length === markupList.length) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Danger: Expected markup to render %s nodes, but rendered %s.', markupList.length, resultList.length) : invariant(false) : undefined;
+       var fiveArgumentPooler = function (a1, a2, a3, a4, a5) {
+         var Klass = this;
+         if (Klass.instancePool.length) {
+           var instance = Klass.instancePool.pop();
+           Klass.call(instance, a1, a2, a3, a4, a5);
+           return instance;
+         } else {
+           return new Klass(a1, a2, a3, a4, a5);
+         }
+       };
        
-           return resultList;
-         },
+       var standardReleaser = function (instance) {
+         var Klass = this;
+         !(instance instanceof Klass) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Trying to release an instance into a pool of a different type.') : _prodInvariant('25') : void 0;
+         instance.destructor();
+         if (Klass.instancePool.length < Klass.poolSize) {
+           Klass.instancePool.push(instance);
+         }
+       };
        
-         /**
-          * Replaces a node with a string of markup at its current position within its
-          * parent. The markup must render into a single root node.
-          *
-          * @param {DOMElement} oldChild Child node to replace.
-          * @param {string} markup Markup to render in place of the child node.
-          * @internal
-          */
-         dangerouslyReplaceNodeWithMarkup: function (oldChild, markup) {
-           !ExecutionEnvironment.canUseDOM ? process.env.NODE_ENV !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Cannot render markup in a ' + 'worker thread. Make sure `window` and `document` are available ' + 'globally before requiring React when unit testing or use ' + 'ReactDOMServer.renderToString() for server rendering.') : invariant(false) : undefined;
-           !markup ? process.env.NODE_ENV !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Missing markup.') : invariant(false) : undefined;
-           !(oldChild.tagName.toLowerCase() !== 'html') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Cannot replace markup of the ' + '<html> node. This is because browser quirks make this unreliable ' + 'and/or slow. If you want to render to the root you must use ' + 'server rendering. See ReactDOMServer.renderToString().') : invariant(false) : undefined;
+       var DEFAULT_POOL_SIZE = 10;
+       var DEFAULT_POOLER = oneArgumentPooler;
        
-           var newChild;
-           if (typeof markup === 'string') {
-             newChild = createNodesFromMarkup(markup, emptyFunction)[0];
-           } else {
-             newChild = markup;
-           }
-           oldChild.parentNode.replaceChild(newChild, oldChild);
+       /**
+        * Augments `CopyConstructor` to be a poolable class, augmenting only the class
+        * itself (statically) not adding any prototypical fields. Any CopyConstructor
+        * you give this may have a `poolSize` property, and will look for a
+        * prototypical `destructor` on instances.
+        *
+        * @param {Function} CopyConstructor Constructor that can be used to reset.
+        * @param {Function} pooler Customizable pooler.
+        */
+       var addPoolingTo = function (CopyConstructor, pooler) {
+         var NewKlass = CopyConstructor;
+         NewKlass.instancePool = [];
+         NewKlass.getPooled = pooler || DEFAULT_POOLER;
+         if (!NewKlass.poolSize) {
+           NewKlass.poolSize = DEFAULT_POOL_SIZE;
          }
+         NewKlass.release = standardReleaser;
+         return NewKlass;
+       };
        
+       var PooledClass = {
+         addPoolingTo: addPoolingTo,
+         oneArgumentPooler: oneArgumentPooler,
+         twoArgumentPooler: twoArgumentPooler,
+         threeArgumentPooler: threeArgumentPooler,
+         fourArgumentPooler: fourArgumentPooler,
+         fiveArgumentPooler: fiveArgumentPooler
        };
        
-       module.exports = Danger;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
+       module.exports = PooledClass;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
 
 /***/ },
-/* 11 */
+/* 9 */
 /***/ function(module, exports) {
 
        /**
-        * Copyright 2013-2015, Facebook, Inc.
+        * Copyright (c) 2013-present, 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.
         *
-        * @providesModule ExecutionEnvironment
+        * @providesModule reactProdInvariant
+        * 
         */
-       
        'use strict';
        
-       var canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);
-       
        /**
-        * Simple, lightweight module assisting with the detection and context of
-        * Worker. Helps avoid circular dependencies and allows code to reason about
-        * whether or not they are in a Worker, even if they never include the main
-        * `ReactWorker` dependency.
+        * WARNING: DO NOT manually require this module.
+        * This is a replacement for `invariant(...)` used by the error code system
+        * and will _only_ be required by the corresponding babel pass.
+        * It always throws.
         */
-       var ExecutionEnvironment = {
        
-         canUseDOM: canUseDOM,
+       function reactProdInvariant(code) {
+         var argCount = arguments.length - 1;
        
-         canUseWorkers: typeof Worker !== 'undefined',
+         var message = 'Minified React error #' + code + '; visit ' + 'http://facebook.github.io/react/docs/error-decoder.html?invariant=' + code;
        
-         canUseEventListeners: canUseDOM && !!(window.addEventListener || window.attachEvent),
+         for (var argIdx = 0; argIdx < argCount; argIdx++) {
+           message += '&args[]=' + encodeURIComponent(arguments[argIdx + 1]);
+         }
        
-         canUseViewport: canUseDOM && !!window.screen,
+         message += ' for the full message or use the non-minified dev environment' + ' for full errors and additional helpful warnings.';
        
-         isInWorker: !canUseDOM // For now, this is true - might change in the future.
+         var error = new Error(message);
+         error.name = 'Invariant Violation';
+         error.framesToPop = 1; // we don't care about reactProdInvariant's own frame
        
-       };
+         throw error;
+       }
        
-       module.exports = ExecutionEnvironment;
+       module.exports = reactProdInvariant;
 
 /***/ },
-/* 12 */
+/* 10 */
 /***/ function(module, exports, __webpack_require__) {
 
        /* WEBPACK VAR INJECTION */(function(process) {/**
-        * Copyright 2013-2015, Facebook, Inc.
+        * Copyright (c) 2013-present, 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.
         *
-        * @providesModule createNodesFromMarkup
-        * @typechecks
         */
        
-       /*eslint-disable fb-www/unsafe-html*/
-       
        'use strict';
        
-       var ExecutionEnvironment = __webpack_require__(11);
-       
-       var createArrayFromMixed = __webpack_require__(13);
-       var getMarkupWrap = __webpack_require__(16);
-       var invariant = __webpack_require__(15);
-       
-       /**
-        * Dummy container used to render all markup.
-        */
-       var dummyNode = ExecutionEnvironment.canUseDOM ? document.createElement('div') : null;
-       
-       /**
-        * Pattern used by `getNodeName`.
-        */
-       var nodeNamePattern = /^\s*<(\w+)/;
-       
        /**
-        * Extracts the `nodeName` of the first element in a string of markup.
+        * Use invariant() to assert state which your program assumes to be true.
         *
-        * @param {string} markup String of markup.
-        * @return {?string} Node name of the supplied markup.
-        */
-       function getNodeName(markup) {
-         var nodeNameMatch = markup.match(nodeNamePattern);
-         return nodeNameMatch && nodeNameMatch[1].toLowerCase();
-       }
-       
-       /**
-        * Creates an array containing the nodes rendered from the supplied markup. The
-        * optionally supplied `handleScript` function will be invoked once for each
-        * <script> element that is rendered. If no `handleScript` function is supplied,
-        * an exception is thrown if any <script> elements are rendered.
+        * Provide sprintf-style format (only %s is supported) and arguments
+        * to provide information about what broke and what you were
+        * expecting.
         *
-        * @param {string} markup A string of valid HTML markup.
-        * @param {?function} handleScript Invoked once for each rendered <script>.
-        * @return {array<DOMElement|DOMTextNode>} An array of rendered nodes.
+        * The invariant message will be stripped in production, but the invariant
+        * will remain to ensure logic does not differ in production.
         */
-       function createNodesFromMarkup(markup, handleScript) {
-         var node = dummyNode;
-         !!!dummyNode ? process.env.NODE_ENV !== 'production' ? invariant(false, 'createNodesFromMarkup dummy not initialized') : invariant(false) : undefined;
-         var nodeName = getNodeName(markup);
-       
-         var wrap = nodeName && getMarkupWrap(nodeName);
-         if (wrap) {
-           node.innerHTML = wrap[1] + markup + wrap[2];
        
-           var wrapDepth = wrap[0];
-           while (wrapDepth--) {
-             node = node.lastChild;
+       function invariant(condition, format, a, b, c, d, e, f) {
+         if (process.env.NODE_ENV !== 'production') {
+           if (format === undefined) {
+             throw new Error('invariant requires an error message argument');
            }
-         } else {
-           node.innerHTML = markup;
          }
        
-         var scripts = node.getElementsByTagName('script');
-         if (scripts.length) {
-           !handleScript ? process.env.NODE_ENV !== 'production' ? invariant(false, 'createNodesFromMarkup(...): Unexpected <script> element rendered.') : invariant(false) : undefined;
-           createArrayFromMixed(scripts).forEach(handleScript);
-         }
+         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';
+           }
        
-         var nodes = createArrayFromMixed(node.childNodes);
-         while (node.lastChild) {
-           node.removeChild(node.lastChild);
+           error.framesToPop = 1; // we don't care about invariant's own frame
+           throw error;
          }
-         return nodes;
        }
        
-       module.exports = createNodesFromMarkup;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
+       module.exports = invariant;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
 
 /***/ },
-/* 13 */
+/* 11 */
 /***/ function(module, exports, __webpack_require__) {
 
-       /**
-        * Copyright 2013-2015, Facebook, Inc.
+       /* WEBPACK VAR INJECTION */(function(process) {/**
+        * Copyright 2014-present, 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.
         *
-        * @providesModule createArrayFromMixed
-        * @typechecks
+        * @providesModule ReactElement
         */
        
        'use strict';
        
-       var toArray = __webpack_require__(14);
+       var _assign = __webpack_require__(6);
        
-       /**
-        * Perform a heuristic test to determine if an object is "array-like".
-        *
-        *   A monk asked Joshu, a Zen master, "Has a dog Buddha nature?"
-        *   Joshu replied: "Mu."
-        *
-        * This function determines if its argument has "array nature": it returns
-        * true if the argument is an actual array, an `arguments' object, or an
-        * HTMLCollection (e.g. node.childNodes or node.getElementsByTagName()).
-        *
-        * It will return false for other array-like objects like Filelist.
-        *
-        * @param {*} obj
-        * @return {boolean}
-        */
-       function hasArrayNature(obj) {
-         return(
-           // not null/false
-           !!obj && (
-           // arrays are objects, NodeLists are functions in Safari
-           typeof obj == 'object' || typeof obj == 'function') &&
-           // quacks like an array
-           'length' in obj &&
-           // not window
-           !('setInterval' in obj) &&
-           // no DOM node should be considered an array-like
-           // a 'select' element has 'length' and 'item' properties on IE8
-           typeof obj.nodeType != 'number' && (
-           // a real array
-           Array.isArray(obj) ||
-           // arguments
-           'callee' in obj ||
-           // HTMLCollection/NodeList
-           'item' in obj)
-         );
+       var ReactCurrentOwner = __webpack_require__(12);
+       
+       var warning = __webpack_require__(13);
+       var canDefineProperty = __webpack_require__(15);
+       var hasOwnProperty = Object.prototype.hasOwnProperty;
+       
+       // The Symbol used to tag the ReactElement type. If there is no native Symbol
+       // nor polyfill, then a plain number is used for performance.
+       var REACT_ELEMENT_TYPE = typeof Symbol === 'function' && Symbol['for'] && Symbol['for']('react.element') || 0xeac7;
+       
+       var RESERVED_PROPS = {
+         key: true,
+         ref: true,
+         __self: true,
+         __source: true
+       };
+       
+       var specialPropKeyWarningShown, specialPropRefWarningShown;
+       
+       function hasValidRef(config) {
+         if (process.env.NODE_ENV !== 'production') {
+           if (hasOwnProperty.call(config, 'ref')) {
+             var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;
+             if (getter && getter.isReactWarning) {
+               return false;
+             }
+           }
+         }
+         return config.ref !== undefined;
+       }
+       
+       function hasValidKey(config) {
+         if (process.env.NODE_ENV !== 'production') {
+           if (hasOwnProperty.call(config, 'key')) {
+             var getter = Object.getOwnPropertyDescriptor(config, 'key').get;
+             if (getter && getter.isReactWarning) {
+               return false;
+             }
+           }
+         }
+         return config.key !== undefined;
        }
        
        /**
-        * Ensure that the argument is an array by wrapping it in an array if it is not.
-        * Creates a copy of the argument if it is already an array.
-        *
-        * This is mostly useful idiomatically:
+        * Factory method to create a new React element. This no longer adheres to
+        * the class pattern, so do not use new to call it. Also, no instanceof check
+        * will work. Instead test $$typeof field against Symbol.for('react.element') to check
+        * if something is a React Element.
         *
-        *   var createArrayFromMixed = require('createArrayFromMixed');
-        *
-        *   function takesOneOrMoreThings(things) {
-        *     things = createArrayFromMixed(things);
-        *     ...
-        *   }
-        *
-        * This allows you to treat `things' as an array, but accept scalars in the API.
-        *
-        * If you need to convert an array-like object, like `arguments`, into an array
-        * use toArray instead.
-        *
-        * @param {*} obj
-        * @return {array}
+        * @param {*} type
+        * @param {*} key
+        * @param {string|object} ref
+        * @param {*} self A *temporary* helper to detect places where `this` is
+        * different from the `owner` when React.createElement is called, so that we
+        * can warn. We want to get rid of owner and replace string `ref`s with arrow
+        * functions, and as long as `this` and owner are the same, there will be no
+        * change in behavior.
+        * @param {*} source An annotation object (added by a transpiler or otherwise)
+        * indicating filename, line number, and/or other information.
+        * @param {*} owner
+        * @param {*} props
+        * @internal
         */
-       function createArrayFromMixed(obj) {
-         if (!hasArrayNature(obj)) {
-           return [obj];
-         } else if (Array.isArray(obj)) {
-           return obj.slice();
-         } else {
-           return toArray(obj);
-         }
-       }
+       var ReactElement = function (type, key, ref, self, source, owner, props) {
+         var element = {
+           // This tag allow us to uniquely identify this as a React Element
+           $$typeof: REACT_ELEMENT_TYPE,
        
-       module.exports = createArrayFromMixed;
-
-/***/ },
-/* 14 */
-/***/ function(module, exports, __webpack_require__) {
-
-       /* WEBPACK VAR INJECTION */(function(process) {/**
-        * 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.
-        *
-        * @providesModule toArray
-        * @typechecks
-        */
+           // Built-in properties that belong on the element
+           type: type,
+           key: key,
+           ref: ref,
+           props: props,
        
-       'use strict';
+           // Record the component responsible for creating this element.
+           _owner: owner
+         };
+       
+         if (process.env.NODE_ENV !== 'production') {
+           // The validation flag is currently mutative. We put it on
+           // an external backing store so that we can freeze the whole object.
+           // This can be replaced with a WeakMap once they are implemented in
+           // commonly used development environments.
+           element._store = {};
+           var shadowChildren = Array.isArray(props.children) ? props.children.slice(0) : props.children;
+       
+           // To make comparing ReactElements easier for testing purposes, we make
+           // the validation flag non-enumerable (where possible, which should
+           // include every environment we run tests in), so the test framework
+           // ignores it.
+           if (canDefineProperty) {
+             Object.defineProperty(element._store, 'validated', {
+               configurable: false,
+               enumerable: false,
+               writable: true,
+               value: false
+             });
+             // self and source are DEV only properties.
+             Object.defineProperty(element, '_self', {
+               configurable: false,
+               enumerable: false,
+               writable: false,
+               value: self
+             });
+             Object.defineProperty(element, '_shadowChildren', {
+               configurable: false,
+               enumerable: false,
+               writable: false,
+               value: shadowChildren
+             });
+             // Two elements created in two different places should be considered
+             // equal for testing purposes and therefore we hide it from enumeration.
+             Object.defineProperty(element, '_source', {
+               configurable: false,
+               enumerable: false,
+               writable: false,
+               value: source
+             });
+           } else {
+             element._store.validated = false;
+             element._self = self;
+             element._shadowChildren = shadowChildren;
+             element._source = source;
+           }
+           if (Object.freeze) {
+             Object.freeze(element.props);
+             Object.freeze(element);
+           }
+         }
        
-       var invariant = __webpack_require__(15);
+         return element;
+       };
        
        /**
-        * Convert array-like objects to arrays.
-        *
-        * This API assumes the caller knows the contents of the data type. For less
-        * well defined inputs use createArrayFromMixed.
-        *
-        * @param {object|function|filelist} obj
-        * @return {array}
+        * Create and return a new ReactElement of the given type.
+        * See https://facebook.github.io/react/docs/top-level-api.html#react.createelement
         */
-       function toArray(obj) {
-         var length = obj.length;
+       ReactElement.createElement = function (type, config, children) {
+         var propName;
        
-         // Some browse builtin objects can report typeof 'function' (e.g. NodeList in
-         // old versions of Safari).
-         !(!Array.isArray(obj) && (typeof obj === 'object' || typeof obj === 'function')) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'toArray: Array-like object expected') : invariant(false) : undefined;
+         // Reserved names are extracted
+         var props = {};
        
-         !(typeof length === 'number') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'toArray: Object needs a length property') : invariant(false) : undefined;
+         var key = null;
+         var ref = null;
+         var self = null;
+         var source = null;
        
-         !(length === 0 || length - 1 in obj) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'toArray: Object should have keys for indices') : invariant(false) : undefined;
+         if (config != null) {
+           if (process.env.NODE_ENV !== 'production') {
+             process.env.NODE_ENV !== 'production' ? warning(
+             /* eslint-disable no-proto */
+             config.__proto__ == null || config.__proto__ === Object.prototype,
+             /* eslint-enable no-proto */
+             'React.createElement(...): Expected props argument to be a plain object. ' + 'Properties defined in its prototype chain will be ignored.') : void 0;
+           }
        
-         // Old IE doesn't give collections access to hasOwnProperty. Assume inputs
-         // without method will throw during the slice call and skip straight to the
-         // fallback.
-         if (obj.hasOwnProperty) {
-           try {
-             return Array.prototype.slice.call(obj);
-           } catch (e) {
-             // IE < 9 does not support Array#slice on collections objects
+           if (hasValidRef(config)) {
+             ref = config.ref;
+           }
+           if (hasValidKey(config)) {
+             key = '' + config.key;
            }
-         }
        
-         // Fall back to copying key by key. This assumes all keys have a value,
-         // so will not preserve sparsely populated inputs.
-         var ret = Array(length);
-         for (var ii = 0; ii < length; ii++) {
-           ret[ii] = obj[ii];
+           self = config.__self === undefined ? null : config.__self;
+           source = config.__source === undefined ? null : config.__source;
+           // Remaining properties are added to a new props object
+           for (propName in config) {
+             if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {
+               props[propName] = config[propName];
+             }
+           }
          }
-         return ret;
-       }
-       
-       module.exports = toArray;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
-
-/***/ },
-/* 15 */
-/***/ function(module, exports, __webpack_require__) {
-
-       /* WEBPACK VAR INJECTION */(function(process) {/**
-        * 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.
-        *
-        * @providesModule invariant
-        */
-       
-       '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 (process.env.NODE_ENV !== 'production') {
-           if (format === undefined) {
-             throw new Error('invariant requires an error message argument');
+         // Children can be more than one argument, and those are transferred onto
+         // the newly allocated props object.
+         var childrenLength = arguments.length - 2;
+         if (childrenLength === 1) {
+           props.children = children;
+         } else if (childrenLength > 1) {
+           var childArray = Array(childrenLength);
+           for (var i = 0; i < childrenLength; i++) {
+             childArray[i] = arguments[i + 2];
            }
+           props.children = childArray;
          }
        
-         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('Invariant Violation: ' + format.replace(/%s/g, function () {
-               return args[argIndex++];
-             }));
+         // Resolve default props
+         if (type && type.defaultProps) {
+           var defaultProps = type.defaultProps;
+           for (propName in defaultProps) {
+             if (props[propName] === undefined) {
+               props[propName] = defaultProps[propName];
+             }
            }
+         }
+         if (process.env.NODE_ENV !== 'production') {
+           var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;
        
-           error.framesToPop = 1; // we don't care about invariant's own frame
-           throw error;
+           // Create dummy `key` and `ref` property to `props` to warn users against its use
+           var warnAboutAccessingKey = function () {
+             if (!specialPropKeyWarningShown) {
+               specialPropKeyWarningShown = true;
+               process.env.NODE_ENV !== 'production' ? warning(false, '%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://fb.me/react-special-props)', displayName) : void 0;
+             }
+             return undefined;
+           };
+           warnAboutAccessingKey.isReactWarning = true;
+       
+           var warnAboutAccessingRef = function () {
+             if (!specialPropRefWarningShown) {
+               specialPropRefWarningShown = true;
+               process.env.NODE_ENV !== 'production' ? warning(false, '%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://fb.me/react-special-props)', displayName) : void 0;
+             }
+             return undefined;
+           };
+           warnAboutAccessingRef.isReactWarning = true;
+       
+           if (typeof props.$$typeof === 'undefined' || props.$$typeof !== REACT_ELEMENT_TYPE) {
+             if (!props.hasOwnProperty('key')) {
+               Object.defineProperty(props, 'key', {
+                 get: warnAboutAccessingKey,
+                 configurable: true
+               });
+             }
+             if (!props.hasOwnProperty('ref')) {
+               Object.defineProperty(props, 'ref', {
+                 get: warnAboutAccessingRef,
+                 configurable: true
+               });
+             }
+           }
          }
+         return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);
        };
        
-       module.exports = invariant;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
-
-/***/ },
-/* 16 */
-/***/ function(module, exports, __webpack_require__) {
-
-       /* WEBPACK VAR INJECTION */(function(process) {/**
-        * 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.
-        *
-        * @providesModule getMarkupWrap
+       /**
+        * Return a function that produces ReactElements of a given type.
+        * See https://facebook.github.io/react/docs/top-level-api.html#react.createfactory
         */
+       ReactElement.createFactory = function (type) {
+         var factory = ReactElement.createElement.bind(null, type);
+         // Expose the type on the factory and the prototype so that it can be
+         // easily accessed on elements. E.g. `<Foo />.type === Foo`.
+         // This should not be named `constructor` since this may not be the function
+         // that created the element, and it may not even be a constructor.
+         // Legacy hook TODO: Warn if this is accessed
+         factory.type = type;
+         return factory;
+       };
        
-       /*eslint-disable fb-www/unsafe-html */
+       ReactElement.cloneAndReplaceKey = function (oldElement, newKey) {
+         var newElement = ReactElement(oldElement.type, newKey, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, oldElement.props);
        
-       'use strict';
+         return newElement;
+       };
        
-       var ExecutionEnvironment = __webpack_require__(11);
+       /**
+        * Clone and return a new ReactElement using element as the starting point.
+        * See https://facebook.github.io/react/docs/top-level-api.html#react.cloneelement
+        */
+       ReactElement.cloneElement = function (element, config, children) {
+         var propName;
+       
+         // Original props are copied
+         var props = _assign({}, element.props);
+       
+         // Reserved names are extracted
+         var key = element.key;
+         var ref = element.ref;
+         // Self is preserved since the owner is preserved.
+         var self = element._self;
+         // Source is preserved since cloneElement is unlikely to be targeted by a
+         // transpiler, and the original source is probably a better indicator of the
+         // true owner.
+         var source = element._source;
+       
+         // Owner will be preserved, unless ref is overridden
+         var owner = element._owner;
+       
+         if (config != null) {
+           if (process.env.NODE_ENV !== 'production') {
+             process.env.NODE_ENV !== 'production' ? warning(
+             /* eslint-disable no-proto */
+             config.__proto__ == null || config.__proto__ === Object.prototype,
+             /* eslint-enable no-proto */
+             'React.cloneElement(...): Expected props argument to be a plain object. ' + 'Properties defined in its prototype chain will be ignored.') : void 0;
+           }
+       
+           if (hasValidRef(config)) {
+             // Silently steal the ref from the parent.
+             ref = config.ref;
+             owner = ReactCurrentOwner.current;
+           }
+           if (hasValidKey(config)) {
+             key = '' + config.key;
+           }
+       
+           // Remaining properties override existing props
+           var defaultProps;
+           if (element.type && element.type.defaultProps) {
+             defaultProps = element.type.defaultProps;
+           }
+           for (propName in config) {
+             if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {
+               if (config[propName] === undefined && defaultProps !== undefined) {
+                 // Resolve default props
+                 props[propName] = defaultProps[propName];
+               } else {
+                 props[propName] = config[propName];
+               }
+             }
+           }
+         }
+       
+         // Children can be more than one argument, and those are transferred onto
+         // the newly allocated props object.
+         var childrenLength = arguments.length - 2;
+         if (childrenLength === 1) {
+           props.children = children;
+         } else if (childrenLength > 1) {
+           var childArray = Array(childrenLength);
+           for (var i = 0; i < childrenLength; i++) {
+             childArray[i] = arguments[i + 2];
+           }
+           props.children = childArray;
+         }
        
-       var invariant = __webpack_require__(15);
+         return ReactElement(element.type, key, ref, self, source, owner, props);
+       };
        
        /**
-        * Dummy container used to detect which wraps are necessary.
+        * Verifies the object is a ReactElement.
+        * See https://facebook.github.io/react/docs/top-level-api.html#react.isvalidelement
+        * @param {?object} object
+        * @return {boolean} True if `object` is a valid component.
+        * @final
         */
-       var dummyNode = ExecutionEnvironment.canUseDOM ? document.createElement('div') : null;
+       ReactElement.isValidElement = function (object) {
+         return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;
+       };
        
+       ReactElement.REACT_ELEMENT_TYPE = REACT_ELEMENT_TYPE;
+       
+       module.exports = ReactElement;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
+
+/***/ },
+/* 12 */
+/***/ function(module, exports) {
+
        /**
-        * Some browsers cannot use `innerHTML` to render certain elements standalone,
-        * so we wrap them, render the wrapped nodes, then extract the desired node.
+        * Copyright 2013-present, Facebook, Inc.
+        * All rights reserved.
         *
-        * In IE8, certain elements cannot render alone, so wrap all elements ('*').
+        * 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.
+        *
+        * @providesModule ReactCurrentOwner
         */
        
-       var shouldWrap = {};
-       
-       var selectWrap = [1, '<select multiple="true">', '</select>'];
-       var tableWrap = [1, '<table>', '</table>'];
-       var trWrap = [3, '<table><tbody><tr>', '</tr></tbody></table>'];
+       'use strict';
        
-       var svgWrap = [1, '<svg xmlns="http://www.w3.org/2000/svg">', '</svg>'];
+       /**
+        * Keeps track of the current owner.
+        *
+        * The current owner is the component who should own any components that are
+        * currently being constructed.
+        */
        
-       var markupWrap = {
-         '*': [1, '?<div>', '</div>'],
+       var ReactCurrentOwner = {
        
-         'area': [1, '<map>', '</map>'],
-         'col': [2, '<table><tbody></tbody><colgroup>', '</colgroup></table>'],
-         'legend': [1, '<fieldset>', '</fieldset>'],
-         'param': [1, '<object>', '</object>'],
-         'tr': [2, '<table><tbody>', '</tbody></table>'],
+         /**
+          * @internal
+          * @type {ReactComponent}
+          */
+         current: null
        
-         'optgroup': selectWrap,
-         'option': selectWrap,
+       };
        
-         'caption': tableWrap,
-         'colgroup': tableWrap,
-         'tbody': tableWrap,
-         'tfoot': tableWrap,
-         'thead': tableWrap,
+       module.exports = ReactCurrentOwner;
+
+/***/ },
+/* 13 */
+/***/ function(module, exports, __webpack_require__) {
+
+       /* WEBPACK VAR INJECTION */(function(process) {/**
+        * Copyright 2014-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.
+        *
+        */
        
-         'td': trWrap,
-         'th': trWrap
-       };
+       'use strict';
        
-       // Initialize the SVG elements since we know they'll always need to be wrapped
-       // consistently. If they are created inside a <div> they will be initialized in
-       // the wrong namespace (and will not display).
-       var svgElements = ['circle', 'clipPath', 'defs', 'ellipse', 'g', 'image', 'line', 'linearGradient', 'mask', 'path', 'pattern', 'polygon', 'polyline', 'radialGradient', 'rect', 'stop', 'text', 'tspan'];
-       svgElements.forEach(function (nodeName) {
-         markupWrap[nodeName] = svgWrap;
-         shouldWrap[nodeName] = true;
-       });
+       var emptyFunction = __webpack_require__(14);
        
        /**
-        * Gets the markup wrap configuration for the supplied `nodeName`.
-        *
-        * NOTE: This lazily detects which wraps are necessary for the current browser.
-        *
-        * @param {string} nodeName Lowercase `nodeName`.
-        * @return {?array} Markup wrap configuration, if applicable.
+        * Similar to invariant but only logs a warning if the condition is not met.
+        * This can be used to log issues in development environments in critical
+        * paths. Removing the logging code for production environments will keep the
+        * same logic and follow the same code paths.
         */
-       function getMarkupWrap(nodeName) {
-         !!!dummyNode ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Markup wrapping node not initialized') : invariant(false) : undefined;
-         if (!markupWrap.hasOwnProperty(nodeName)) {
-           nodeName = '*';
-         }
-         if (!shouldWrap.hasOwnProperty(nodeName)) {
-           if (nodeName === '*') {
-             dummyNode.innerHTML = '<link />';
-           } else {
-             dummyNode.innerHTML = '<' + nodeName + '></' + nodeName + '>';
+       
+       var warning = emptyFunction;
+       
+       if (process.env.NODE_ENV !== 'production') {
+         warning = function warning(condition, format) {
+           for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
+             args[_key - 2] = arguments[_key];
            }
-           shouldWrap[nodeName] = !dummyNode.firstChild;
-         }
-         return shouldWrap[nodeName] ? markupWrap[nodeName] : null;
+       
+           if (format === undefined) {
+             throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument');
+           }
+       
+           if (format.indexOf('Failed Composite propType: ') === 0) {
+             return; // Ignore CompositeComponent proptype check.
+           }
+       
+           if (!condition) {
+             var argIndex = 0;
+             var message = 'Warning: ' + format.replace(/%s/g, function () {
+               return args[argIndex++];
+             });
+             if (typeof console !== 'undefined') {
+               console.error(message);
+             }
+             try {
+               // --- Welcome to debugging React ---
+               // 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);
+             } catch (x) {}
+           }
+         };
        }
        
-       module.exports = getMarkupWrap;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
+       module.exports = warning;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
 
 /***/ },
-/* 17 */
+/* 14 */
 /***/ function(module, exports) {
 
+       "use strict";
+       
        /**
-        * Copyright 2013-2015, Facebook, Inc.
+        * Copyright (c) 2013-present, 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.
         *
-        * @providesModule emptyFunction
+        * 
         */
        
-       "use strict";
-       
        function makeEmptyFunction(arg) {
          return function () {
            return arg;
         * primarily useful idiomatically for overridable function endpoints which
         * always need to be callable, since JS lacks a null-call idiom ala Cocoa.
         */
-       function emptyFunction() {}
+       var emptyFunction = function emptyFunction() {};
        
        emptyFunction.thatReturns = makeEmptyFunction;
        emptyFunction.thatReturnsFalse = makeEmptyFunction(false);
        module.exports = emptyFunction;
 
 /***/ },
-/* 18 */
+/* 15 */
 /***/ function(module, exports, __webpack_require__) {
 
-       /**
-        * Copyright 2013-2015, Facebook, Inc.
+       /* WEBPACK VAR INJECTION */(function(process) {/**
+        * Copyright 2013-present, 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.
         *
-        * @providesModule ReactMultiChildUpdateTypes
+        * @providesModule canDefineProperty
         */
        
        'use strict';
        
-       var keyMirror = __webpack_require__(19);
-       
-       /**
-        * When a component's children are updated, a series of update configuration
-        * objects are created in order to batch and serialize the required changes.
-        *
-        * Enumerates all the possible types of update configurations.
-        *
-        * @internal
-        */
-       var ReactMultiChildUpdateTypes = keyMirror({
-         INSERT_MARKUP: null,
-         MOVE_EXISTING: null,
-         REMOVE_NODE: null,
-         SET_MARKUP: null,
-         TEXT_CONTENT: null
-       });
+       var canDefineProperty = false;
+       if (process.env.NODE_ENV !== 'production') {
+         try {
+           Object.defineProperty({}, 'x', { get: function () {} });
+           canDefineProperty = true;
+         } catch (x) {
+           // IE will fail on defineProperty
+         }
+       }
        
-       module.exports = ReactMultiChildUpdateTypes;
+       module.exports = canDefineProperty;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
 
 /***/ },
-/* 19 */
+/* 16 */
 /***/ function(module, exports, __webpack_require__) {
 
        /* WEBPACK VAR INJECTION */(function(process) {/**
-        * Copyright 2013-2015, Facebook, Inc.
+        * Copyright 2013-present, 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.
         *
-        * @providesModule keyMirror
-        * @typechecks static-only
+        * @providesModule traverseAllChildren
         */
        
        'use strict';
        
-       var invariant = __webpack_require__(15);
+       var _prodInvariant = __webpack_require__(9);
+       
+       var ReactCurrentOwner = __webpack_require__(12);
+       var ReactElement = __webpack_require__(11);
+       
+       var getIteratorFn = __webpack_require__(17);
+       var invariant = __webpack_require__(10);
+       var KeyEscapeUtils = __webpack_require__(18);
+       var warning = __webpack_require__(13);
+       
+       var SEPARATOR = '.';
+       var SUBSEPARATOR = ':';
        
        /**
-        * Constructs an enumeration with keys equal to their value.
-        *
-        * For example:
+        * TODO: Test that a single child and an array with one item have the same key
+        * pattern.
+        */
+       
+       var didWarnAboutMaps = false;
+       
+       /**
+        * Generate a key string that identifies a component within a set.
         *
-        *   var COLORS = keyMirror({blue: null, red: null});
-        *   var myColor = COLORS.blue;
-        *   var isColorValid = !!COLORS[myColor];
-        *
-        * The last line could not be performed if the values of the generated enum were
-        * not equal to their keys.
-        *
-        *   Input:  {key1: val1, key2: val2}
-        *   Output: {key1: key1, key2: key2}
-        *
-        * @param {object} obj
-        * @return {object}
+        * @param {*} component A component that could contain a manual key.
+        * @param {number} index Index that is used if a manual key is not provided.
+        * @return {string}
         */
-       var keyMirror = function (obj) {
-         var ret = {};
-         var key;
-         !(obj instanceof Object && !Array.isArray(obj)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'keyMirror(...): Argument must be an object.') : invariant(false) : undefined;
-         for (key in obj) {
-           if (!obj.hasOwnProperty(key)) {
-             continue;
-           }
-           ret[key] = key;
+       function getComponentKey(component, index) {
+         // Do some typechecking here since we call this blindly. We want to ensure
+         // that we don't block potential future ES APIs.
+         if (component && typeof component === 'object' && component.key != null) {
+           // Explicit key
+           return KeyEscapeUtils.escape(component.key);
          }
-         return ret;
-       };
+         // Implicit key determined by the index in the set
+         return index.toString(36);
+       }
        
-       module.exports = keyMirror;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
-
-/***/ },
-/* 20 */
-/***/ function(module, exports, __webpack_require__) {
-
-       /* WEBPACK VAR INJECTION */(function(process) {/**
-        * 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.
-        *
-        * @providesModule ReactPerf
-        * @typechecks static-only
+       /**
+        * @param {?*} children Children tree container.
+        * @param {!string} nameSoFar Name of the key path so far.
+        * @param {!function} callback Callback to invoke with each child found.
+        * @param {?*} traverseContext Used to pass information throughout the traversal
+        * process.
+        * @return {!number} The number of children in this subtree.
         */
+       function traverseAllChildrenImpl(children, nameSoFar, callback, traverseContext) {
+         var type = typeof children;
        
-       'use strict';
+         if (type === 'undefined' || type === 'boolean') {
+           // All of the above are perceived as null.
+           children = null;
+         }
        
-       /**
-        * ReactPerf is a general AOP system designed to measure performance. This
-        * module only has the hooks: see ReactDefaultPerf for the analysis tool.
-        */
-       var ReactPerf = {
-         /**
-          * Boolean to enable/disable measurement. Set to false by default to prevent
-          * accidental logging and perf loss.
-          */
-         enableMeasure: false,
+         if (children === null || type === 'string' || type === 'number' || ReactElement.isValidElement(children)) {
+           callback(traverseContext, children,
+           // If it's the only child, treat the name as if it was wrapped in an array
+           // so that it's consistent if the number of children grows.
+           nameSoFar === '' ? SEPARATOR + getComponentKey(children, 0) : nameSoFar);
+           return 1;
+         }
        
-         /**
-          * Holds onto the measure function in use. By default, don't measure
-          * anything, but we'll override this if we inject a measure function.
-          */
-         storedMeasure: _noMeasure,
+         var child;
+         var nextName;
+         var subtreeCount = 0; // Count of children found in the current subtree.
+         var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR;
        
-         /**
-          * @param {object} object
-          * @param {string} objectName
-          * @param {object<string>} methodNames
-          */
-         measureMethods: function (object, objectName, methodNames) {
-           if (process.env.NODE_ENV !== 'production') {
-             for (var key in methodNames) {
-               if (!methodNames.hasOwnProperty(key)) {
-                 continue;
+         if (Array.isArray(children)) {
+           for (var i = 0; i < children.length; i++) {
+             child = children[i];
+             nextName = nextNamePrefix + getComponentKey(child, i);
+             subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);
+           }
+         } else {
+           var iteratorFn = getIteratorFn(children);
+           if (iteratorFn) {
+             var iterator = iteratorFn.call(children);
+             var step;
+             if (iteratorFn !== children.entries) {
+               var ii = 0;
+               while (!(step = iterator.next()).done) {
+                 child = step.value;
+                 nextName = nextNamePrefix + getComponentKey(child, ii++);
+                 subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);
+               }
+             } else {
+               if (process.env.NODE_ENV !== 'production') {
+                 var mapsAsChildrenAddendum = '';
+                 if (ReactCurrentOwner.current) {
+                   var mapsAsChildrenOwnerName = ReactCurrentOwner.current.getName();
+                   if (mapsAsChildrenOwnerName) {
+                     mapsAsChildrenAddendum = ' Check the render method of `' + mapsAsChildrenOwnerName + '`.';
+                   }
+                 }
+                 process.env.NODE_ENV !== 'production' ? warning(didWarnAboutMaps, 'Using Maps as children is not yet fully supported. It is an ' + 'experimental feature that might be removed. Convert it to a ' + 'sequence / iterable of keyed ReactElements instead.%s', mapsAsChildrenAddendum) : void 0;
+                 didWarnAboutMaps = true;
+               }
+               // Iterator will provide entry [k,v] tuples rather than values.
+               while (!(step = iterator.next()).done) {
+                 var entry = step.value;
+                 if (entry) {
+                   child = entry[1];
+                   nextName = nextNamePrefix + KeyEscapeUtils.escape(entry[0]) + SUBSEPARATOR + getComponentKey(child, 0);
+                   subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);
+                 }
                }
-               object[key] = ReactPerf.measure(objectName, methodNames[key], object[key]);
              }
-           }
-         },
-       
-         /**
-          * Use this to wrap methods you want to measure. Zero overhead in production.
-          *
-          * @param {string} objName
-          * @param {string} fnName
-          * @param {function} func
-          * @return {function}
-          */
-         measure: function (objName, fnName, func) {
-           if (process.env.NODE_ENV !== 'production') {
-             var measuredFunc = null;
-             var wrapper = function () {
-               if (ReactPerf.enableMeasure) {
-                 if (!measuredFunc) {
-                   measuredFunc = ReactPerf.storedMeasure(objName, fnName, func);
+           } else if (type === 'object') {
+             var addendum = '';
+             if (process.env.NODE_ENV !== 'production') {
+               addendum = ' If you meant to render a collection of children, use an array ' + 'instead or wrap the object using createFragment(object) from the ' + 'React add-ons.';
+               if (children._isReactElement) {
+                 addendum = ' It looks like you\'re using an element created by a different ' + 'version of React. Make sure to use only one copy of React.';
+               }
+               if (ReactCurrentOwner.current) {
+                 var name = ReactCurrentOwner.current.getName();
+                 if (name) {
+                   addendum += ' Check the render method of `' + name + '`.';
                  }
-                 return measuredFunc.apply(this, arguments);
                }
-               return func.apply(this, arguments);
-             };
-             wrapper.displayName = objName + '_' + fnName;
-             return wrapper;
-           }
-           return func;
-         },
-       
-         injection: {
-           /**
-            * @param {function} measure
-            */
-           injectMeasure: function (measure) {
-             ReactPerf.storedMeasure = measure;
+             }
+             var childrenString = String(children);
+              true ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Objects are not valid as a React child (found: %s).%s', childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString, addendum) : _prodInvariant('31', childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString, addendum) : void 0;
            }
          }
-       };
+       
+         return subtreeCount;
+       }
        
        /**
-        * Simply passes through the measured function, without measuring it.
+        * Traverses children that are typically specified as `props.children`, but
+        * might also be specified through attributes:
+        *
+        * - `traverseAllChildren(this.props.children, ...)`
+        * - `traverseAllChildren(this.props.leftPanelChildren, ...)`
         *
-        * @param {string} objName
-        * @param {string} fnName
-        * @param {function} func
-        * @return {function}
+        * The `traverseContext` is an optional argument that is passed through the
+        * entire traversal. It can be used to store accumulations or anything else that
+        * the callback might find relevant.
+        *
+        * @param {?*} children Children tree object.
+        * @param {!function} callback To invoke upon traversing each child.
+        * @param {?*} traverseContext Context for traversal.
+        * @return {!number} The number of children in this subtree.
         */
-       function _noMeasure(objName, fnName, func) {
-         return func;
+       function traverseAllChildren(children, callback, traverseContext) {
+         if (children == null) {
+           return 0;
+         }
+       
+         return traverseAllChildrenImpl(children, '', callback, traverseContext);
        }
        
-       module.exports = ReactPerf;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
+       module.exports = traverseAllChildren;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
 
 /***/ },
-/* 21 */
-/***/ function(module, exports, __webpack_require__) {
+/* 17 */
+/***/ function(module, exports) {
 
        /**
-        * Copyright 2013-2015, Facebook, Inc.
+        * Copyright 2013-present, 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.
         *
-        * @providesModule setInnerHTML
+        * @providesModule getIteratorFn
+        * 
         */
        
-       /* globals MSApp */
-       
        'use strict';
        
-       var ExecutionEnvironment = __webpack_require__(11);
+       /* global Symbol */
        
-       var WHITESPACE_TEST = /^[ \r\n\t\f]/;
-       var NONVISIBLE_TEST = /<(!--|link|noscript|meta|script|style)[ \r\n\t\f\/>]/;
+       var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;
+       var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.
        
        /**
-        * Set the innerHTML property of a node, ensuring that whitespace is preserved
-        * even in IE8.
+        * Returns the iterator method function contained on the iterable object.
         *
-        * @param {DOMElement} node
-        * @param {string} html
-        * @internal
+        * Be sure to invoke the function with the iterable as context:
+        *
+        *     var iteratorFn = getIteratorFn(myIterable);
+        *     if (iteratorFn) {
+        *       var iterator = iteratorFn.call(myIterable);
+        *       ...
+        *     }
+        *
+        * @param {?object} maybeIterable
+        * @return {?function}
         */
-       var setInnerHTML = function (node, html) {
-         node.innerHTML = html;
-       };
-       
-       // Win8 apps: Allow all html to be inserted
-       if (typeof MSApp !== 'undefined' && MSApp.execUnsafeLocalFunction) {
-         setInnerHTML = function (node, html) {
-           MSApp.execUnsafeLocalFunction(function () {
-             node.innerHTML = html;
-           });
-         };
-       }
-       
-       if (ExecutionEnvironment.canUseDOM) {
-         // IE8: When updating a just created node with innerHTML only leading
-         // whitespace is removed. When updating an existing node with innerHTML
-         // whitespace in root TextNodes is also collapsed.
-         // @see quirksmode.org/bugreports/archives/2004/11/innerhtml_and_t.html
-       
-         // Feature detection; only IE8 is known to behave improperly like this.
-         var testElement = document.createElement('div');
-         testElement.innerHTML = ' ';
-         if (testElement.innerHTML === '') {
-           setInnerHTML = function (node, html) {
-             // Magic theory: IE8 supposedly differentiates between added and updated
-             // nodes when processing innerHTML, innerHTML on updated nodes suffers
-             // from worse whitespace behavior. Re-adding a node like this triggers
-             // the initial and more favorable whitespace behavior.
-             // TODO: What to do on a detached node?
-             if (node.parentNode) {
-               node.parentNode.replaceChild(node, node);
-             }
-       
-             // We also implement a workaround for non-visible tags disappearing into
-             // thin air on IE8, this only happens if there is no visible text
-             // in-front of the non-visible tags. Piggyback on the whitespace fix
-             // and simply check if any non-visible tags appear in the source.
-             if (WHITESPACE_TEST.test(html) || html[0] === '<' && NONVISIBLE_TEST.test(html)) {
-               // Recover leading whitespace by temporarily prepending any character.
-               // \uFEFF has the potential advantage of being zero-width/invisible.
-               // UglifyJS drops U+FEFF chars when parsing, so use String.fromCharCode
-               // in hopes that this is preserved even if "\uFEFF" is transformed to
-               // the actual Unicode character (by Babel, for example).
-               // https://github.com/mishoo/UglifyJS2/blob/v2.4.20/lib/parse.js#L216
-               node.innerHTML = String.fromCharCode(0xFEFF) + html;
-       
-               // deleteData leaves an empty `TextNode` which offsets the index of all
-               // children. Definitely want to avoid this.
-               var textNode = node.firstChild;
-               if (textNode.data.length === 1) {
-                 node.removeChild(textNode);
-               } else {
-                 textNode.deleteData(0, 1);
-               }
-             } else {
-               node.innerHTML = html;
-             }
-           };
+       function getIteratorFn(maybeIterable) {
+         var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);
+         if (typeof iteratorFn === 'function') {
+           return iteratorFn;
          }
        }
        
-       module.exports = setInnerHTML;
+       module.exports = getIteratorFn;
 
 /***/ },
-/* 22 */
-/***/ function(module, exports, __webpack_require__) {
+/* 18 */
+/***/ function(module, exports) {
 
        /**
-        * Copyright 2013-2015, Facebook, Inc.
+        * Copyright 2013-present, 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.
         *
-        * @providesModule setTextContent
+        * @providesModule KeyEscapeUtils
+        * 
         */
        
        'use strict';
        
-       var ExecutionEnvironment = __webpack_require__(11);
-       var escapeTextContentForBrowser = __webpack_require__(23);
-       var setInnerHTML = __webpack_require__(21);
-       
        /**
-        * Set the textContent property of a node, ensuring that whitespace is preserved
-        * even in IE8. innerText is a poor substitute for textContent and, among many
-        * issues, inserts <br> instead of the literal newline chars. innerHTML behaves
-        * as it should.
+        * Escape and wrap key so it is safe to use as a reactid
         *
-        * @param {DOMElement} node
-        * @param {string} text
-        * @internal
+        * @param {string} key to be escaped.
+        * @return {string} the escaped key.
         */
-       var setTextContent = function (node, text) {
-         node.textContent = text;
-       };
        
-       if (ExecutionEnvironment.canUseDOM) {
-         if (!('textContent' in document.documentElement)) {
-           setTextContent = function (node, text) {
-             setInnerHTML(node, escapeTextContentForBrowser(text));
-           };
-         }
+       function escape(key) {
+         var escapeRegex = /[=:]/g;
+         var escaperLookup = {
+           '=': '=0',
+           ':': '=2'
+         };
+         var escapedString = ('' + key).replace(escapeRegex, function (match) {
+           return escaperLookup[match];
+         });
+       
+         return '$' + escapedString;
        }
        
-       module.exports = setTextContent;
+       /**
+        * Unescape and unwrap key for human-readable display
+        *
+        * @param {string} key to unescape.
+        * @return {string} the unescaped key.
+        */
+       function unescape(key) {
+         var unescapeRegex = /(=0|=2)/g;
+         var unescaperLookup = {
+           '=0': '=',
+           '=2': ':'
+         };
+         var keySubstring = key[0] === '.' && key[1] === '$' ? key.substring(2) : key.substring(1);
+       
+         return ('' + keySubstring).replace(unescapeRegex, function (match) {
+           return unescaperLookup[match];
+         });
+       }
+       
+       var KeyEscapeUtils = {
+         escape: escape,
+         unescape: unescape
+       };
+       
+       module.exports = KeyEscapeUtils;
 
 /***/ },
-/* 23 */
-/***/ function(module, exports) {
+/* 19 */
+/***/ function(module, exports, __webpack_require__) {
 
-       /**
-        * Copyright 2013-2015, Facebook, Inc.
+       /* WEBPACK VAR INJECTION */(function(process) {/**
+        * Copyright 2013-present, 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.
         *
-        * @providesModule escapeTextContentForBrowser
+        * @providesModule ReactComponent
         */
        
        'use strict';
        
-       var ESCAPE_LOOKUP = {
-         '&': '&amp;',
-         '>': '&gt;',
-         '<': '&lt;',
-         '"': '&quot;',
-         '\'': '&#x27;'
-       };
+       var _prodInvariant = __webpack_require__(9);
        
-       var ESCAPE_REGEX = /[&><"']/g;
+       var ReactNoopUpdateQueue = __webpack_require__(20);
        
-       function escaper(match) {
-         return ESCAPE_LOOKUP[match];
+       var canDefineProperty = __webpack_require__(15);
+       var emptyObject = __webpack_require__(21);
+       var invariant = __webpack_require__(10);
+       var warning = __webpack_require__(13);
+       
+       /**
+        * Base class helpers for the updating state of a component.
+        */
+       function ReactComponent(props, context, updater) {
+         this.props = props;
+         this.context = context;
+         this.refs = emptyObject;
+         // We initialize the default updater but the real one gets injected by the
+         // renderer.
+         this.updater = updater || ReactNoopUpdateQueue;
        }
        
+       ReactComponent.prototype.isReactComponent = {};
+       
        /**
-        * Escapes text to prevent scripting attacks.
+        * Sets a subset of the state. Always use this to mutate
+        * state. You should treat `this.state` as immutable.
         *
-        * @param {*} text Text value to escape.
-        * @return {string} An escaped string.
+        * There is no guarantee that `this.state` will be immediately updated, so
+        * accessing `this.state` after calling this method may return the old value.
+        *
+        * There is no guarantee that calls to `setState` will run synchronously,
+        * as they may eventually be batched together.  You can provide an optional
+        * callback that will be executed when the call to setState is actually
+        * completed.
+        *
+        * When a function is provided to setState, it will be called at some point in
+        * the future (not synchronously). It will be called with the up to date
+        * component arguments (state, props, context). These values can be different
+        * from this.* because your function may be called after receiveProps but before
+        * shouldComponentUpdate, and this new state, props, and context will not yet be
+        * assigned to this.
+        *
+        * @param {object|function} partialState Next partial state or function to
+        *        produce next partial state to be merged with current state.
+        * @param {?function} callback Called after state is updated.
+        * @final
+        * @protected
         */
-       function escapeTextContentForBrowser(text) {
-         return ('' + text).replace(ESCAPE_REGEX, escaper);
+       ReactComponent.prototype.setState = function (partialState, callback) {
+         !(typeof partialState === 'object' || typeof partialState === 'function' || partialState == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'setState(...): takes an object of state variables to update or a function which returns an object of state variables.') : _prodInvariant('85') : void 0;
+         this.updater.enqueueSetState(this, partialState);
+         if (callback) {
+           this.updater.enqueueCallback(this, callback, 'setState');
+         }
+       };
+       
+       /**
+        * Forces an update. This should only be invoked when it is known with
+        * certainty that we are **not** in a DOM transaction.
+        *
+        * You may want to call this when you know that some deeper aspect of the
+        * component's state has changed but `setState` was not called.
+        *
+        * This will not invoke `shouldComponentUpdate`, but it will invoke
+        * `componentWillUpdate` and `componentDidUpdate`.
+        *
+        * @param {?function} callback Called after update is complete.
+        * @final
+        * @protected
+        */
+       ReactComponent.prototype.forceUpdate = function (callback) {
+         this.updater.enqueueForceUpdate(this);
+         if (callback) {
+           this.updater.enqueueCallback(this, callback, 'forceUpdate');
+         }
+       };
+       
+       /**
+        * Deprecated APIs. These APIs used to exist on classic React classes but since
+        * we would like to deprecate them, we're not going to move them over to this
+        * modern base class. Instead, we define a getter that warns if it's accessed.
+        */
+       if (process.env.NODE_ENV !== 'production') {
+         var deprecatedAPIs = {
+           isMounted: ['isMounted', 'Instead, make sure to clean up subscriptions and pending requests in ' + 'componentWillUnmount to prevent memory leaks.'],
+           replaceState: ['replaceState', 'Refactor your code to use setState instead (see ' + 'https://github.com/facebook/react/issues/3236).']
+         };
+         var defineDeprecationWarning = function (methodName, info) {
+           if (canDefineProperty) {
+             Object.defineProperty(ReactComponent.prototype, methodName, {
+               get: function () {
+                 process.env.NODE_ENV !== 'production' ? warning(false, '%s(...) is deprecated in plain JavaScript React classes. %s', info[0], info[1]) : void 0;
+                 return undefined;
+               }
+             });
+           }
+         };
+         for (var fnName in deprecatedAPIs) {
+           if (deprecatedAPIs.hasOwnProperty(fnName)) {
+             defineDeprecationWarning(fnName, deprecatedAPIs[fnName]);
+           }
+         }
        }
        
-       module.exports = escapeTextContentForBrowser;
+       module.exports = ReactComponent;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
 
 /***/ },
-/* 24 */
+/* 20 */
 /***/ function(module, exports, __webpack_require__) {
 
        /* WEBPACK VAR INJECTION */(function(process) {/**
-        * Copyright 2013-2015, Facebook, Inc.
+        * Copyright 2015-present, 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.
         *
-        * @providesModule DOMPropertyOperations
-        * @typechecks static-only
+        * @providesModule ReactNoopUpdateQueue
         */
        
        'use strict';
        
-       var DOMProperty = __webpack_require__(25);
-       var ReactPerf = __webpack_require__(20);
-       
-       var quoteAttributeValueForBrowser = __webpack_require__(26);
-       var warning = __webpack_require__(27);
+       var warning = __webpack_require__(13);
        
-       // Simplified subset
-       var VALID_ATTRIBUTE_NAME_REGEX = /^[a-zA-Z_][\w\.\-]*$/;
-       var illegalAttributeNameCache = {};
-       var validatedAttributeNameCache = {};
-       
-       function isAttributeNameSafe(attributeName) {
-         if (validatedAttributeNameCache.hasOwnProperty(attributeName)) {
-           return true;
-         }
-         if (illegalAttributeNameCache.hasOwnProperty(attributeName)) {
-           return false;
-         }
-         if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName)) {
-           validatedAttributeNameCache[attributeName] = true;
-           return true;
+       function warnNoop(publicInstance, callerName) {
+         if (process.env.NODE_ENV !== 'production') {
+           var constructor = publicInstance.constructor;
+           process.env.NODE_ENV !== 'production' ? warning(false, '%s(...): Can only update a mounted or mounting component. ' + 'This usually means you called %s() on an unmounted component. ' + 'This is a no-op. Please check the code for the %s component.', callerName, callerName, constructor && (constructor.displayName || constructor.name) || 'ReactClass') : void 0;
          }
-         illegalAttributeNameCache[attributeName] = true;
-         process.env.NODE_ENV !== 'production' ? warning(false, 'Invalid attribute name: `%s`', attributeName) : undefined;
-         return false;
-       }
-       
-       function shouldIgnoreValue(propertyInfo, value) {
-         return value == null || propertyInfo.hasBooleanValue && !value || propertyInfo.hasNumericValue && isNaN(value) || propertyInfo.hasPositiveNumericValue && value < 1 || propertyInfo.hasOverloadedBooleanValue && value === false;
-       }
-       
-       if (process.env.NODE_ENV !== 'production') {
-         var reactProps = {
-           children: true,
-           dangerouslySetInnerHTML: true,
-           key: true,
-           ref: true
-         };
-         var warnedProperties = {};
-       
-         var warnUnknownProperty = function (name) {
-           if (reactProps.hasOwnProperty(name) && reactProps[name] || warnedProperties.hasOwnProperty(name) && warnedProperties[name]) {
-             return;
-           }
-       
-           warnedProperties[name] = true;
-           var lowerCasedName = name.toLowerCase();
-       
-           // data-* attributes should be lowercase; suggest the lowercase version
-           var standardName = DOMProperty.isCustomAttribute(lowerCasedName) ? lowerCasedName : DOMProperty.getPossibleStandardName.hasOwnProperty(lowerCasedName) ? DOMProperty.getPossibleStandardName[lowerCasedName] : null;
-       
-           // For now, only warn when we have a suggested correction. This prevents
-           // logging too much when using transferPropsTo.
-           process.env.NODE_ENV !== 'production' ? warning(standardName == null, 'Unknown DOM property %s. Did you mean %s?', name, standardName) : undefined;
-         };
        }
        
        /**
-        * Operations for dealing with DOM properties.
+        * This is the abstract API for an update queue.
         */
-       var DOMPropertyOperations = {
+       var ReactNoopUpdateQueue = {
        
          /**
-          * Creates markup for the ID property.
-          *
-          * @param {string} id Unescaped ID.
-          * @return {string} Markup string.
+          * Checks whether or not this composite component is mounted.
+          * @param {ReactClass} publicInstance The instance we want to test.
+          * @return {boolean} True if mounted, false otherwise.
+          * @protected
+          * @final
           */
-         createMarkupForID: function (id) {
-           return DOMProperty.ID_ATTRIBUTE_NAME + '=' + quoteAttributeValueForBrowser(id);
-         },
-       
-         setAttributeForID: function (node, id) {
-           node.setAttribute(DOMProperty.ID_ATTRIBUTE_NAME, id);
+         isMounted: function (publicInstance) {
+           return false;
          },
        
          /**
-          * Creates markup for a property.
+          * Enqueue a callback that will be executed after all the pending updates
+          * have processed.
           *
-          * @param {string} name
-          * @param {*} value
-          * @return {?string} Markup string, or null if the property was invalid.
+          * @param {ReactClass} publicInstance The instance to use as `this` context.
+          * @param {?function} callback Called after state is updated.
+          * @internal
           */
-         createMarkupForProperty: function (name, value) {
-           var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null;
-           if (propertyInfo) {
-             if (shouldIgnoreValue(propertyInfo, value)) {
-               return '';
-             }
-             var attributeName = propertyInfo.attributeName;
-             if (propertyInfo.hasBooleanValue || propertyInfo.hasOverloadedBooleanValue && value === true) {
-               return attributeName + '=""';
-             }
-             return attributeName + '=' + quoteAttributeValueForBrowser(value);
-           } else if (DOMProperty.isCustomAttribute(name)) {
-             if (value == null) {
-               return '';
-             }
-             return name + '=' + quoteAttributeValueForBrowser(value);
-           } else if (process.env.NODE_ENV !== 'production') {
-             warnUnknownProperty(name);
-           }
-           return null;
-         },
+         enqueueCallback: function (publicInstance, callback) {},
        
          /**
-          * Creates markup for a custom property.
+          * Forces an update. This should only be invoked when it is known with
+          * certainty that we are **not** in a DOM transaction.
           *
-          * @param {string} name
-          * @param {*} value
-          * @return {string} Markup string, or empty string if the property was invalid.
+          * You may want to call this when you know that some deeper aspect of the
+          * component's state has changed but `setState` was not called.
+          *
+          * This will not invoke `shouldComponentUpdate`, but it will invoke
+          * `componentWillUpdate` and `componentDidUpdate`.
+          *
+          * @param {ReactClass} publicInstance The instance that should rerender.
+          * @internal
           */
-         createMarkupForCustomAttribute: function (name, value) {
-           if (!isAttributeNameSafe(name) || value == null) {
-             return '';
-           }
-           return name + '=' + quoteAttributeValueForBrowser(value);
+         enqueueForceUpdate: function (publicInstance) {
+           warnNoop(publicInstance, 'forceUpdate');
          },
        
          /**
-          * Sets the value for a property on a node.
+          * Replaces all of the state. Always use this or `setState` to mutate state.
+          * You should treat `this.state` as immutable.
           *
-          * @param {DOMElement} node
-          * @param {string} name
-          * @param {*} value
+          * There is no guarantee that `this.state` will be immediately updated, so
+          * accessing `this.state` after calling this method may return the old value.
+          *
+          * @param {ReactClass} publicInstance The instance that should rerender.
+          * @param {object} completeState Next state.
+          * @internal
           */
-         setValueForProperty: function (node, name, value) {
-           var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null;
-           if (propertyInfo) {
-             var mutationMethod = propertyInfo.mutationMethod;
-             if (mutationMethod) {
-               mutationMethod(node, value);
-             } else if (shouldIgnoreValue(propertyInfo, value)) {
-               this.deleteValueForProperty(node, name);
-             } else if (propertyInfo.mustUseAttribute) {
-               var attributeName = propertyInfo.attributeName;
-               var namespace = propertyInfo.attributeNamespace;
-               // `setAttribute` with objects becomes only `[object]` in IE8/9,
-               // ('' + value) makes it output the correct toString()-value.
-               if (namespace) {
-                 node.setAttributeNS(namespace, attributeName, '' + value);
-               } else if (propertyInfo.hasBooleanValue || propertyInfo.hasOverloadedBooleanValue && value === true) {
-                 node.setAttribute(attributeName, '');
-               } else {
-                 node.setAttribute(attributeName, '' + value);
-               }
-             } else {
-               var propName = propertyInfo.propertyName;
-               // Must explicitly cast values for HAS_SIDE_EFFECTS-properties to the
-               // property type before comparing; only `value` does and is string.
-               if (!propertyInfo.hasSideEffects || '' + node[propName] !== '' + value) {
-                 // Contrary to `setAttribute`, object properties are properly
-                 // `toString`ed by IE8/9.
-                 node[propName] = value;
-               }
-             }
-           } else if (DOMProperty.isCustomAttribute(name)) {
-             DOMPropertyOperations.setValueForAttribute(node, name, value);
-           } else if (process.env.NODE_ENV !== 'production') {
-             warnUnknownProperty(name);
-           }
-         },
-       
-         setValueForAttribute: function (node, name, value) {
-           if (!isAttributeNameSafe(name)) {
-             return;
-           }
-           if (value == null) {
-             node.removeAttribute(name);
-           } else {
-             node.setAttribute(name, '' + value);
-           }
+         enqueueReplaceState: function (publicInstance, completeState) {
+           warnNoop(publicInstance, 'replaceState');
          },
        
          /**
-          * Deletes the value for a property on a node.
+          * Sets a subset of the state. This only exists because _pendingState is
+          * internal. This provides a merging strategy that is not available to deep
+          * properties which is confusing. TODO: Expose pendingState or don't use it
+          * during the merge.
           *
-          * @param {DOMElement} node
-          * @param {string} name
+          * @param {ReactClass} publicInstance The instance that should rerender.
+          * @param {object} partialState Next partial state to be merged with state.
+          * @internal
           */
-         deleteValueForProperty: function (node, name) {
-           var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null;
-           if (propertyInfo) {
-             var mutationMethod = propertyInfo.mutationMethod;
-             if (mutationMethod) {
-               mutationMethod(node, undefined);
-             } else if (propertyInfo.mustUseAttribute) {
-               node.removeAttribute(propertyInfo.attributeName);
-             } else {
-               var propName = propertyInfo.propertyName;
-               var defaultValue = DOMProperty.getDefaultValueForProperty(node.nodeName, propName);
-               if (!propertyInfo.hasSideEffects || '' + node[propName] !== defaultValue) {
-                 node[propName] = defaultValue;
-               }
-             }
-           } else if (DOMProperty.isCustomAttribute(name)) {
-             node.removeAttribute(name);
-           } else if (process.env.NODE_ENV !== 'production') {
-             warnUnknownProperty(name);
-           }
+         enqueueSetState: function (publicInstance, partialState) {
+           warnNoop(publicInstance, 'setState');
          }
-       
        };
        
-       ReactPerf.measureMethods(DOMPropertyOperations, 'DOMPropertyOperations', {
-         setValueForProperty: 'setValueForProperty',
-         setValueForAttribute: 'setValueForAttribute',
-         deleteValueForProperty: 'deleteValueForProperty'
-       });
-       
-       module.exports = DOMPropertyOperations;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
+       module.exports = ReactNoopUpdateQueue;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
 
 /***/ },
-/* 25 */
+/* 21 */
 /***/ function(module, exports, __webpack_require__) {
 
        /* WEBPACK VAR INJECTION */(function(process) {/**
-        * Copyright 2013-2015, Facebook, Inc.
+        * Copyright (c) 2013-present, 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.
         *
-        * @providesModule DOMProperty
-        * @typechecks static-only
         */
        
        'use strict';
        
-       var invariant = __webpack_require__(15);
+       var emptyObject = {};
        
-       function checkMask(value, bitmask) {
-         return (value & bitmask) === bitmask;
+       if (process.env.NODE_ENV !== 'production') {
+         Object.freeze(emptyObject);
        }
        
-       var DOMPropertyInjection = {
-         /**
-          * Mapping from normalized, camelcased property names to a configuration that
-          * specifies how the associated DOM property should be accessed or rendered.
-          */
-         MUST_USE_ATTRIBUTE: 0x1,
-         MUST_USE_PROPERTY: 0x2,
-         HAS_SIDE_EFFECTS: 0x4,
-         HAS_BOOLEAN_VALUE: 0x8,
-         HAS_NUMERIC_VALUE: 0x10,
-         HAS_POSITIVE_NUMERIC_VALUE: 0x20 | 0x10,
-         HAS_OVERLOADED_BOOLEAN_VALUE: 0x40,
+       module.exports = emptyObject;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
+
+/***/ },
+/* 22 */
+/***/ function(module, exports, __webpack_require__) {
+
+       /**
+        * Copyright 2013-present, 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.
+        *
+        * @providesModule ReactPureComponent
+        */
        
-         /**
-          * Inject some specialized knowledge about the DOM. This takes a config object
-          * with the following properties:
-          *
-          * isCustomAttribute: function that given an attribute name will return true
-          * if it can be inserted into the DOM verbatim. Useful for data-* or aria-*
-          * attributes where it's impossible to enumerate all of the possible
-          * attribute names,
-          *
-          * Properties: object mapping DOM property name to one of the
-          * DOMPropertyInjection constants or null. If your attribute isn't in here,
-          * it won't get written to the DOM.
-          *
-          * DOMAttributeNames: object mapping React attribute name to the DOM
-          * attribute name. Attribute names not specified use the **lowercase**
-          * normalized name.
-          *
-          * DOMAttributeNamespaces: object mapping React attribute name to the DOM
-          * attribute namespace URL. (Attribute names not specified use no namespace.)
-          *
-          * DOMPropertyNames: similar to DOMAttributeNames but for DOM properties.
-          * Property names not specified use the normalized name.
-          *
-          * DOMMutationMethods: Properties that require special mutation methods. If
-          * `value` is undefined, the mutation method should unset the property.
-          *
-          * @param {object} domPropertyConfig the config as described above.
-          */
-         injectDOMPropertyConfig: function (domPropertyConfig) {
-           var Injection = DOMPropertyInjection;
-           var Properties = domPropertyConfig.Properties || {};
-           var DOMAttributeNamespaces = domPropertyConfig.DOMAttributeNamespaces || {};
-           var DOMAttributeNames = domPropertyConfig.DOMAttributeNames || {};
-           var DOMPropertyNames = domPropertyConfig.DOMPropertyNames || {};
-           var DOMMutationMethods = domPropertyConfig.DOMMutationMethods || {};
+       'use strict';
        
-           if (domPropertyConfig.isCustomAttribute) {
-             DOMProperty._isCustomAttributeFunctions.push(domPropertyConfig.isCustomAttribute);
-           }
+       var _assign = __webpack_require__(6);
        
-           for (var propName in Properties) {
-             !!DOMProperty.properties.hasOwnProperty(propName) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'injectDOMPropertyConfig(...): You\'re trying to inject DOM property ' + '\'%s\' which has already been injected. You may be accidentally ' + 'injecting the same DOM property config twice, or you may be ' + 'injecting two configs that have conflicting property names.', propName) : invariant(false) : undefined;
+       var ReactComponent = __webpack_require__(19);
+       var ReactNoopUpdateQueue = __webpack_require__(20);
        
-             var lowerCased = propName.toLowerCase();
-             var propConfig = Properties[propName];
+       var emptyObject = __webpack_require__(21);
        
-             var propertyInfo = {
-               attributeName: lowerCased,
-               attributeNamespace: null,
-               propertyName: propName,
-               mutationMethod: null,
+       /**
+        * Base class helpers for the updating state of a component.
+        */
+       function ReactPureComponent(props, context, updater) {
+         // Duplicated from ReactComponent.
+         this.props = props;
+         this.context = context;
+         this.refs = emptyObject;
+         // We initialize the default updater but the real one gets injected by the
+         // renderer.
+         this.updater = updater || ReactNoopUpdateQueue;
+       }
        
-               mustUseAttribute: checkMask(propConfig, Injection.MUST_USE_ATTRIBUTE),
-               mustUseProperty: checkMask(propConfig, Injection.MUST_USE_PROPERTY),
-               hasSideEffects: checkMask(propConfig, Injection.HAS_SIDE_EFFECTS),
-               hasBooleanValue: checkMask(propConfig, Injection.HAS_BOOLEAN_VALUE),
-               hasNumericValue: checkMask(propConfig, Injection.HAS_NUMERIC_VALUE),
-               hasPositiveNumericValue: checkMask(propConfig, Injection.HAS_POSITIVE_NUMERIC_VALUE),
-               hasOverloadedBooleanValue: checkMask(propConfig, Injection.HAS_OVERLOADED_BOOLEAN_VALUE)
-             };
+       function ComponentDummy() {}
+       ComponentDummy.prototype = ReactComponent.prototype;
+       ReactPureComponent.prototype = new ComponentDummy();
+       ReactPureComponent.prototype.constructor = ReactPureComponent;
+       // Avoid an extra prototype jump for these methods.
+       _assign(ReactPureComponent.prototype, ReactComponent.prototype);
+       ReactPureComponent.prototype.isPureReactComponent = true;
        
-             !(!propertyInfo.mustUseAttribute || !propertyInfo.mustUseProperty) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'DOMProperty: Cannot require using both attribute and property: %s', propName) : invariant(false) : undefined;
-             !(propertyInfo.mustUseProperty || !propertyInfo.hasSideEffects) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'DOMProperty: Properties that have side effects must use property: %s', propName) : invariant(false) : undefined;
-             !(propertyInfo.hasBooleanValue + propertyInfo.hasNumericValue + propertyInfo.hasOverloadedBooleanValue <= 1) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'DOMProperty: Value can be one of boolean, overloaded boolean, or ' + 'numeric value, but not a combination: %s', propName) : invariant(false) : undefined;
+       module.exports = ReactPureComponent;
+
+/***/ },
+/* 23 */
+/***/ function(module, exports, __webpack_require__) {
+
+       /* WEBPACK VAR INJECTION */(function(process) {/**
+        * Copyright 2013-present, 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.
+        *
+        * @providesModule ReactClass
+        */
        
-             if (process.env.NODE_ENV !== 'production') {
-               DOMProperty.getPossibleStandardName[lowerCased] = propName;
-             }
+       'use strict';
        
-             if (DOMAttributeNames.hasOwnProperty(propName)) {
-               var attributeName = DOMAttributeNames[propName];
-               propertyInfo.attributeName = attributeName;
-               if (process.env.NODE_ENV !== 'production') {
-                 DOMProperty.getPossibleStandardName[attributeName] = propName;
-               }
-             }
+       var _prodInvariant = __webpack_require__(9),
+           _assign = __webpack_require__(6);
        
-             if (DOMAttributeNamespaces.hasOwnProperty(propName)) {
-               propertyInfo.attributeNamespace = DOMAttributeNamespaces[propName];
-             }
+       var ReactComponent = __webpack_require__(19);
+       var ReactElement = __webpack_require__(11);
+       var ReactPropTypeLocations = __webpack_require__(24);
+       var ReactPropTypeLocationNames = __webpack_require__(26);
+       var ReactNoopUpdateQueue = __webpack_require__(20);
        
-             if (DOMPropertyNames.hasOwnProperty(propName)) {
-               propertyInfo.propertyName = DOMPropertyNames[propName];
-             }
+       var emptyObject = __webpack_require__(21);
+       var invariant = __webpack_require__(10);
+       var keyMirror = __webpack_require__(25);
+       var keyOf = __webpack_require__(27);
+       var warning = __webpack_require__(13);
        
-             if (DOMMutationMethods.hasOwnProperty(propName)) {
-               propertyInfo.mutationMethod = DOMMutationMethods[propName];
-             }
+       var MIXINS_KEY = keyOf({ mixins: null });
        
-             DOMProperty.properties[propName] = propertyInfo;
-           }
-         }
-       };
-       var defaultValueCache = {};
+       /**
+        * Policies that describe methods in `ReactClassInterface`.
+        */
+       var SpecPolicy = keyMirror({
+         /**
+          * These methods may be defined only once by the class specification or mixin.
+          */
+         DEFINE_ONCE: null,
+         /**
+          * These methods may be defined by both the class specification and mixins.
+          * Subsequent definitions will be chained. These methods must return void.
+          */
+         DEFINE_MANY: null,
+         /**
+          * These methods are overriding the base class.
+          */
+         OVERRIDE_BASE: null,
+         /**
+          * These methods are similar to DEFINE_MANY, except we assume they return
+          * objects. We try to merge the keys of the return values of all the mixed in
+          * functions. If there is a key conflict we throw.
+          */
+         DEFINE_MANY_MERGED: null
+       });
+       
+       var injectedMixins = [];
        
        /**
-        * DOMProperty exports lookup objects that can be used like functions:
+        * Composite components are higher-level components that compose other composite
+        * or host components.
         *
-        *   > DOMProperty.isValid['id']
-        *   true
-        *   > DOMProperty.isValid['foobar']
-        *   undefined
+        * To create a new type of `ReactClass`, pass a specification of
+        * your new class to `React.createClass`. The only requirement of your class
+        * specification is that you implement a `render` method.
         *
-        * Although this may be confusing, it performs better in general.
+        *   var MyComponent = React.createClass({
+        *     render: function() {
+        *       return <div>Hello World</div>;
+        *     }
+        *   });
         *
-        * @see http://jsperf.com/key-exists
-        * @see http://jsperf.com/key-missing
+        * The class specification supports a specific protocol of methods that have
+        * special meaning (e.g. `render`). See `ReactClassInterface` for
+        * more the comprehensive protocol. Any other properties and methods in the
+        * class specification will be available on the prototype.
+        *
+        * @interface ReactClassInterface
+        * @internal
         */
-       var DOMProperty = {
-       
-         ID_ATTRIBUTE_NAME: 'data-reactid',
+       var ReactClassInterface = {
        
          /**
-          * Map from property "standard name" to an object with info about how to set
-          * the property in the DOM. Each object contains:
+          * An array of Mixin objects to include when defining your component.
           *
-          * attributeName:
-          *   Used when rendering markup or with `*Attribute()`.
-          * attributeNamespace
-          * propertyName:
-          *   Used on DOM node instances. (This includes properties that mutate due to
-          *   external factors.)
-          * mutationMethod:
-          *   If non-null, used instead of the property or `setAttribute()` after
-          *   initial render.
-          * mustUseAttribute:
-          *   Whether the property must be accessed and mutated using `*Attribute()`.
-          *   (This includes anything that fails `<propName> in <element>`.)
-          * mustUseProperty:
-          *   Whether the property must be accessed and mutated as an object property.
-          * hasSideEffects:
-          *   Whether or not setting a value causes side effects such as triggering
-          *   resources to be loaded or text selection changes. If true, we read from
-          *   the DOM before updating to ensure that the value is only set if it has
-          *   changed.
-          * hasBooleanValue:
-          *   Whether the property should be removed when set to a falsey value.
-          * hasNumericValue:
-          *   Whether the property must be numeric or parse as a numeric and should be
-          *   removed when set to a falsey value.
-          * hasPositiveNumericValue:
-          *   Whether the property must be positive numeric or parse as a positive
-          *   numeric and should be removed when set to a falsey value.
-          * hasOverloadedBooleanValue:
-          *   Whether the property can be used as a flag as well as with a value.
-          *   Removed when strictly equal to false; present without a value when
-          *   strictly equal to true; present with a value otherwise.
+          * @type {array}
+          * @optional
           */
-         properties: {},
+         mixins: SpecPolicy.DEFINE_MANY,
        
          /**
-          * Mapping from lowercase property names to the properly cased version, used
-          * to warn in the case of missing properties. Available only in __DEV__.
-          * @type {Object}
+          * An object containing properties and methods that should be defined on
+          * the component's constructor instead of its prototype (static methods).
+          *
+          * @type {object}
+          * @optional
           */
-         getPossibleStandardName: process.env.NODE_ENV !== 'production' ? {} : null,
+         statics: SpecPolicy.DEFINE_MANY,
        
          /**
-          * All of the isCustomAttribute() functions that have been injected.
+          * Definition of prop types for this component.
+          *
+          * @type {object}
+          * @optional
           */
-         _isCustomAttributeFunctions: [],
+         propTypes: SpecPolicy.DEFINE_MANY,
        
          /**
-          * Checks whether a property name is a custom attribute.
-          * @method
+          * Definition of context types for this component.
+          *
+          * @type {object}
+          * @optional
           */
-         isCustomAttribute: function (attributeName) {
-           for (var i = 0; i < DOMProperty._isCustomAttributeFunctions.length; i++) {
-             var isCustomAttributeFn = DOMProperty._isCustomAttributeFunctions[i];
-             if (isCustomAttributeFn(attributeName)) {
-               return true;
-             }
-           }
-           return false;
-         },
+         contextTypes: SpecPolicy.DEFINE_MANY,
        
          /**
-          * Returns the default property value for a DOM property (i.e., not an
-          * attribute). Most default values are '' or false, but not all. Worse yet,
-          * some (in particular, `type`) vary depending on the type of element.
+          * Definition of context types this component sets for its children.
           *
-          * TODO: Is it better to grab all the possible properties when creating an
-          * element to avoid having to create the same element twice?
+          * @type {object}
+          * @optional
           */
-         getDefaultValueForProperty: function (nodeName, prop) {
-           var nodeDefaults = defaultValueCache[nodeName];
-           var testElement;
-           if (!nodeDefaults) {
-             defaultValueCache[nodeName] = nodeDefaults = {};
-           }
-           if (!(prop in nodeDefaults)) {
-             testElement = document.createElement(nodeName);
-             nodeDefaults[prop] = testElement[prop];
-           }
-           return nodeDefaults[prop];
-         },
-       
-         injection: DOMPropertyInjection
-       };
-       
-       module.exports = DOMProperty;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
-
-/***/ },
-/* 26 */
-/***/ 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.
-        *
-        * @providesModule quoteAttributeValueForBrowser
-        */
-       
-       'use strict';
-       
-       var escapeTextContentForBrowser = __webpack_require__(23);
-       
-       /**
-        * Escapes attribute value to prevent scripting attacks.
-        *
-        * @param {*} value Value to escape.
-        * @return {string} An escaped string.
-        */
-       function quoteAttributeValueForBrowser(value) {
-         return '"' + escapeTextContentForBrowser(value) + '"';
-       }
-       
-       module.exports = quoteAttributeValueForBrowser;
-
-/***/ },
-/* 27 */
-/***/ function(module, exports, __webpack_require__) {
-
-       /* WEBPACK VAR INJECTION */(function(process) {/**
-        * Copyright 2014-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.
-        *
-        * @providesModule warning
-        */
-       
-       'use strict';
-       
-       var emptyFunction = __webpack_require__(17);
-       
-       /**
-        * Similar to invariant but only logs a warning if the condition is not met.
-        * This can be used to log issues in development environments in critical
-        * paths. Removing the logging code for production environments will keep the
-        * same logic and follow the same code paths.
-        */
-       
-       var warning = emptyFunction;
-       
-       if (process.env.NODE_ENV !== 'production') {
-         warning = function (condition, format) {
-           for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
-             args[_key - 2] = arguments[_key];
-           }
-       
-           if (format === undefined) {
-             throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument');
-           }
-       
-           if (format.indexOf('Failed Composite propType: ') === 0) {
-             return; // Ignore CompositeComponent proptype check.
-           }
-       
-           if (!condition) {
-             var argIndex = 0;
-             var message = 'Warning: ' + format.replace(/%s/g, function () {
-               return args[argIndex++];
-             });
-             if (typeof console !== 'undefined') {
-               console.error(message);
-             }
-             try {
-               // --- Welcome to debugging React ---
-               // 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);
-             } catch (x) {}
-           }
-         };
-       }
-       
-       module.exports = warning;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
-
-/***/ },
-/* 28 */
-/***/ 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.
-        *
-        * @providesModule ReactComponentBrowserEnvironment
-        */
-       
-       'use strict';
-       
-       var ReactDOMIDOperations = __webpack_require__(29);
-       var ReactMount = __webpack_require__(30);
-       
-       /**
-        * Abstracts away all functionality of the reconciler that requires knowledge of
-        * the browser context. TODO: These callers should be refactored to avoid the
-        * need for this injection.
-        */
-       var ReactComponentBrowserEnvironment = {
-       
-         processChildrenUpdates: ReactDOMIDOperations.dangerouslyProcessChildrenUpdates,
+         childContextTypes: SpecPolicy.DEFINE_MANY,
        
-         replaceNodeWithMarkupByID: ReactDOMIDOperations.dangerouslyReplaceNodeWithMarkupByID,
+         // ==== Definition methods ====
        
          /**
-          * If a particular environment requires that some resources be cleaned up,
-          * specify this in the injected Mixin. In the DOM, we would likely want to
-          * purge any cached node ID lookups.
+          * Invoked when the component is mounted. Values in the mapping will be set on
+          * `this.props` if that prop is not specified (i.e. using an `in` check).
           *
-          * @private
+          * This method is invoked before `getInitialState` and therefore cannot rely
+          * on `this.state` or use `this.setState`.
+          *
+          * @return {object}
+          * @optional
           */
-         unmountIDFromEnvironment: function (rootNodeID) {
-           ReactMount.purgeID(rootNodeID);
-         }
-       
-       };
-       
-       module.exports = ReactComponentBrowserEnvironment;
-
-/***/ },
-/* 29 */
-/***/ function(module, exports, __webpack_require__) {
-
-       /* WEBPACK VAR INJECTION */(function(process) {/**
-        * 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.
-        *
-        * @providesModule ReactDOMIDOperations
-        * @typechecks static-only
-        */
-       
-       'use strict';
-       
-       var DOMChildrenOperations = __webpack_require__(9);
-       var DOMPropertyOperations = __webpack_require__(24);
-       var ReactMount = __webpack_require__(30);
-       var ReactPerf = __webpack_require__(20);
-       
-       var invariant = __webpack_require__(15);
-       
-       /**
-        * Errors for properties that should not be updated with `updatePropertyByID()`.
-        *
-        * @type {object}
-        * @private
-        */
-       var INVALID_PROPERTY_ERRORS = {
-         dangerouslySetInnerHTML: '`dangerouslySetInnerHTML` must be set using `updateInnerHTMLByID()`.',
-         style: '`style` must be set using `updateStylesByID()`.'
-       };
-       
-       /**
-        * Operations used to process updates to DOM nodes.
-        */
-       var ReactDOMIDOperations = {
+         getDefaultProps: SpecPolicy.DEFINE_MANY_MERGED,
        
          /**
-          * Updates a DOM node with new property values. This should only be used to
-          * update DOM properties in `DOMProperty`.
+          * Invoked once before the component is mounted. The return value will be used
+          * as the initial value of `this.state`.
           *
-          * @param {string} id ID of the node to update.
-          * @param {string} name A valid property name, see `DOMProperty`.
-          * @param {*} value New value of the property.
-          * @internal
+          *   getInitialState: function() {
+          *     return {
+          *       isOn: false,
+          *       fooBaz: new BazFoo()
+          *     }
+          *   }
+          *
+          * @return {object}
+          * @optional
           */
-         updatePropertyByID: function (id, name, value) {
-           var node = ReactMount.getNode(id);
-           !!INVALID_PROPERTY_ERRORS.hasOwnProperty(name) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'updatePropertyByID(...): %s', INVALID_PROPERTY_ERRORS[name]) : invariant(false) : undefined;
-       
-           // If we're updating to null or undefined, we should remove the property
-           // from the DOM node instead of inadvertantly setting to a string. This
-           // brings us in line with the same behavior we have on initial render.
-           if (value != null) {
-             DOMPropertyOperations.setValueForProperty(node, name, value);
-           } else {
-             DOMPropertyOperations.deleteValueForProperty(node, name);
-           }
-         },
+         getInitialState: SpecPolicy.DEFINE_MANY_MERGED,
        
          /**
-          * Replaces a DOM node that exists in the document with markup.
-          *
-          * @param {string} id ID of child to be replaced.
-          * @param {string} markup Dangerous markup to inject in place of child.
-          * @internal
-          * @see {Danger.dangerouslyReplaceNodeWithMarkup}
+          * @return {object}
+          * @optional
           */
-         dangerouslyReplaceNodeWithMarkupByID: function (id, markup) {
-           var node = ReactMount.getNode(id);
-           DOMChildrenOperations.dangerouslyReplaceNodeWithMarkup(node, markup);
-         },
+         getChildContext: SpecPolicy.DEFINE_MANY_MERGED,
        
          /**
-          * Updates a component's children by processing a series of updates.
+          * Uses props from `this.props` and state from `this.state` to render the
+          * structure of the component.
           *
-          * @param {array<object>} updates List of update configurations.
-          * @param {array<string>} markup List of markup strings.
-          * @internal
+          * No guarantees are made about when or how often this method is invoked, so
+          * it must not have side effects.
+          *
+          *   render: function() {
+          *     var name = this.props.name;
+          *     return <div>Hello, {name}!</div>;
+          *   }
+          *
+          * @return {ReactComponent}
+          * @nosideeffects
+          * @required
           */
-         dangerouslyProcessChildrenUpdates: function (updates, markup) {
-           for (var i = 0; i < updates.length; i++) {
-             updates[i].parentNode = ReactMount.getNode(updates[i].parentID);
-           }
-           DOMChildrenOperations.processUpdates(updates, markup);
-         }
-       };
+         render: SpecPolicy.DEFINE_ONCE,
        
-       ReactPerf.measureMethods(ReactDOMIDOperations, 'ReactDOMIDOperations', {
-         dangerouslyReplaceNodeWithMarkupByID: 'dangerouslyReplaceNodeWithMarkupByID',
-         dangerouslyProcessChildrenUpdates: 'dangerouslyProcessChildrenUpdates'
-       });
+         // ==== Delegate methods ====
        
-       module.exports = ReactDOMIDOperations;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
-
-/***/ },
-/* 30 */
-/***/ function(module, exports, __webpack_require__) {
-
-       /* WEBPACK VAR INJECTION */(function(process) {/**
-        * 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.
-        *
-        * @providesModule ReactMount
-        */
+         /**
+          * Invoked when the component is initially created and about to be mounted.
+          * This may have side effects, but any external subscriptions or data created
+          * by this method must be cleaned up in `componentWillUnmount`.
+          *
+          * @optional
+          */
+         componentWillMount: SpecPolicy.DEFINE_MANY,
        
-       'use strict';
+         /**
+          * Invoked when the component has been mounted and has a DOM representation.
+          * However, there is no guarantee that the DOM node is in the document.
+          *
+          * Use this as an opportunity to operate on the DOM when the component has
+          * been mounted (initialized and rendered) for the first time.
+          *
+          * @param {DOMElement} rootNode DOM element representing the component.
+          * @optional
+          */
+         componentDidMount: SpecPolicy.DEFINE_MANY,
        
-       var DOMProperty = __webpack_require__(25);
-       var ReactBrowserEventEmitter = __webpack_require__(31);
-       var ReactCurrentOwner = __webpack_require__(7);
-       var ReactDOMFeatureFlags = __webpack_require__(43);
-       var ReactElement = __webpack_require__(44);
-       var ReactEmptyComponentRegistry = __webpack_require__(46);
-       var ReactInstanceHandles = __webpack_require__(47);
-       var ReactInstanceMap = __webpack_require__(49);
-       var ReactMarkupChecksum = __webpack_require__(50);
-       var ReactPerf = __webpack_require__(20);
-       var ReactReconciler = __webpack_require__(52);
-       var ReactUpdateQueue = __webpack_require__(55);
-       var ReactUpdates = __webpack_require__(56);
-       
-       var assign = __webpack_require__(41);
-       var emptyObject = __webpack_require__(60);
-       var containsNode = __webpack_require__(61);
-       var instantiateReactComponent = __webpack_require__(64);
-       var invariant = __webpack_require__(15);
-       var setInnerHTML = __webpack_require__(21);
-       var shouldUpdateReactComponent = __webpack_require__(69);
-       var validateDOMNesting = __webpack_require__(72);
-       var warning = __webpack_require__(27);
+         /**
+          * Invoked before the component receives new props.
+          *
+          * Use this as an opportunity to react to a prop transition by updating the
+          * state using `this.setState`. Current props are accessed via `this.props`.
+          *
+          *   componentWillReceiveProps: function(nextProps, nextContext) {
+          *     this.setState({
+          *       likesIncreasing: nextProps.likeCount > this.props.likeCount
+          *     });
+          *   }
+          *
+          * NOTE: There is no equivalent `componentWillReceiveState`. An incoming prop
+          * transition may cause a state change, but the opposite is not true. If you
+          * need it, you are probably looking for `componentWillUpdate`.
+          *
+          * @param {object} nextProps
+          * @optional
+          */
+         componentWillReceiveProps: SpecPolicy.DEFINE_MANY,
        
-       var ATTR_NAME = DOMProperty.ID_ATTRIBUTE_NAME;
-       var nodeCache = {};
+         /**
+          * Invoked while deciding if the component should be updated as a result of
+          * receiving new props, state and/or context.
+          *
+          * Use this as an opportunity to `return false` when you're certain that the
+          * transition to the new props/state/context will not require a component
+          * update.
+          *
+          *   shouldComponentUpdate: function(nextProps, nextState, nextContext) {
+          *     return !equal(nextProps, this.props) ||
+          *       !equal(nextState, this.state) ||
+          *       !equal(nextContext, this.context);
+          *   }
+          *
+          * @param {object} nextProps
+          * @param {?object} nextState
+          * @param {?object} nextContext
+          * @return {boolean} True if the component should update.
+          * @optional
+          */
+         shouldComponentUpdate: SpecPolicy.DEFINE_ONCE,
        
-       var ELEMENT_NODE_TYPE = 1;
-       var DOC_NODE_TYPE = 9;
-       var DOCUMENT_FRAGMENT_NODE_TYPE = 11;
+         /**
+          * Invoked when the component is about to update due to a transition from
+          * `this.props`, `this.state` and `this.context` to `nextProps`, `nextState`
+          * and `nextContext`.
+          *
+          * Use this as an opportunity to perform preparation before an update occurs.
+          *
+          * NOTE: You **cannot** use `this.setState()` in this method.
+          *
+          * @param {object} nextProps
+          * @param {?object} nextState
+          * @param {?object} nextContext
+          * @param {ReactReconcileTransaction} transaction
+          * @optional
+          */
+         componentWillUpdate: SpecPolicy.DEFINE_MANY,
        
-       var ownerDocumentContextKey = '__ReactMount_ownerDocument$' + Math.random().toString(36).slice(2);
+         /**
+          * Invoked when the component's DOM representation has been updated.
+          *
+          * Use this as an opportunity to operate on the DOM when the component has
+          * been updated.
+          *
+          * @param {object} prevProps
+          * @param {?object} prevState
+          * @param {?object} prevContext
+          * @param {DOMElement} rootNode DOM element representing the component.
+          * @optional
+          */
+         componentDidUpdate: SpecPolicy.DEFINE_MANY,
        
-       /** Mapping from reactRootID to React component instance. */
-       var instancesByReactRootID = {};
+         /**
+          * Invoked when the component is about to be removed from its parent and have
+          * its DOM representation destroyed.
+          *
+          * Use this as an opportunity to deallocate any external resources.
+          *
+          * NOTE: There is no `componentDidUnmount` since your component will have been
+          * destroyed by that point.
+          *
+          * @optional
+          */
+         componentWillUnmount: SpecPolicy.DEFINE_MANY,
        
-       /** Mapping from reactRootID to `container` nodes. */
-       var containersByReactRootID = {};
+         // ==== Advanced methods ====
        
-       if (process.env.NODE_ENV !== 'production') {
-         /** __DEV__-only mapping from reactRootID to root elements. */
-         var rootElementsByReactRootID = {};
-       }
+         /**
+          * Updates the component's currently mounted DOM representation.
+          *
+          * By default, this implements React's rendering and reconciliation algorithm.
+          * Sophisticated clients may wish to override this.
+          *
+          * @param {ReactReconcileTransaction} transaction
+          * @internal
+          * @overridable
+          */
+         updateComponent: SpecPolicy.OVERRIDE_BASE
        
-       // Used to store breadth-first search state in findComponentRoot.
-       var findComponentRootReusableArray = [];
+       };
        
        /**
-        * Finds the index of the first character
-        * that's not common between the two given strings.
+        * Mapping from class specification keys to special processing functions.
         *
-        * @return {number} the index of the character where the strings diverge
+        * Although these are declared like instance properties in the specification
+        * when defining classes using `React.createClass`, they are actually static
+        * and are accessible on the constructor instead of the prototype. Despite
+        * being static, they must be defined outside of the "statics" key under
+        * which all other static methods are defined.
         */
-       function firstDifferenceIndex(string1, string2) {
-         var minLen = Math.min(string1.length, string2.length);
-         for (var i = 0; i < minLen; i++) {
-           if (string1.charAt(i) !== string2.charAt(i)) {
-             return i;
+       var RESERVED_SPEC_KEYS = {
+         displayName: function (Constructor, displayName) {
+           Constructor.displayName = displayName;
+         },
+         mixins: function (Constructor, mixins) {
+           if (mixins) {
+             for (var i = 0; i < mixins.length; i++) {
+               mixSpecIntoComponent(Constructor, mixins[i]);
+             }
+           }
+         },
+         childContextTypes: function (Constructor, childContextTypes) {
+           if (process.env.NODE_ENV !== 'production') {
+             validateTypeDef(Constructor, childContextTypes, ReactPropTypeLocations.childContext);
+           }
+           Constructor.childContextTypes = _assign({}, Constructor.childContextTypes, childContextTypes);
+         },
+         contextTypes: function (Constructor, contextTypes) {
+           if (process.env.NODE_ENV !== 'production') {
+             validateTypeDef(Constructor, contextTypes, ReactPropTypeLocations.context);
+           }
+           Constructor.contextTypes = _assign({}, Constructor.contextTypes, contextTypes);
+         },
+         /**
+          * Special case getDefaultProps which should move into statics but requires
+          * automatic merging.
+          */
+         getDefaultProps: function (Constructor, getDefaultProps) {
+           if (Constructor.getDefaultProps) {
+             Constructor.getDefaultProps = createMergedResultFunction(Constructor.getDefaultProps, getDefaultProps);
+           } else {
+             Constructor.getDefaultProps = getDefaultProps;
+           }
+         },
+         propTypes: function (Constructor, propTypes) {
+           if (process.env.NODE_ENV !== 'production') {
+             validateTypeDef(Constructor, propTypes, ReactPropTypeLocations.prop);
+           }
+           Constructor.propTypes = _assign({}, Constructor.propTypes, propTypes);
+         },
+         statics: function (Constructor, statics) {
+           mixStaticSpecIntoComponent(Constructor, statics);
+         },
+         autobind: function () {} };
+       
+       // noop
+       function validateTypeDef(Constructor, typeDef, location) {
+         for (var propName in typeDef) {
+           if (typeDef.hasOwnProperty(propName)) {
+             // use a warning instead of an invariant so components
+             // don't show up in prod but only in __DEV__
+             process.env.NODE_ENV !== 'production' ? warning(typeof typeDef[propName] === 'function', '%s: %s type `%s` is invalid; it must be a function, usually from ' + 'React.PropTypes.', Constructor.displayName || 'ReactClass', ReactPropTypeLocationNames[location], propName) : void 0;
            }
          }
-         return string1.length === string2.length ? -1 : minLen;
        }
        
-       /**
-        * @param {DOMElement|DOMDocument} container DOM element that may contain
-        * a React component
-        * @return {?*} DOM element that may have the reactRoot ID, or null.
-        */
-       function getReactRootElementInContainer(container) {
-         if (!container) {
-           return null;
-         }
+       function validateMethodOverride(isAlreadyDefined, name) {
+         var specPolicy = ReactClassInterface.hasOwnProperty(name) ? ReactClassInterface[name] : null;
        
-         if (container.nodeType === DOC_NODE_TYPE) {
-           return container.documentElement;
-         } else {
-           return container.firstChild;
+         // Disallow overriding of base class methods unless explicitly allowed.
+         if (ReactClassMixin.hasOwnProperty(name)) {
+           !(specPolicy === SpecPolicy.OVERRIDE_BASE) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClassInterface: You are attempting to override `%s` from your class specification. Ensure that your method names do not overlap with React methods.', name) : _prodInvariant('73', name) : void 0;
          }
-       }
        
-       /**
-        * @param {DOMElement} container DOM element that may contain a React component.
-        * @return {?string} A "reactRoot" ID, if a React component is rendered.
-        */
-       function getReactRootID(container) {
-         var rootElement = getReactRootElementInContainer(container);
-         return rootElement && ReactMount.getID(rootElement);
+         // Disallow defining methods more than once unless explicitly allowed.
+         if (isAlreadyDefined) {
+           !(specPolicy === SpecPolicy.DEFINE_MANY || specPolicy === SpecPolicy.DEFINE_MANY_MERGED) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClassInterface: You are attempting to define `%s` on your component more than once. This conflict may be due to a mixin.', name) : _prodInvariant('74', name) : void 0;
+         }
        }
        
        /**
-        * Accessing node[ATTR_NAME] or calling getAttribute(ATTR_NAME) on a form
-        * element can return its control whose name or ID equals ATTR_NAME. All
-        * DOM nodes support `getAttributeNode` but this can also get called on
-        * other objects so just return '' if we're given something other than a
-        * DOM node (such as window).
-        *
-        * @param {?DOMElement|DOMWindow|DOMDocument|DOMTextNode} node DOM node.
-        * @return {string} ID of the supplied `domNode`.
+        * Mixin helper which handles policy validation and reserved
+        * specification keys when building React classes.
         */
-       function getID(node) {
-         var id = internalGetID(node);
-         if (id) {
-           if (nodeCache.hasOwnProperty(id)) {
-             var cached = nodeCache[id];
-             if (cached !== node) {
-               !!isValid(cached, id) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactMount: Two valid but unequal nodes with the same `%s`: %s', ATTR_NAME, id) : invariant(false) : undefined;
+       function mixSpecIntoComponent(Constructor, spec) {
+         if (!spec) {
+           if (process.env.NODE_ENV !== 'production') {
+             var typeofSpec = typeof spec;
+             var isMixinValid = typeofSpec === 'object' && spec !== null;
        
-               nodeCache[id] = node;
-             }
-           } else {
-             nodeCache[id] = node;
+             process.env.NODE_ENV !== 'production' ? warning(isMixinValid, '%s: You\'re attempting to include a mixin that is either null ' + 'or not an object. Check the mixins included by the component, ' + 'as well as any mixins they include themselves. ' + 'Expected object but got %s.', Constructor.displayName || 'ReactClass', spec === null ? null : typeofSpec) : void 0;
            }
+       
+           return;
          }
        
-         return id;
-       }
+         !(typeof spec !== 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You\'re attempting to use a component class or function as a mixin. Instead, just use a regular object.') : _prodInvariant('75') : void 0;
+         !!ReactElement.isValidElement(spec) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You\'re attempting to use a component as a mixin. Instead, just use a regular object.') : _prodInvariant('76') : void 0;
        
-       function internalGetID(node) {
-         // If node is something like a window, document, or text node, none of
-         // which support attributes or a .getAttribute method, gracefully return
-         // the empty string, as if the attribute were missing.
-         return node && node.getAttribute && node.getAttribute(ATTR_NAME) || '';
-       }
+         var proto = Constructor.prototype;
+         var autoBindPairs = proto.__reactAutoBindPairs;
        
-       /**
-        * Sets the React-specific ID of the given node.
-        *
-        * @param {DOMElement} node The DOM node whose ID will be set.
-        * @param {string} id The value of the ID attribute.
-        */
-       function setID(node, id) {
-         var oldID = internalGetID(node);
-         if (oldID !== id) {
-           delete nodeCache[oldID];
+         // By handling mixins before any other properties, we ensure the same
+         // chaining order is applied to methods with DEFINE_MANY policy, whether
+         // mixins are listed before or after these methods in the spec.
+         if (spec.hasOwnProperty(MIXINS_KEY)) {
+           RESERVED_SPEC_KEYS.mixins(Constructor, spec.mixins);
          }
-         node.setAttribute(ATTR_NAME, id);
-         nodeCache[id] = node;
-       }
        
-       /**
-        * Finds the node with the supplied React-generated DOM ID.
-        *
-        * @param {string} id A React-generated DOM ID.
-        * @return {DOMElement} DOM node with the suppled `id`.
-        * @internal
-        */
-       function getNode(id) {
-         if (!nodeCache.hasOwnProperty(id) || !isValid(nodeCache[id], id)) {
-           nodeCache[id] = ReactMount.findReactNodeByID(id);
+         for (var name in spec) {
+           if (!spec.hasOwnProperty(name)) {
+             continue;
+           }
+       
+           if (name === MIXINS_KEY) {
+             // We have already handled mixins in a special case above.
+             continue;
+           }
+       
+           var property = spec[name];
+           var isAlreadyDefined = proto.hasOwnProperty(name);
+           validateMethodOverride(isAlreadyDefined, name);
+       
+           if (RESERVED_SPEC_KEYS.hasOwnProperty(name)) {
+             RESERVED_SPEC_KEYS[name](Constructor, property);
+           } else {
+             // Setup methods on prototype:
+             // The following member methods should not be automatically bound:
+             // 1. Expected ReactClass methods (in the "interface").
+             // 2. Overridden methods (that were mixed in).
+             var isReactClassMethod = ReactClassInterface.hasOwnProperty(name);
+             var isFunction = typeof property === 'function';
+             var shouldAutoBind = isFunction && !isReactClassMethod && !isAlreadyDefined && spec.autobind !== false;
+       
+             if (shouldAutoBind) {
+               autoBindPairs.push(name, property);
+               proto[name] = property;
+             } else {
+               if (isAlreadyDefined) {
+                 var specPolicy = ReactClassInterface[name];
+       
+                 // These cases should already be caught by validateMethodOverride.
+                 !(isReactClassMethod && (specPolicy === SpecPolicy.DEFINE_MANY_MERGED || specPolicy === SpecPolicy.DEFINE_MANY)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: Unexpected spec policy %s for key %s when mixing in component specs.', specPolicy, name) : _prodInvariant('77', specPolicy, name) : void 0;
+       
+                 // For methods which are defined more than once, call the existing
+                 // methods before calling the new property, merging if appropriate.
+                 if (specPolicy === SpecPolicy.DEFINE_MANY_MERGED) {
+                   proto[name] = createMergedResultFunction(proto[name], property);
+                 } else if (specPolicy === SpecPolicy.DEFINE_MANY) {
+                   proto[name] = createChainedFunction(proto[name], property);
+                 }
+               } else {
+                 proto[name] = property;
+                 if (process.env.NODE_ENV !== 'production') {
+                   // Add verbose displayName to the function, which helps when looking
+                   // at profiling tools.
+                   if (typeof property === 'function' && spec.displayName) {
+                     proto[name].displayName = spec.displayName + '_' + name;
+                   }
+                 }
+               }
+             }
+           }
          }
-         return nodeCache[id];
        }
        
-       /**
-        * Finds the node with the supplied public React instance.
-        *
-        * @param {*} instance A public React instance.
-        * @return {?DOMElement} DOM node with the suppled `id`.
-        * @internal
-        */
-       function getNodeFromInstance(instance) {
-         var id = ReactInstanceMap.get(instance)._rootNodeID;
-         if (ReactEmptyComponentRegistry.isNullComponentID(id)) {
-           return null;
+       function mixStaticSpecIntoComponent(Constructor, statics) {
+         if (!statics) {
+           return;
          }
-         if (!nodeCache.hasOwnProperty(id) || !isValid(nodeCache[id], id)) {
-           nodeCache[id] = ReactMount.findReactNodeByID(id);
+         for (var name in statics) {
+           var property = statics[name];
+           if (!statics.hasOwnProperty(name)) {
+             continue;
+           }
+       
+           var isReserved = name in RESERVED_SPEC_KEYS;
+           !!isReserved ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You are attempting to define a reserved property, `%s`, that shouldn\'t be on the "statics" key. Define it as an instance property instead; it will still be accessible on the constructor.', name) : _prodInvariant('78', name) : void 0;
+       
+           var isInherited = name in Constructor;
+           !!isInherited ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You are attempting to define `%s` on your component more than once. This conflict may be due to a mixin.', name) : _prodInvariant('79', name) : void 0;
+           Constructor[name] = property;
          }
-         return nodeCache[id];
        }
        
        /**
-        * A node is "valid" if it is contained by a currently mounted container.
-        *
-        * This means that the node does not have to be contained by a document in
-        * order to be considered valid.
+        * Merge two objects, but throw if both contain the same key.
         *
-        * @param {?DOMElement} node The candidate DOM node.
-        * @param {string} id The expected ID of the node.
-        * @return {boolean} Whether the node is contained by a mounted container.
+        * @param {object} one The first object, which is mutated.
+        * @param {object} two The second object
+        * @return {object} one after it has been mutated to contain everything in two.
         */
-       function isValid(node, id) {
-         if (node) {
-           !(internalGetID(node) === id) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactMount: Unexpected modification of `%s`', ATTR_NAME) : invariant(false) : undefined;
+       function mergeIntoWithNoDuplicateKeys(one, two) {
+         !(one && two && typeof one === 'object' && typeof two === 'object') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'mergeIntoWithNoDuplicateKeys(): Cannot merge non-objects.') : _prodInvariant('80') : void 0;
        
-           var container = ReactMount.findReactContainerForID(id);
-           if (container && containsNode(container, node)) {
-             return true;
+         for (var key in two) {
+           if (two.hasOwnProperty(key)) {
+             !(one[key] === undefined) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'mergeIntoWithNoDuplicateKeys(): Tried to merge two objects with the same key: `%s`. This conflict may be due to a mixin; in particular, this may be caused by two getInitialState() or getDefaultProps() methods returning objects with clashing keys.', key) : _prodInvariant('81', key) : void 0;
+             one[key] = two[key];
            }
          }
-       
-         return false;
+         return one;
        }
        
        /**
-        * Causes the cache to forget about one React-specific ID.
+        * Creates a function that invokes two functions and merges their return values.
         *
-        * @param {string} id The ID to forget.
+        * @param {function} one Function to invoke first.
+        * @param {function} two Function to invoke second.
+        * @return {function} Function that invokes the two argument functions.
+        * @private
         */
-       function purgeID(id) {
-         delete nodeCache[id];
-       }
-       
-       var deepestNodeSoFar = null;
-       function findDeepestCachedAncestorImpl(ancestorID) {
-         var ancestor = nodeCache[ancestorID];
-         if (ancestor && isValid(ancestor, ancestorID)) {
-           deepestNodeSoFar = ancestor;
-         } else {
-           // This node isn't populated in the cache, so presumably none of its
-           // descendants are. Break out of the loop.
-           return false;
-         }
+       function createMergedResultFunction(one, two) {
+         return function mergedResult() {
+           var a = one.apply(this, arguments);
+           var b = two.apply(this, arguments);
+           if (a == null) {
+             return b;
+           } else if (b == null) {
+             return a;
+           }
+           var c = {};
+           mergeIntoWithNoDuplicateKeys(c, a);
+           mergeIntoWithNoDuplicateKeys(c, b);
+           return c;
+         };
        }
        
        /**
-        * Return the deepest cached node whose ID is a prefix of `targetID`.
+        * Creates a function that invokes two functions and ignores their return vales.
+        *
+        * @param {function} one Function to invoke first.
+        * @param {function} two Function to invoke second.
+        * @return {function} Function that invokes the two argument functions.
+        * @private
         */
-       function findDeepestCachedAncestor(targetID) {
-         deepestNodeSoFar = null;
-         ReactInstanceHandles.traverseAncestors(targetID, findDeepestCachedAncestorImpl);
-       
-         var foundNode = deepestNodeSoFar;
-         deepestNodeSoFar = null;
-         return foundNode;
+       function createChainedFunction(one, two) {
+         return function chainedFunction() {
+           one.apply(this, arguments);
+           two.apply(this, arguments);
+         };
        }
        
        /**
-        * Mounts this component and inserts it into the DOM.
+        * Binds a method to the component.
         *
-        * @param {ReactComponent} componentInstance The instance to mount.
-        * @param {string} rootID DOM ID of the root node.
-        * @param {DOMElement} container DOM element to mount into.
-        * @param {ReactReconcileTransaction} transaction
-        * @param {boolean} shouldReuseMarkup If true, do not insert markup
+        * @param {object} component Component whose method is going to be bound.
+        * @param {function} method Method to be bound.
+        * @return {function} The bound method.
         */
-       function mountComponentIntoNode(componentInstance, rootID, container, transaction, shouldReuseMarkup, context) {
-         if (ReactDOMFeatureFlags.useCreateElement) {
-           context = assign({}, context);
-           if (container.nodeType === DOC_NODE_TYPE) {
-             context[ownerDocumentContextKey] = container;
-           } else {
-             context[ownerDocumentContextKey] = container.ownerDocument;
-           }
-         }
+       function bindAutoBindMethod(component, method) {
+         var boundMethod = method.bind(component);
          if (process.env.NODE_ENV !== 'production') {
-           if (context === emptyObject) {
-             context = {};
-           }
-           var tag = container.nodeName.toLowerCase();
-           context[validateDOMNesting.ancestorInfoContextKey] = validateDOMNesting.updatedAncestorInfo(null, tag, null);
+           boundMethod.__reactBoundContext = component;
+           boundMethod.__reactBoundMethod = method;
+           boundMethod.__reactBoundArguments = null;
+           var componentName = component.constructor.displayName;
+           var _bind = boundMethod.bind;
+           boundMethod.bind = function (newThis) {
+             for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
+               args[_key - 1] = arguments[_key];
+             }
+       
+             // User is trying to bind() an autobound method; we effectively will
+             // ignore the value of "this" that the user is trying to use, so
+             // let's warn.
+             if (newThis !== component && newThis !== null) {
+               process.env.NODE_ENV !== 'production' ? warning(false, 'bind(): React component methods may only be bound to the ' + 'component instance. See %s', componentName) : void 0;
+             } else if (!args.length) {
+               process.env.NODE_ENV !== 'production' ? warning(false, 'bind(): You are binding a component method to the component. ' + 'React does this for you automatically in a high-performance ' + 'way, so you can safely remove this call. See %s', componentName) : void 0;
+               return boundMethod;
+             }
+             var reboundMethod = _bind.apply(boundMethod, arguments);
+             reboundMethod.__reactBoundContext = component;
+             reboundMethod.__reactBoundMethod = method;
+             reboundMethod.__reactBoundArguments = args;
+             return reboundMethod;
+           };
          }
-         var markup = ReactReconciler.mountComponent(componentInstance, rootID, transaction, context);
-         componentInstance._renderedComponent._topLevelWrapper = componentInstance;
-         ReactMount._mountImageIntoNode(markup, container, shouldReuseMarkup, transaction);
+         return boundMethod;
        }
        
        /**
-        * Batched mount.
+        * Binds all auto-bound methods in a component.
         *
-        * @param {ReactComponent} componentInstance The instance to mount.
-        * @param {string} rootID DOM ID of the root node.
-        * @param {DOMElement} container DOM element to mount into.
-        * @param {boolean} shouldReuseMarkup If true, do not insert markup
+        * @param {object} component Component whose method is going to be bound.
         */
-       function batchedMountComponentIntoNode(componentInstance, rootID, container, shouldReuseMarkup, context) {
-         var transaction = ReactUpdates.ReactReconcileTransaction.getPooled(
-         /* forceHTML */shouldReuseMarkup);
-         transaction.perform(mountComponentIntoNode, null, componentInstance, rootID, container, transaction, shouldReuseMarkup, context);
-         ReactUpdates.ReactReconcileTransaction.release(transaction);
+       function bindAutoBindMethods(component) {
+         var pairs = component.__reactAutoBindPairs;
+         for (var i = 0; i < pairs.length; i += 2) {
+           var autoBindKey = pairs[i];
+           var method = pairs[i + 1];
+           component[autoBindKey] = bindAutoBindMethod(component, method);
+         }
        }
        
        /**
-        * Unmounts a component and removes it from the DOM.
-        *
-        * @param {ReactComponent} instance React component instance.
-        * @param {DOMElement} container DOM element to unmount from.
-        * @final
-        * @internal
-        * @see {ReactMount.unmountComponentAtNode}
+        * Add more to the ReactClass base class. These are all legacy features and
+        * therefore not already part of the modern ReactComponent.
         */
-       function unmountComponentFromNode(instance, container) {
-         ReactReconciler.unmountComponent(instance);
+       var ReactClassMixin = {
        
-         if (container.nodeType === DOC_NODE_TYPE) {
-           container = container.documentElement;
-         }
+         /**
+          * TODO: This will be deprecated because state should always keep a consistent
+          * type signature and the only use case for this, is to avoid that.
+          */
+         replaceState: function (newState, callback) {
+           this.updater.enqueueReplaceState(this, newState);
+           if (callback) {
+             this.updater.enqueueCallback(this, callback, 'replaceState');
+           }
+         },
        
-         // http://jsperf.com/emptying-a-node
-         while (container.lastChild) {
-           container.removeChild(container.lastChild);
+         /**
+          * Checks whether or not this composite component is mounted.
+          * @return {boolean} True if mounted, false otherwise.
+          * @protected
+          * @final
+          */
+         isMounted: function () {
+           return this.updater.isMounted(this);
          }
-       }
+       };
+       
+       var ReactClassComponent = function () {};
+       _assign(ReactClassComponent.prototype, ReactComponent.prototype, ReactClassMixin);
        
        /**
-        * True if the supplied DOM node has a direct React-rendered child that is
-        * not a React root element. Useful for warning in `render`,
-        * `unmountComponentAtNode`, etc.
+        * Module for creating composite components.
         *
-        * @param {?DOMElement} node The candidate DOM node.
-        * @return {boolean} True if the DOM element contains a direct child that was
-        * rendered by React but is not a root element.
-        * @internal
+        * @class ReactClass
         */
-       function hasNonRootReactChild(node) {
-         var reactRootID = getReactRootID(node);
-         return reactRootID ? reactRootID !== ReactInstanceHandles.getReactRootIDFromNodeID(reactRootID) : false;
-       }
+       var ReactClass = {
        
-       /**
-        * Returns the first (deepest) ancestor of a node which is rendered by this copy
-        * of React.
-        */
-       function findFirstReactDOMImpl(node) {
-         // This node might be from another React instance, so we make sure not to
-         // examine the node cache here
-         for (; node && node.parentNode !== node; node = node.parentNode) {
-           if (node.nodeType !== 1) {
-             // Not a DOMElement, therefore not a React component
-             continue;
-           }
-           var nodeID = internalGetID(node);
-           if (!nodeID) {
-             continue;
-           }
-           var reactRootID = ReactInstanceHandles.getReactRootIDFromNodeID(nodeID);
+         /**
+          * Creates a composite component class given a class specification.
+          * See https://facebook.github.io/react/docs/top-level-api.html#react.createclass
+          *
+          * @param {object} spec Class specification (which must define `render`).
+          * @return {function} Component constructor function.
+          * @public
+          */
+         createClass: function (spec) {
+           var Constructor = function (props, context, updater) {
+             // This constructor gets overridden by mocks. The argument is used
+             // by mocks to assert on what gets mounted.
        
-           // If containersByReactRootID contains the container we find by crawling up
-           // the tree, we know that this instance of React rendered the node.
-           // nb. isValid's strategy (with containsNode) does not work because render
-           // trees may be nested and we don't want a false positive in that case.
-           var current = node;
-           var lastID;
-           do {
-             lastID = internalGetID(current);
-             current = current.parentNode;
-             if (current == null) {
-               // The passed-in node has been detached from the container it was
-               // originally rendered into.
-               return null;
+             if (process.env.NODE_ENV !== 'production') {
+               process.env.NODE_ENV !== 'production' ? warning(this instanceof Constructor, 'Something is calling a React component directly. Use a factory or ' + 'JSX instead. See: https://fb.me/react-legacyfactory') : void 0;
              }
-           } while (lastID !== reactRootID);
        
-           if (current === containersByReactRootID[reactRootID]) {
-             return node;
-           }
-         }
-         return null;
-       }
+             // Wire up auto-binding
+             if (this.__reactAutoBindPairs.length) {
+               bindAutoBindMethods(this);
+             }
        
-       /**
-        * Temporary (?) hack so that we can store all top-level pending updates on
-        * composites instead of having to worry about different types of components
-        * here.
-        */
-       var TopLevelWrapper = function () {};
-       TopLevelWrapper.prototype.isReactComponent = {};
-       if (process.env.NODE_ENV !== 'production') {
-         TopLevelWrapper.displayName = 'TopLevelWrapper';
-       }
-       TopLevelWrapper.prototype.render = function () {
-         // this.props is actually a ReactElement
-         return this.props;
-       };
-       
-       /**
-        * Mounting is the process of initializing a React component by creating its
-        * representative DOM elements and inserting them into a supplied `container`.
-        * Any prior content inside `container` is destroyed in the process.
-        *
-        *   ReactMount.render(
-        *     component,
-        *     document.getElementById('container')
-        *   );
-        *
-        *   <div id="container">                   <-- Supplied `container`.
-        *     <div data-reactid=".3">              <-- Rendered reactRoot of React
-        *       // ...                                 component.
-        *     </div>
-        *   </div>
-        *
-        * Inside of `container`, the first element rendered is the "reactRoot".
-        */
-       var ReactMount = {
-       
-         TopLevelWrapper: TopLevelWrapper,
+             this.props = props;
+             this.context = context;
+             this.refs = emptyObject;
+             this.updater = updater || ReactNoopUpdateQueue;
        
-         /** Exposed for debugging purposes **/
-         _instancesByReactRootID: instancesByReactRootID,
+             this.state = null;
        
-         /**
-          * This is a hook provided to support rendering React components while
-          * ensuring that the apparent scroll position of its `container` does not
-          * change.
-          *
-          * @param {DOMElement} container The `container` being rendered into.
-          * @param {function} renderCallback This must be called once to do the render.
-          */
-         scrollMonitor: function (container, renderCallback) {
-           renderCallback();
-         },
+             // ReactClasses doesn't have constructors. Instead, they use the
+             // getInitialState and componentWillMount methods for initialization.
        
-         /**
-          * Take a component that's already mounted into the DOM and replace its props
-          * @param {ReactComponent} prevComponent component instance already in the DOM
-          * @param {ReactElement} nextElement component instance to render
-          * @param {DOMElement} container container to render into
-          * @param {?function} callback function triggered on completion
-          */
-         _updateRootComponent: function (prevComponent, nextElement, container, callback) {
-           ReactMount.scrollMonitor(container, function () {
-             ReactUpdateQueue.enqueueElementInternal(prevComponent, nextElement);
-             if (callback) {
-               ReactUpdateQueue.enqueueCallbackInternal(prevComponent, callback);
+             var initialState = this.getInitialState ? this.getInitialState() : null;
+             if (process.env.NODE_ENV !== 'production') {
+               // We allow auto-mocks to proceed as if they're returning null.
+               if (initialState === undefined && this.getInitialState._isMockFunction) {
+                 // This is probably bad practice. Consider warning here and
+                 // deprecating this convenience.
+                 initialState = null;
+               }
              }
-           });
-       
-           if (process.env.NODE_ENV !== 'production') {
-             // Record the root element in case it later gets transplanted.
-             rootElementsByReactRootID[getReactRootID(container)] = getReactRootElementInContainer(container);
-           }
-       
-           return prevComponent;
-         },
-       
-         /**
-          * Register a component into the instance map and starts scroll value
-          * monitoring
-          * @param {ReactComponent} nextComponent component instance to render
-          * @param {DOMElement} container container to render into
-          * @return {string} reactRoot ID prefix
-          */
-         _registerComponent: function (nextComponent, container) {
-           !(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE || container.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE)) ? process.env.NODE_ENV !== 'production' ? invariant(false, '_registerComponent(...): Target container is not a DOM element.') : invariant(false) : undefined;
-       
-           ReactBrowserEventEmitter.ensureScrollValueMonitoring();
-       
-           var reactRootID = ReactMount.registerContainer(container);
-           instancesByReactRootID[reactRootID] = nextComponent;
-           return reactRootID;
-         },
-       
-         /**
-          * Render a new component into the DOM.
-          * @param {ReactElement} nextElement element to render
-          * @param {DOMElement} container container to render into
-          * @param {boolean} shouldReuseMarkup if we should skip the markup insertion
-          * @return {ReactComponent} nextComponent
-          */
-         _renderNewRootComponent: function (nextElement, container, shouldReuseMarkup, context) {
-           // Various parts of our code (such as ReactCompositeComponent's
-           // _renderValidatedComponent) assume that calls to render aren't nested;
-           // verify that that's the case.
-           process.env.NODE_ENV !== 'production' ? warning(ReactCurrentOwner.current == null, '_renderNewRootComponent(): Render methods should be a pure function ' + 'of props and state; triggering nested component updates from ' + 'render is not allowed. If necessary, trigger nested updates in ' + 'componentDidUpdate. Check the render method of %s.', ReactCurrentOwner.current && ReactCurrentOwner.current.getName() || 'ReactCompositeComponent') : undefined;
+             !(typeof initialState === 'object' && !Array.isArray(initialState)) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.getInitialState(): must return an object or null', Constructor.displayName || 'ReactCompositeComponent') : _prodInvariant('82', Constructor.displayName || 'ReactCompositeComponent') : void 0;
        
-           var componentInstance = instantiateReactComponent(nextElement, null);
-           var reactRootID = ReactMount._registerComponent(componentInstance, container);
+             this.state = initialState;
+           };
+           Constructor.prototype = new ReactClassComponent();
+           Constructor.prototype.constructor = Constructor;
+           Constructor.prototype.__reactAutoBindPairs = [];
        
-           // The initial render is synchronous but any updates that happen during
-           // rendering, in componentWillMount or componentDidMount, will be batched
-           // according to the current batching strategy.
+           injectedMixins.forEach(mixSpecIntoComponent.bind(null, Constructor));
        
-           ReactUpdates.batchedUpdates(batchedMountComponentIntoNode, componentInstance, reactRootID, container, shouldReuseMarkup, context);
+           mixSpecIntoComponent(Constructor, spec);
        
-           if (process.env.NODE_ENV !== 'production') {
-             // Record the root element in case it later gets transplanted.
-             rootElementsByReactRootID[reactRootID] = getReactRootElementInContainer(container);
+           // Initialize the defaultProps property after all mixins have been merged.
+           if (Constructor.getDefaultProps) {
+             Constructor.defaultProps = Constructor.getDefaultProps();
            }
        
-           return componentInstance;
-         },
-       
-         /**
-          * Renders a React component into the DOM in the supplied `container`.
-          *
-          * If the React component was previously rendered into `container`, this will
-          * perform an update on it and only mutate the DOM as necessary to reflect the
-          * latest React component.
-          *
-          * @param {ReactComponent} parentComponent The conceptual parent of this render tree.
-          * @param {ReactElement} nextElement Component element to render.
-          * @param {DOMElement} container DOM element to render into.
-          * @param {?function} callback function triggered on completion
-          * @return {ReactComponent} Component instance rendered in `container`.
-          */
-         renderSubtreeIntoContainer: function (parentComponent, nextElement, container, callback) {
-           !(parentComponent != null && parentComponent._reactInternalInstance != null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'parentComponent must be a valid React Component') : invariant(false) : undefined;
-           return ReactMount._renderSubtreeIntoContainer(parentComponent, nextElement, container, callback);
-         },
-       
-         _renderSubtreeIntoContainer: function (parentComponent, nextElement, container, callback) {
-           !ReactElement.isValidElement(nextElement) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactDOM.render(): Invalid component element.%s', typeof nextElement === 'string' ? ' Instead of passing an element string, make sure to instantiate ' + 'it by passing it to React.createElement.' : typeof nextElement === 'function' ? ' Instead of passing a component class, make sure to instantiate ' + 'it by passing it to React.createElement.' :
-           // Check if it quacks like an element
-           nextElement != null && nextElement.props !== undefined ? ' This may be caused by unintentionally loading two independent ' + 'copies of React.' : '') : invariant(false) : undefined;
-       
-           process.env.NODE_ENV !== 'production' ? warning(!container || !container.tagName || container.tagName.toUpperCase() !== 'BODY', 'render(): Rendering components directly into document.body is ' + 'discouraged, since its children are often manipulated by third-party ' + 'scripts and browser extensions. This may lead to subtle ' + 'reconciliation issues. Try rendering into a container element created ' + 'for your app.') : undefined;
-       
-           var nextWrappedElement = new ReactElement(TopLevelWrapper, null, null, null, null, null, nextElement);
-       
-           var prevComponent = instancesByReactRootID[getReactRootID(container)];
-       
-           if (prevComponent) {
-             var prevWrappedElement = prevComponent._currentElement;
-             var prevElement = prevWrappedElement.props;
-             if (shouldUpdateReactComponent(prevElement, nextElement)) {
-               var publicInst = prevComponent._renderedComponent.getPublicInstance();
-               var updatedCallback = callback && function () {
-                 callback.call(publicInst);
-               };
-               ReactMount._updateRootComponent(prevComponent, nextWrappedElement, container, updatedCallback);
-               return publicInst;
-             } else {
-               ReactMount.unmountComponentAtNode(container);
+           if (process.env.NODE_ENV !== 'production') {
+             // This is a tag to indicate that the use of these method names is ok,
+             // since it's used with createClass. If it's not, then it's likely a
+             // mistake so we'll warn you to use the static property, property
+             // initializer or constructor respectively.
+             if (Constructor.getDefaultProps) {
+               Constructor.getDefaultProps.isReactClassApproved = {};
+             }
+             if (Constructor.prototype.getInitialState) {
+               Constructor.prototype.getInitialState.isReactClassApproved = {};
              }
            }
        
-           var reactRootElement = getReactRootElementInContainer(container);
-           var containerHasReactMarkup = reactRootElement && !!internalGetID(reactRootElement);
-           var containerHasNonRootReactChild = hasNonRootReactChild(container);
+           !Constructor.prototype.render ? process.env.NODE_ENV !== 'production' ? invariant(false, 'createClass(...): Class specification must implement a `render` method.') : _prodInvariant('83') : void 0;
        
            if (process.env.NODE_ENV !== 'production') {
-             process.env.NODE_ENV !== 'production' ? warning(!containerHasNonRootReactChild, 'render(...): Replacing React-rendered children with a new root ' + 'component. If you intended to update the children of this node, ' + 'you should instead have the existing children update their state ' + 'and render the new components instead of calling ReactDOM.render.') : undefined;
-       
-             if (!containerHasReactMarkup || reactRootElement.nextSibling) {
-               var rootElementSibling = reactRootElement;
-               while (rootElementSibling) {
-                 if (internalGetID(rootElementSibling)) {
-                   process.env.NODE_ENV !== 'production' ? warning(false, 'render(): Target node has markup rendered by React, but there ' + 'are unrelated nodes as well. This is most commonly caused by ' + 'white-space inserted around server-rendered markup.') : undefined;
-                   break;
-                 }
-                 rootElementSibling = rootElementSibling.nextSibling;
-               }
-             }
+             process.env.NODE_ENV !== 'production' ? warning(!Constructor.prototype.componentShouldUpdate, '%s has a method called ' + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 'The name is phrased as a question because the function is ' + 'expected to return a value.', spec.displayName || 'A component') : void 0;
+             process.env.NODE_ENV !== 'production' ? warning(!Constructor.prototype.componentWillRecieveProps, '%s has a method called ' + 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?', spec.displayName || 'A component') : void 0;
            }
        
-           var shouldReuseMarkup = containerHasReactMarkup && !prevComponent && !containerHasNonRootReactChild;
-           var component = ReactMount._renderNewRootComponent(nextWrappedElement, container, shouldReuseMarkup, parentComponent != null ? parentComponent._reactInternalInstance._processChildContext(parentComponent._reactInternalInstance._context) : emptyObject)._renderedComponent.getPublicInstance();
-           if (callback) {
-             callback.call(component);
+           // Reduce time spent doing lookups by setting these on the prototype.
+           for (var methodName in ReactClassInterface) {
+             if (!Constructor.prototype[methodName]) {
+               Constructor.prototype[methodName] = null;
+             }
            }
-           return component;
-         },
        
-         /**
-          * Renders a React component into the DOM in the supplied `container`.
-          *
-          * If the React component was previously rendered into `container`, this will
-          * perform an update on it and only mutate the DOM as necessary to reflect the
-          * latest React component.
-          *
-          * @param {ReactElement} nextElement Component element to render.
-          * @param {DOMElement} container DOM element to render into.
-          * @param {?function} callback function triggered on completion
-          * @return {ReactComponent} Component instance rendered in `container`.
-          */
-         render: function (nextElement, container, callback) {
-           return ReactMount._renderSubtreeIntoContainer(null, nextElement, container, callback);
+           return Constructor;
          },
        
-         /**
-          * Registers a container node into which React components will be rendered.
-          * This also creates the "reactRoot" ID that will be assigned to the element
-          * rendered within.
-          *
-          * @param {DOMElement} container DOM element to register as a container.
-          * @return {string} The "reactRoot" ID of elements rendered within.
-          */
-         registerContainer: function (container) {
-           var reactRootID = getReactRootID(container);
-           if (reactRootID) {
-             // If one exists, make sure it is a valid "reactRoot" ID.
-             reactRootID = ReactInstanceHandles.getReactRootIDFromNodeID(reactRootID);
-           }
-           if (!reactRootID) {
-             // No valid "reactRoot" ID found, create one.
-             reactRootID = ReactInstanceHandles.createReactRootID();
+         injection: {
+           injectMixin: function (mixin) {
+             injectedMixins.push(mixin);
            }
-           containersByReactRootID[reactRootID] = container;
-           return reactRootID;
-         },
-       
-         /**
-          * Unmounts and destroys the React component rendered in the `container`.
-          *
-          * @param {DOMElement} container DOM element containing a React component.
-          * @return {boolean} True if a component was found in and unmounted from
-          *                   `container`
-          */
-         unmountComponentAtNode: function (container) {
-           // Various parts of our code (such as ReactCompositeComponent's
-           // _renderValidatedComponent) assume that calls to render aren't nested;
-           // verify that that's the case. (Strictly speaking, unmounting won't cause a
-           // render but we still don't expect to be in a render call here.)
-           process.env.NODE_ENV !== 'production' ? warning(ReactCurrentOwner.current == null, 'unmountComponentAtNode(): Render methods should be a pure function ' + 'of props and state; triggering nested component updates from render ' + 'is not allowed. If necessary, trigger nested updates in ' + 'componentDidUpdate. Check the render method of %s.', ReactCurrentOwner.current && ReactCurrentOwner.current.getName() || 'ReactCompositeComponent') : undefined;
-       
-           !(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE || container.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'unmountComponentAtNode(...): Target container is not a DOM element.') : invariant(false) : undefined;
+         }
        
-           var reactRootID = getReactRootID(container);
-           var component = instancesByReactRootID[reactRootID];
-           if (!component) {
-             // Check if the node being unmounted was rendered by React, but isn't a
-             // root node.
-             var containerHasNonRootReactChild = hasNonRootReactChild(container);
+       };
        
-             // Check if the container itself is a React root node.
-             var containerID = internalGetID(container);
-             var isContainerReactRoot = containerID && containerID === ReactInstanceHandles.getReactRootIDFromNodeID(containerID);
+       module.exports = ReactClass;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
+
+/***/ },
+/* 24 */
+/***/ function(module, exports, __webpack_require__) {
+
+       /**
+        * Copyright 2013-present, 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.
+        *
+        * @providesModule ReactPropTypeLocations
+        */
        
-             if (process.env.NODE_ENV !== 'production') {
-               process.env.NODE_ENV !== 'production' ? warning(!containerHasNonRootReactChild, 'unmountComponentAtNode(): The node you\'re attempting to unmount ' + 'was rendered by React and is not a top-level container. %s', isContainerReactRoot ? 'You may have accidentally passed in a React root node instead ' + 'of its container.' : 'Instead, have the parent component update its state and ' + 'rerender in order to remove this component.') : undefined;
-             }
+       'use strict';
        
-             return false;
-           }
-           ReactUpdates.batchedUpdates(unmountComponentFromNode, component, container);
-           delete instancesByReactRootID[reactRootID];
-           delete containersByReactRootID[reactRootID];
-           if (process.env.NODE_ENV !== 'production') {
-             delete rootElementsByReactRootID[reactRootID];
-           }
-           return true;
-         },
+       var keyMirror = __webpack_require__(25);
        
-         /**
-          * Finds the container DOM element that contains React component to which the
-          * supplied DOM `id` belongs.
-          *
-          * @param {string} id The ID of an element rendered by a React component.
-          * @return {?DOMElement} DOM element that contains the `id`.
-          */
-         findReactContainerForID: function (id) {
-           var reactRootID = ReactInstanceHandles.getReactRootIDFromNodeID(id);
-           var container = containersByReactRootID[reactRootID];
+       var ReactPropTypeLocations = keyMirror({
+         prop: null,
+         context: null,
+         childContext: null
+       });
        
-           if (process.env.NODE_ENV !== 'production') {
-             var rootElement = rootElementsByReactRootID[reactRootID];
-             if (rootElement && rootElement.parentNode !== container) {
-               process.env.NODE_ENV !== 'production' ? warning(
-               // Call internalGetID here because getID calls isValid which calls
-               // findReactContainerForID (this function).
-               internalGetID(rootElement) === reactRootID, 'ReactMount: Root element ID differed from reactRootID.') : undefined;
-               var containerChild = container.firstChild;
-               if (containerChild && reactRootID === internalGetID(containerChild)) {
-                 // If the container has a new child with the same ID as the old
-                 // root element, then rootElementsByReactRootID[reactRootID] is
-                 // just stale and needs to be updated. The case that deserves a
-                 // warning is when the container is empty.
-                 rootElementsByReactRootID[reactRootID] = containerChild;
-               } else {
-                 process.env.NODE_ENV !== 'production' ? warning(false, 'ReactMount: Root element has been removed from its original ' + 'container. New container: %s', rootElement.parentNode) : undefined;
-               }
-             }
-           }
-       
-           return container;
-         },
-       
-         /**
-          * Finds an element rendered by React with the supplied ID.
-          *
-          * @param {string} id ID of a DOM node in the React component.
-          * @return {DOMElement} Root DOM node of the React component.
-          */
-         findReactNodeByID: function (id) {
-           var reactRoot = ReactMount.findReactContainerForID(id);
-           return ReactMount.findComponentRoot(reactRoot, id);
-         },
-       
-         /**
-          * Traverses up the ancestors of the supplied node to find a node that is a
-          * DOM representation of a React component rendered by this copy of React.
-          *
-          * @param {*} node
-          * @return {?DOMEventTarget}
-          * @internal
-          */
-         getFirstReactDOM: function (node) {
-           return findFirstReactDOMImpl(node);
-         },
-       
-         /**
-          * Finds a node with the supplied `targetID` inside of the supplied
-          * `ancestorNode`.  Exploits the ID naming scheme to perform the search
-          * quickly.
-          *
-          * @param {DOMEventTarget} ancestorNode Search from this root.
-          * @pararm {string} targetID ID of the DOM representation of the component.
-          * @return {DOMEventTarget} DOM node with the supplied `targetID`.
-          * @internal
-          */
-         findComponentRoot: function (ancestorNode, targetID) {
-           var firstChildren = findComponentRootReusableArray;
-           var childIndex = 0;
-       
-           var deepestAncestor = findDeepestCachedAncestor(targetID) || ancestorNode;
-       
-           if (process.env.NODE_ENV !== 'production') {
-             // This will throw on the next line; give an early warning
-             process.env.NODE_ENV !== 'production' ? warning(deepestAncestor != null, 'React can\'t find the root component node for data-reactid value ' + '`%s`. If you\'re seeing this message, it probably means that ' + 'you\'ve loaded two copies of React on the page. At this time, only ' + 'a single copy of React can be loaded at a time.', targetID) : undefined;
-           }
-       
-           firstChildren[0] = deepestAncestor.firstChild;
-           firstChildren.length = 1;
-       
-           while (childIndex < firstChildren.length) {
-             var child = firstChildren[childIndex++];
-             var targetChild;
-       
-             while (child) {
-               var childID = ReactMount.getID(child);
-               if (childID) {
-                 // Even if we find the node we're looking for, we finish looping
-                 // through its siblings to ensure they're cached so that we don't have
-                 // to revisit this node again. Otherwise, we make n^2 calls to getID
-                 // when visiting the many children of a single node in order.
-       
-                 if (targetID === childID) {
-                   targetChild = child;
-                 } else if (ReactInstanceHandles.isAncestorIDOf(childID, targetID)) {
-                   // If we find a child whose ID is an ancestor of the given ID,
-                   // then we can be sure that we only want to search the subtree
-                   // rooted at this child, so we can throw out the rest of the
-                   // search state.
-                   firstChildren.length = childIndex = 0;
-                   firstChildren.push(child.firstChild);
-                 }
-               } else {
-                 // If this child had no ID, then there's a chance that it was
-                 // injected automatically by the browser, as when a `<table>`
-                 // element sprouts an extra `<tbody>` child as a side effect of
-                 // `.innerHTML` parsing. Optimistically continue down this
-                 // branch, but not before examining the other siblings.
-                 firstChildren.push(child.firstChild);
-               }
+       module.exports = ReactPropTypeLocations;
+
+/***/ },
+/* 25 */
+/***/ function(module, exports, __webpack_require__) {
+
+       /* WEBPACK VAR INJECTION */(function(process) {/**
+        * Copyright (c) 2013-present, 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.
+        *
+        * @typechecks static-only
+        */
        
-               child = child.nextSibling;
-             }
+       'use strict';
        
-             if (targetChild) {
-               // Emptying firstChildren/findComponentRootReusableArray is
-               // not necessary for correctness, but it helps the GC reclaim
-               // any nodes that were left at the end of the search.
-               firstChildren.length = 0;
+       var invariant = __webpack_require__(10);
        
-               return targetChild;
-             }
+       /**
+        * Constructs an enumeration with keys equal to their value.
+        *
+        * For example:
+        *
+        *   var COLORS = keyMirror({blue: null, red: null});
+        *   var myColor = COLORS.blue;
+        *   var isColorValid = !!COLORS[myColor];
+        *
+        * The last line could not be performed if the values of the generated enum were
+        * not equal to their keys.
+        *
+        *   Input:  {key1: val1, key2: val2}
+        *   Output: {key1: key1, key2: key2}
+        *
+        * @param {object} obj
+        * @return {object}
+        */
+       var keyMirror = function keyMirror(obj) {
+         var ret = {};
+         var key;
+         !(obj instanceof Object && !Array.isArray(obj)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'keyMirror(...): Argument must be an object.') : invariant(false) : void 0;
+         for (key in obj) {
+           if (!obj.hasOwnProperty(key)) {
+             continue;
            }
+           ret[key] = key;
+         }
+         return ret;
+       };
        
-           firstChildren.length = 0;
-       
-            true ? process.env.NODE_ENV !== 'production' ? invariant(false, 'findComponentRoot(..., %s): Unable to find element. This probably ' + 'means the DOM was unexpectedly mutated (e.g., by the browser), ' + 'usually due to forgetting a <tbody> when using tables, nesting tags ' + 'like <form>, <p>, or <a>, or using non-SVG elements in an <svg> ' + 'parent. ' + 'Try inspecting the child nodes of the element with React ID `%s`.', targetID, ReactMount.getID(ancestorNode)) : invariant(false) : undefined;
-         },
-       
-         _mountImageIntoNode: function (markup, container, shouldReuseMarkup, transaction) {
-           !(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE || container.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'mountComponentIntoNode(...): Target container is not valid.') : invariant(false) : undefined;
-       
-           if (shouldReuseMarkup) {
-             var rootElement = getReactRootElementInContainer(container);
-             if (ReactMarkupChecksum.canReuseMarkup(markup, rootElement)) {
-               return;
-             } else {
-               var checksum = rootElement.getAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME);
-               rootElement.removeAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME);
-       
-               var rootMarkup = rootElement.outerHTML;
-               rootElement.setAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME, checksum);
+       module.exports = keyMirror;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
+
+/***/ },
+/* 26 */
+/***/ function(module, exports, __webpack_require__) {
+
+       /* WEBPACK VAR INJECTION */(function(process) {/**
+        * Copyright 2013-present, 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.
+        *
+        * @providesModule ReactPropTypeLocationNames
+        */
        
-               var normalizedMarkup = markup;
-               if (process.env.NODE_ENV !== 'production') {
-                 // because rootMarkup is retrieved from the DOM, various normalizations
-                 // will have occurred which will not be present in `markup`. Here,
-                 // insert markup into a <div> or <iframe> depending on the container
-                 // type to perform the same normalizations before comparing.
-                 var normalizer;
-                 if (container.nodeType === ELEMENT_NODE_TYPE) {
-                   normalizer = document.createElement('div');
-                   normalizer.innerHTML = markup;
-                   normalizedMarkup = normalizer.innerHTML;
-                 } else {
-                   normalizer = document.createElement('iframe');
-                   document.body.appendChild(normalizer);
-                   normalizer.contentDocument.write(markup);
-                   normalizedMarkup = normalizer.contentDocument.documentElement.outerHTML;
-                   document.body.removeChild(normalizer);
-                 }
-               }
+       'use strict';
        
-               var diffIndex = firstDifferenceIndex(normalizedMarkup, rootMarkup);
-               var difference = ' (client) ' + normalizedMarkup.substring(diffIndex - 20, diffIndex + 20) + '\n (server) ' + rootMarkup.substring(diffIndex - 20, diffIndex + 20);
+       var ReactPropTypeLocationNames = {};
        
-               !(container.nodeType !== DOC_NODE_TYPE) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'You\'re trying to render a component to the document using ' + 'server rendering but the checksum was invalid. This usually ' + 'means you rendered a different component type or props on ' + 'the client from the one on the server, or your render() ' + 'methods are impure. React cannot handle this case due to ' + 'cross-browser quirks by rendering at the document root. You ' + 'should look for environment dependent code in your components ' + 'and ensure the props are the same client and server side:\n%s', difference) : invariant(false) : undefined;
+       if (process.env.NODE_ENV !== 'production') {
+         ReactPropTypeLocationNames = {
+           prop: 'prop',
+           context: 'context',
+           childContext: 'child context'
+         };
+       }
        
-               if (process.env.NODE_ENV !== 'production') {
-                 process.env.NODE_ENV !== 'production' ? warning(false, 'React attempted to reuse markup in a container but the ' + 'checksum was invalid. This generally means that you are ' + 'using server rendering and the markup generated on the ' + 'server was not what the client was expecting. React injected ' + 'new markup to compensate which works but you have lost many ' + 'of the benefits of server rendering. Instead, figure out ' + 'why the markup being generated is different on the client ' + 'or server:\n%s', difference) : undefined;
-               }
-             }
-           }
+       module.exports = ReactPropTypeLocationNames;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
+
+/***/ },
+/* 27 */
+/***/ function(module, exports) {
+
+       "use strict";
        
-           !(container.nodeType !== DOC_NODE_TYPE) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'You\'re trying to render a component to the document but ' + 'you didn\'t use server rendering. We can\'t do this ' + 'without using server rendering due to cross-browser quirks. ' + 'See ReactDOMServer.renderToString() for server rendering.') : invariant(false) : undefined;
+       /**
+        * Copyright (c) 2013-present, 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.
+        *
+        */
        
-           if (transaction.useCreateElement) {
-             while (container.lastChild) {
-               container.removeChild(container.lastChild);
-             }
-             container.appendChild(markup);
-           } else {
-             setInnerHTML(container, markup);
+       /**
+        * Allows extraction of a minified key. Let's the build system minify keys
+        * without losing the ability to dynamically use key strings as values
+        * themselves. Pass in an object with a single key/val pair and it will return
+        * you the string key of that single record. Suppose you want to grab the
+        * value for a key 'className' inside of an object. Key/val minification may
+        * have aliased that key to be 'xa12'. keyOf({className: null}) will return
+        * 'xa12' in that case. Resolve keys you want to use once at startup time, then
+        * reuse those resolutions.
+        */
+       var keyOf = function keyOf(oneKeyObj) {
+         var key;
+         for (key in oneKeyObj) {
+           if (!oneKeyObj.hasOwnProperty(key)) {
+             continue;
            }
-         },
-       
-         ownerDocumentContextKey: ownerDocumentContextKey,
-       
-         /**
-          * React ID utilities.
-          */
-       
-         getReactRootID: getReactRootID,
-       
-         getID: getID,
-       
-         setID: setID,
-       
-         getNode: getNode,
-       
-         getNodeFromInstance: getNodeFromInstance,
-       
-         isValid: isValid,
-       
-         purgeID: purgeID
+           return key;
+         }
+         return null;
        };
        
-       ReactPerf.measureMethods(ReactMount, 'ReactMount', {
-         _renderNewRootComponent: '_renderNewRootComponent',
-         _mountImageIntoNode: '_mountImageIntoNode'
-       });
-       
-       module.exports = ReactMount;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
+       module.exports = keyOf;
 
 /***/ },
-/* 31 */
+/* 28 */
 /***/ function(module, exports, __webpack_require__) {
 
-       /**
-        * Copyright 2013-2015, Facebook, Inc.
+       /* WEBPACK VAR INJECTION */(function(process) {/**
+        * Copyright 2013-present, 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.
         *
-        * @providesModule ReactBrowserEventEmitter
-        * @typechecks static-only
+        * @providesModule ReactDOMFactories
         */
        
        'use strict';
        
-       var EventConstants = __webpack_require__(32);
-       var EventPluginHub = __webpack_require__(33);
-       var EventPluginRegistry = __webpack_require__(34);
-       var ReactEventEmitterMixin = __webpack_require__(39);
-       var ReactPerf = __webpack_require__(20);
-       var ViewportMetrics = __webpack_require__(40);
+       var ReactElement = __webpack_require__(11);
        
-       var assign = __webpack_require__(41);
-       var isEventSupported = __webpack_require__(42);
+       var mapObject = __webpack_require__(29);
        
        /**
-        * Summary of `ReactBrowserEventEmitter` event handling:
-        *
-        *  - Top-level delegation is used to trap most native browser events. This
-        *    may only occur in the main thread and is the responsibility of
-        *    ReactEventListener, which is injected and can therefore support pluggable
-        *    event sources. This is the only work that occurs in the main thread.
-        *
-        *  - We normalize and de-duplicate events to account for browser quirks. This
-        *    may be done in the worker thread.
-        *
-        *  - Forward these native events (with the associated top-level type used to
-        *    trap it) to `EventPluginHub`, which in turn will ask plugins if they want
-        *    to extract any synthetic events.
-        *
-        *  - The `EventPluginHub` will then process each event by annotating them with
-        *    "dispatches", a sequence of listeners and IDs that care about that event.
-        *
-        *  - The `EventPluginHub` then dispatches the events.
-        *
-        * Overview of React and the event system:
+        * Create a factory that creates HTML tag elements.
         *
-        * +------------+    .
-        * |    DOM     |    .
-        * +------------+    .
-        *       |           .
-        *       v           .
-        * +------------+    .
-        * | ReactEvent |    .
-        * |  Listener  |    .
-        * +------------+    .                         +-----------+
-        *       |           .               +--------+|SimpleEvent|
-        *       |           .               |         |Plugin     |
-        * +-----|------+    .               v         +-----------+
-        * |     |      |    .    +--------------+                    +------------+
-        * |     +-----------.--->|EventPluginHub|                    |    Event   |
-        * |            |    .    |              |     +-----------+  | Propagators|
-        * | ReactEvent |    .    |              |     |TapEvent   |  |------------|
-        * |  Emitter   |    .    |              |<---+|Plugin     |  |other plugin|
-        * |            |    .    |              |     +-----------+  |  utilities |
-        * |     +-----------.--->|              |                    +------------+
-        * |     |      |    .    +--------------+
-        * +-----|------+    .                ^        +-----------+
-        *       |           .                |        |Enter/Leave|
-        *       +           .                +-------+|Plugin     |
-        * +-------------+   .                         +-----------+
-        * | application |   .
-        * |-------------|   .
-        * |             |   .
-        * |             |   .
-        * +-------------+   .
-        *                   .
-        *    React Core     .  General Purpose Event Plugin System
+        * @param {string} tag Tag name (e.g. `div`).
+        * @private
         */
-       
-       var alreadyListeningTo = {};
-       var isMonitoringScrollValue = false;
-       var reactTopListenersCounter = 0;
-       
-       // For events like 'submit' which don't consistently bubble (which we trap at a
-       // lower node than `document`), binding at `document` would cause duplicate
-       // events so we don't include them here
-       var topEventMapping = {
-         topAbort: 'abort',
-         topBlur: 'blur',
-         topCanPlay: 'canplay',
-         topCanPlayThrough: 'canplaythrough',
-         topChange: 'change',
-         topClick: 'click',
-         topCompositionEnd: 'compositionend',
-         topCompositionStart: 'compositionstart',
-         topCompositionUpdate: 'compositionupdate',
-         topContextMenu: 'contextmenu',
-         topCopy: 'copy',
-         topCut: 'cut',
-         topDoubleClick: 'dblclick',
-         topDrag: 'drag',
-         topDragEnd: 'dragend',
-         topDragEnter: 'dragenter',
-         topDragExit: 'dragexit',
-         topDragLeave: 'dragleave',
-         topDragOver: 'dragover',
-         topDragStart: 'dragstart',
-         topDrop: 'drop',
-         topDurationChange: 'durationchange',
-         topEmptied: 'emptied',
-         topEncrypted: 'encrypted',
-         topEnded: 'ended',
-         topError: 'error',
-         topFocus: 'focus',
-         topInput: 'input',
-         topKeyDown: 'keydown',
-         topKeyPress: 'keypress',
-         topKeyUp: 'keyup',
-         topLoadedData: 'loadeddata',
-         topLoadedMetadata: 'loadedmetadata',
-         topLoadStart: 'loadstart',
-         topMouseDown: 'mousedown',
-         topMouseMove: 'mousemove',
-         topMouseOut: 'mouseout',
-         topMouseOver: 'mouseover',
-         topMouseUp: 'mouseup',
-         topPaste: 'paste',
-         topPause: 'pause',
-         topPlay: 'play',
-         topPlaying: 'playing',
-         topProgress: 'progress',
-         topRateChange: 'ratechange',
-         topScroll: 'scroll',
-         topSeeked: 'seeked',
-         topSeeking: 'seeking',
-         topSelectionChange: 'selectionchange',
-         topStalled: 'stalled',
-         topSuspend: 'suspend',
-         topTextInput: 'textInput',
-         topTimeUpdate: 'timeupdate',
-         topTouchCancel: 'touchcancel',
-         topTouchEnd: 'touchend',
-         topTouchMove: 'touchmove',
-         topTouchStart: 'touchstart',
-         topVolumeChange: 'volumechange',
-         topWaiting: 'waiting',
-         topWheel: 'wheel'
-       };
+       function createDOMFactory(tag) {
+         if (process.env.NODE_ENV !== 'production') {
+           var ReactElementValidator = __webpack_require__(30);
+           return ReactElementValidator.createFactory(tag);
+         }
+         return ReactElement.createFactory(tag);
+       }
        
        /**
-        * To ensure no conflicts with other potential React instances on the page
+        * Creates a mapping from supported HTML tags to `ReactDOMComponent` classes.
+        * This is also accessible via `React.DOM`.
+        *
+        * @public
         */
-       var topListenersIDKey = '_reactListenersID' + String(Math.random()).slice(2);
+       var ReactDOMFactories = mapObject({
+         a: 'a',
+         abbr: 'abbr',
+         address: 'address',
+         area: 'area',
+         article: 'article',
+         aside: 'aside',
+         audio: 'audio',
+         b: 'b',
+         base: 'base',
+         bdi: 'bdi',
+         bdo: 'bdo',
+         big: 'big',
+         blockquote: 'blockquote',
+         body: 'body',
+         br: 'br',
+         button: 'button',
+         canvas: 'canvas',
+         caption: 'caption',
+         cite: 'cite',
+         code: 'code',
+         col: 'col',
+         colgroup: 'colgroup',
+         data: 'data',
+         datalist: 'datalist',
+         dd: 'dd',
+         del: 'del',
+         details: 'details',
+         dfn: 'dfn',
+         dialog: 'dialog',
+         div: 'div',
+         dl: 'dl',
+         dt: 'dt',
+         em: 'em',
+         embed: 'embed',
+         fieldset: 'fieldset',
+         figcaption: 'figcaption',
+         figure: 'figure',
+         footer: 'footer',
+         form: 'form',
+         h1: 'h1',
+         h2: 'h2',
+         h3: 'h3',
+         h4: 'h4',
+         h5: 'h5',
+         h6: 'h6',
+         head: 'head',
+         header: 'header',
+         hgroup: 'hgroup',
+         hr: 'hr',
+         html: 'html',
+         i: 'i',
+         iframe: 'iframe',
+         img: 'img',
+         input: 'input',
+         ins: 'ins',
+         kbd: 'kbd',
+         keygen: 'keygen',
+         label: 'label',
+         legend: 'legend',
+         li: 'li',
+         link: 'link',
+         main: 'main',
+         map: 'map',
+         mark: 'mark',
+         menu: 'menu',
+         menuitem: 'menuitem',
+         meta: 'meta',
+         meter: 'meter',
+         nav: 'nav',
+         noscript: 'noscript',
+         object: 'object',
+         ol: 'ol',
+         optgroup: 'optgroup',
+         option: 'option',
+         output: 'output',
+         p: 'p',
+         param: 'param',
+         picture: 'picture',
+         pre: 'pre',
+         progress: 'progress',
+         q: 'q',
+         rp: 'rp',
+         rt: 'rt',
+         ruby: 'ruby',
+         s: 's',
+         samp: 'samp',
+         script: 'script',
+         section: 'section',
+         select: 'select',
+         small: 'small',
+         source: 'source',
+         span: 'span',
+         strong: 'strong',
+         style: 'style',
+         sub: 'sub',
+         summary: 'summary',
+         sup: 'sup',
+         table: 'table',
+         tbody: 'tbody',
+         td: 'td',
+         textarea: 'textarea',
+         tfoot: 'tfoot',
+         th: 'th',
+         thead: 'thead',
+         time: 'time',
+         title: 'title',
+         tr: 'tr',
+         track: 'track',
+         u: 'u',
+         ul: 'ul',
+         'var': 'var',
+         video: 'video',
+         wbr: 'wbr',
        
-       function getListeningForDocument(mountAt) {
-         // In IE8, `mountAt` is a host object and doesn't have `hasOwnProperty`
-         // directly.
-         if (!Object.prototype.hasOwnProperty.call(mountAt, topListenersIDKey)) {
-           mountAt[topListenersIDKey] = reactTopListenersCounter++;
-           alreadyListeningTo[mountAt[topListenersIDKey]] = {};
-         }
-         return alreadyListeningTo[mountAt[topListenersIDKey]];
-       }
+         // SVG
+         circle: 'circle',
+         clipPath: 'clipPath',
+         defs: 'defs',
+         ellipse: 'ellipse',
+         g: 'g',
+         image: 'image',
+         line: 'line',
+         linearGradient: 'linearGradient',
+         mask: 'mask',
+         path: 'path',
+         pattern: 'pattern',
+         polygon: 'polygon',
+         polyline: 'polyline',
+         radialGradient: 'radialGradient',
+         rect: 'rect',
+         stop: 'stop',
+         svg: 'svg',
+         text: 'text',
+         tspan: 'tspan'
+       
+       }, createDOMFactory);
        
+       module.exports = ReactDOMFactories;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
+
+/***/ },
+/* 29 */
+/***/ function(module, exports) {
+
        /**
-        * `ReactBrowserEventEmitter` is used to attach top-level event listeners. For
-        * example:
-        *
-        *   ReactBrowserEventEmitter.putListener('myID', 'onClick', myFunction);
+        * Copyright (c) 2013-present, Facebook, Inc.
+        * All rights reserved.
         *
-        * This would allocate a "registration" of `('onClick', myFunction)` on 'myID'.
+        * 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.
         *
-        * @internal
         */
-       var ReactBrowserEventEmitter = assign({}, ReactEventEmitterMixin, {
        
-         /**
-          * Injectable event backend
-          */
-         ReactEventListener: null,
+       'use strict';
        
-         injection: {
-           /**
-            * @param {object} ReactEventListener
-            */
-           injectReactEventListener: function (ReactEventListener) {
-             ReactEventListener.setHandleTopLevel(ReactBrowserEventEmitter.handleTopLevel);
-             ReactBrowserEventEmitter.ReactEventListener = ReactEventListener;
-           }
-         },
+       var hasOwnProperty = Object.prototype.hasOwnProperty;
        
-         /**
-          * Sets whether or not any created callbacks should be enabled.
-          *
-          * @param {boolean} enabled True if callbacks should be enabled.
-          */
-         setEnabled: function (enabled) {
-           if (ReactBrowserEventEmitter.ReactEventListener) {
-             ReactBrowserEventEmitter.ReactEventListener.setEnabled(enabled);
+       /**
+        * Executes the provided `callback` once for each enumerable own property in the
+        * object and constructs a new object from the results. The `callback` is
+        * invoked with three arguments:
+        *
+        *  - the property value
+        *  - the property name
+        *  - the object being traversed
+        *
+        * Properties that are added after the call to `mapObject` will not be visited
+        * by `callback`. If the values of existing properties are changed, the value
+        * passed to `callback` will be the value at the time `mapObject` visits them.
+        * Properties that are deleted before being visited are not visited.
+        *
+        * @grep function objectMap()
+        * @grep function objMap()
+        *
+        * @param {?object} object
+        * @param {function} callback
+        * @param {*} context
+        * @return {?object}
+        */
+       function mapObject(object, callback, context) {
+         if (!object) {
+           return null;
+         }
+         var result = {};
+         for (var name in object) {
+           if (hasOwnProperty.call(object, name)) {
+             result[name] = callback.call(context, object[name], name, object);
            }
-         },
+         }
+         return result;
+       }
        
-         /**
-          * @return {boolean} True if callbacks are enabled.
-          */
-         isEnabled: function () {
-           return !!(ReactBrowserEventEmitter.ReactEventListener && ReactBrowserEventEmitter.ReactEventListener.isEnabled());
-         },
+       module.exports = mapObject;
+
+/***/ },
+/* 30 */
+/***/ function(module, exports, __webpack_require__) {
+
+       /* WEBPACK VAR INJECTION */(function(process) {/**
+        * Copyright 2014-present, 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.
+        *
+        * @providesModule ReactElementValidator
+        */
        
-         /**
-          * We listen for bubbled touch events on the document object.
-          *
-          * Firefox v8.01 (and possibly others) exhibited strange behavior when
-          * mounting `onmousemove` events at some node that was not the document
-          * element. The symptoms were that if your mouse is not moving over something
-          * contained within that mount point (for example on the background) the
-          * top-level listeners for `onmousemove` won't be called. However, if you
-          * register the `mousemove` on the document object, then it will of course
-          * catch all `mousemove`s. This along with iOS quirks, justifies restricting
-          * top-level listeners to the document object only, at least for these
-          * movement types of events and possibly all events.
-          *
-          * @see http://www.quirksmode.org/blog/archives/2010/09/click_event_del.html
-          *
-          * Also, `keyup`/`keypress`/`keydown` do not bubble to the window on IE, but
-          * they bubble to document.
-          *
-          * @param {string} registrationName Name of listener (e.g. `onClick`).
-          * @param {object} contentDocumentHandle Document which owns the container
-          */
-         listenTo: function (registrationName, contentDocumentHandle) {
-           var mountAt = contentDocumentHandle;
-           var isListening = getListeningForDocument(mountAt);
-           var dependencies = EventPluginRegistry.registrationNameDependencies[registrationName];
+       /**
+        * ReactElementValidator provides a wrapper around a element factory
+        * which validates the props passed to the element. This is intended to be
+        * used only in DEV and could be replaced by a static type checker for languages
+        * that support it.
+        */
        
-           var topLevelTypes = EventConstants.topLevelTypes;
-           for (var i = 0; i < dependencies.length; i++) {
-             var dependency = dependencies[i];
-             if (!(isListening.hasOwnProperty(dependency) && isListening[dependency])) {
-               if (dependency === topLevelTypes.topWheel) {
-                 if (isEventSupported('wheel')) {
-                   ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topWheel, 'wheel', mountAt);
-                 } else if (isEventSupported('mousewheel')) {
-                   ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topWheel, 'mousewheel', mountAt);
-                 } else {
-                   // Firefox needs to capture a different mouse scroll event.
-                   // @see http://www.quirksmode.org/dom/events/tests/scroll.html
-                   ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topWheel, 'DOMMouseScroll', mountAt);
-                 }
-               } else if (dependency === topLevelTypes.topScroll) {
+       'use strict';
        
-                 if (isEventSupported('scroll', true)) {
-                   ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelTypes.topScroll, 'scroll', mountAt);
-                 } else {
-                   ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topScroll, 'scroll', ReactBrowserEventEmitter.ReactEventListener.WINDOW_HANDLE);
-                 }
-               } else if (dependency === topLevelTypes.topFocus || dependency === topLevelTypes.topBlur) {
+       var ReactCurrentOwner = __webpack_require__(12);
+       var ReactComponentTreeDevtool = __webpack_require__(31);
+       var ReactElement = __webpack_require__(11);
+       var ReactPropTypeLocations = __webpack_require__(24);
        
-                 if (isEventSupported('focus', true)) {
-                   ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelTypes.topFocus, 'focus', mountAt);
-                   ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelTypes.topBlur, 'blur', mountAt);
-                 } else if (isEventSupported('focusin')) {
-                   // IE has `focusin` and `focusout` events which bubble.
-                   // @see http://www.quirksmode.org/blog/archives/2008/04/delegating_the.html
-                   ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topFocus, 'focusin', mountAt);
-                   ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topBlur, 'focusout', mountAt);
-                 }
+       var checkReactTypeSpec = __webpack_require__(32);
        
-                 // to make sure blur and focus event listeners are only attached once
-                 isListening[topLevelTypes.topBlur] = true;
-                 isListening[topLevelTypes.topFocus] = true;
-               } else if (topEventMapping.hasOwnProperty(dependency)) {
-                 ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(dependency, topEventMapping[dependency], mountAt);
-               }
+       var canDefineProperty = __webpack_require__(15);
+       var getIteratorFn = __webpack_require__(17);
+       var warning = __webpack_require__(13);
        
-               isListening[dependency] = true;
-             }
+       function getDeclarationErrorAddendum() {
+         if (ReactCurrentOwner.current) {
+           var name = ReactCurrentOwner.current.getName();
+           if (name) {
+             return ' Check the render method of `' + name + '`.';
            }
-         },
+         }
+         return '';
+       }
        
-         trapBubbledEvent: function (topLevelType, handlerBaseName, handle) {
-           return ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelType, handlerBaseName, handle);
-         },
+       /**
+        * Warn if there's no key explicitly set on dynamic arrays of children or
+        * object keys are not valid. This allows us to keep track of children between
+        * updates.
+        */
+       var ownerHasKeyUseWarning = {};
        
-         trapCapturedEvent: function (topLevelType, handlerBaseName, handle) {
-           return ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelType, handlerBaseName, handle);
-         },
+       function getCurrentComponentErrorInfo(parentType) {
+         var info = getDeclarationErrorAddendum();
        
-         /**
-          * Listens to window scroll and resize events. We cache scroll values so that
-          * application code can access them without triggering reflows.
-          *
-          * NOTE: Scroll events do not bubble.
-          *
-          * @see http://www.quirksmode.org/dom/events/scroll.html
-          */
-         ensureScrollValueMonitoring: function () {
-           if (!isMonitoringScrollValue) {
-             var refresh = ViewportMetrics.refreshScrollValues;
-             ReactBrowserEventEmitter.ReactEventListener.monitorScrollValue(refresh);
-             isMonitoringScrollValue = true;
+         if (!info) {
+           var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;
+           if (parentName) {
+             info = ' Check the top-level render call using <' + parentName + '>.';
            }
-         },
-       
-         eventNameDispatchConfigs: EventPluginHub.eventNameDispatchConfigs,
-       
-         registrationNameModules: EventPluginHub.registrationNameModules,
-       
-         putListener: EventPluginHub.putListener,
+         }
+         return info;
+       }
        
-         getListener: EventPluginHub.getListener,
+       /**
+        * Warn if the element doesn't have an explicit key assigned to it.
+        * This element is in an array. The array could grow and shrink or be
+        * reordered. All children that haven't already been validated are required to
+        * have a "key" property assigned to it. Error statuses are cached so a warning
+        * will only be shown once.
+        *
+        * @internal
+        * @param {ReactElement} element Element that requires a key.
+        * @param {*} parentType element's parent's type.
+        */
+       function validateExplicitKey(element, parentType) {
+         if (!element._store || element._store.validated || element.key != null) {
+           return;
+         }
+         element._store.validated = true;
        
-         deleteListener: EventPluginHub.deleteListener,
+         var memoizer = ownerHasKeyUseWarning.uniqueKey || (ownerHasKeyUseWarning.uniqueKey = {});
        
-         deleteAllListeners: EventPluginHub.deleteAllListeners
+         var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);
+         if (memoizer[currentComponentErrorInfo]) {
+           return;
+         }
+         memoizer[currentComponentErrorInfo] = true;
        
-       });
+         // Usually the current owner is the offender, but if it accepts children as a
+         // property, it may be the creator of the child that's responsible for
+         // assigning it a key.
+         var childOwner = '';
+         if (element && element._owner && element._owner !== ReactCurrentOwner.current) {
+           // Give the component that originally created this child.
+           childOwner = ' It was passed a child from ' + element._owner.getName() + '.';
+         }
        
-       ReactPerf.measureMethods(ReactBrowserEventEmitter, 'ReactBrowserEventEmitter', {
-         putListener: 'putListener',
-         deleteListener: 'deleteListener'
-       });
+         process.env.NODE_ENV !== 'production' ? warning(false, 'Each child in an array or iterator should have a unique "key" prop.' + '%s%s See https://fb.me/react-warning-keys for more information.%s', currentComponentErrorInfo, childOwner, ReactComponentTreeDevtool.getCurrentStackAddendum(element)) : void 0;
+       }
        
-       module.exports = ReactBrowserEventEmitter;
-
-/***/ },
-/* 32 */
-/***/ 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.
+        * Ensure that every element either is passed in a static location, in an
+        * array with an explicit keys property defined, or in an object literal
+        * with valid key property.
         *
-        * @providesModule EventConstants
+        * @internal
+        * @param {ReactNode} node Statically passed child of any type.
+        * @param {*} parentType node's parent's type.
         */
-       
-       'use strict';
-       
-       var keyMirror = __webpack_require__(19);
-       
-       var PropagationPhases = keyMirror({ bubbled: null, captured: null });
+       function validateChildKeys(node, parentType) {
+         if (typeof node !== 'object') {
+           return;
+         }
+         if (Array.isArray(node)) {
+           for (var i = 0; i < node.length; i++) {
+             var child = node[i];
+             if (ReactElement.isValidElement(child)) {
+               validateExplicitKey(child, parentType);
+             }
+           }
+         } else if (ReactElement.isValidElement(node)) {
+           // This element was passed in a valid location.
+           if (node._store) {
+             node._store.validated = true;
+           }
+         } else if (node) {
+           var iteratorFn = getIteratorFn(node);
+           // Entry iterators provide implicit keys.
+           if (iteratorFn) {
+             if (iteratorFn !== node.entries) {
+               var iterator = iteratorFn.call(node);
+               var step;
+               while (!(step = iterator.next()).done) {
+                 if (ReactElement.isValidElement(step.value)) {
+                   validateExplicitKey(step.value, parentType);
+                 }
+               }
+             }
+           }
+         }
+       }
        
        /**
-        * Types of raw signals from the browser caught at the top level.
+        * Given an element, validate that its props follow the propTypes definition,
+        * provided by the type.
+        *
+        * @param {ReactElement} element
         */
-       var topLevelTypes = keyMirror({
-         topAbort: null,
-         topBlur: null,
-         topCanPlay: null,
-         topCanPlayThrough: null,
-         topChange: null,
-         topClick: null,
-         topCompositionEnd: null,
-         topCompositionStart: null,
-         topCompositionUpdate: null,
-         topContextMenu: null,
-         topCopy: null,
-         topCut: null,
-         topDoubleClick: null,
-         topDrag: null,
-         topDragEnd: null,
-         topDragEnter: null,
-         topDragExit: null,
-         topDragLeave: null,
-         topDragOver: null,
-         topDragStart: null,
-         topDrop: null,
-         topDurationChange: null,
-         topEmptied: null,
-         topEncrypted: null,
-         topEnded: null,
-         topError: null,
-         topFocus: null,
-         topInput: null,
-         topKeyDown: null,
-         topKeyPress: null,
-         topKeyUp: null,
-         topLoad: null,
-         topLoadedData: null,
-         topLoadedMetadata: null,
-         topLoadStart: null,
-         topMouseDown: null,
-         topMouseMove: null,
-         topMouseOut: null,
-         topMouseOver: null,
-         topMouseUp: null,
-         topPaste: null,
-         topPause: null,
-         topPlay: null,
-         topPlaying: null,
-         topProgress: null,
-         topRateChange: null,
-         topReset: null,
-         topScroll: null,
-         topSeeked: null,
-         topSeeking: null,
-         topSelectionChange: null,
-         topStalled: null,
-         topSubmit: null,
-         topSuspend: null,
-         topTextInput: null,
-         topTimeUpdate: null,
-         topTouchCancel: null,
-         topTouchEnd: null,
-         topTouchMove: null,
-         topTouchStart: null,
-         topVolumeChange: null,
-         topWaiting: null,
-         topWheel: null
-       });
+       function validatePropTypes(element) {
+         var componentClass = element.type;
+         if (typeof componentClass !== 'function') {
+           return;
+         }
+         var name = componentClass.displayName || componentClass.name;
+         if (componentClass.propTypes) {
+           checkReactTypeSpec(componentClass.propTypes, element.props, ReactPropTypeLocations.prop, name, element, null);
+         }
+         if (typeof componentClass.getDefaultProps === 'function') {
+           process.env.NODE_ENV !== 'production' ? warning(componentClass.getDefaultProps.isReactClassApproved, 'getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.') : void 0;
+         }
+       }
+       
+       var ReactElementValidator = {
+       
+         createElement: function (type, props, children) {
+           var validType = typeof type === 'string' || typeof type === 'function';
+           // We warn in this case but don't throw. We expect the element creation to
+           // succeed and there will likely be errors in render.
+           process.env.NODE_ENV !== 'production' ? warning(validType, 'React.createElement: type should not be null, undefined, boolean, or ' + 'number. It should be a string (for DOM elements) or a ReactClass ' + '(for composite components).%s', getDeclarationErrorAddendum()) : void 0;
+       
+           var element = ReactElement.createElement.apply(this, arguments);
+       
+           // The result can be nullish if a mock or a custom function is used.
+           // TODO: Drop this when these are no longer allowed as the type argument.
+           if (element == null) {
+             return element;
+           }
+       
+           // Skip key warning if the type isn't valid since our key validation logic
+           // doesn't expect a non-string/function type and can throw confusing errors.
+           // We don't want exception behavior to differ between dev and prod.
+           // (Rendering will throw with a helpful message and as soon as the type is
+           // fixed, the key warnings will appear.)
+           if (validType) {
+             for (var i = 2; i < arguments.length; i++) {
+               validateChildKeys(arguments[i], type);
+             }
+           }
+       
+           validatePropTypes(element);
+       
+           return element;
+         },
+       
+         createFactory: function (type) {
+           var validatedFactory = ReactElementValidator.createElement.bind(null, type);
+           // Legacy hook TODO: Warn if this is accessed
+           validatedFactory.type = type;
+       
+           if (process.env.NODE_ENV !== 'production') {
+             if (canDefineProperty) {
+               Object.defineProperty(validatedFactory, 'type', {
+                 enumerable: false,
+                 get: function () {
+                   process.env.NODE_ENV !== 'production' ? warning(false, 'Factory.type is deprecated. Access the class directly ' + 'before passing it to createFactory.') : void 0;
+                   Object.defineProperty(this, 'type', {
+                     value: type
+                   });
+                   return type;
+                 }
+               });
+             }
+           }
+       
+           return validatedFactory;
+         },
+       
+         cloneElement: function (element, props, children) {
+           var newElement = ReactElement.cloneElement.apply(this, arguments);
+           for (var i = 2; i < arguments.length; i++) {
+             validateChildKeys(arguments[i], newElement.type);
+           }
+           validatePropTypes(newElement);
+           return newElement;
+         }
        
-       var EventConstants = {
-         topLevelTypes: topLevelTypes,
-         PropagationPhases: PropagationPhases
        };
        
-       module.exports = EventConstants;
+       module.exports = ReactElementValidator;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
 
 /***/ },
-/* 33 */
+/* 31 */
 /***/ function(module, exports, __webpack_require__) {
 
        /* WEBPACK VAR INJECTION */(function(process) {/**
-        * Copyright 2013-2015, Facebook, Inc.
+        * Copyright 2016-present, 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.
         *
-        * @providesModule EventPluginHub
+        * @providesModule ReactComponentTreeDevtool
         */
        
        'use strict';
        
-       var EventPluginRegistry = __webpack_require__(34);
-       var EventPluginUtils = __webpack_require__(35);
-       var ReactErrorUtils = __webpack_require__(36);
+       var _prodInvariant = __webpack_require__(9);
        
-       var accumulateInto = __webpack_require__(37);
-       var forEachAccumulated = __webpack_require__(38);
-       var invariant = __webpack_require__(15);
-       var warning = __webpack_require__(27);
+       var ReactCurrentOwner = __webpack_require__(12);
        
-       /**
-        * Internal store for event listeners
-        */
-       var listenerBank = {};
+       var invariant = __webpack_require__(10);
+       var warning = __webpack_require__(13);
        
-       /**
-        * Internal queue of events that have accumulated their dispatches and are
-        * waiting to have their dispatches executed.
-        */
-       var eventQueue = null;
+       var tree = {};
+       var unmountedIDs = {};
+       var rootIDs = {};
        
-       /**
-        * Dispatches an event and releases it back into the pool, unless persistent.
-        *
-        * @param {?object} event Synthetic event to be dispatched.
-        * @param {boolean} simulated If the event is simulated (changes exn behavior)
-        * @private
-        */
-       var executeDispatchesAndRelease = function (event, simulated) {
-         if (event) {
-           EventPluginUtils.executeDispatchesInOrder(event, simulated);
+       function updateTree(id, update) {
+         if (!tree[id]) {
+           tree[id] = {
+             element: null,
+             parentID: null,
+             ownerID: null,
+             text: null,
+             childIDs: [],
+             displayName: 'Unknown',
+             isMounted: false,
+             updateCount: 0
+           };
+         }
+         update(tree[id]);
+       }
        
-           if (!event.isPersistent()) {
-             event.constructor.release(event);
+       function purgeDeep(id) {
+         var item = tree[id];
+         if (item) {
+           var childIDs = item.childIDs;
+       
+           delete tree[id];
+           childIDs.forEach(purgeDeep);
+         }
+       }
+       
+       function describeComponentFrame(name, source, ownerName) {
+         return '\n    in ' + name + (source ? ' (at ' + source.fileName.replace(/^.*[\\\/]/, '') + ':' + source.lineNumber + ')' : ownerName ? ' (created by ' + ownerName + ')' : '');
+       }
+       
+       function describeID(id) {
+         var name = ReactComponentTreeDevtool.getDisplayName(id);
+         var element = ReactComponentTreeDevtool.getElement(id);
+         var ownerID = ReactComponentTreeDevtool.getOwnerID(id);
+         var ownerName;
+         if (ownerID) {
+           ownerName = ReactComponentTreeDevtool.getDisplayName(ownerID);
+         }
+         process.env.NODE_ENV !== 'production' ? warning(element, 'ReactComponentTreeDevtool: Missing React element for debugID %s when ' + 'building stack', id) : void 0;
+         return describeComponentFrame(name, element && element._source, ownerName);
+       }
+       
+       var ReactComponentTreeDevtool = {
+         onSetDisplayName: function (id, displayName) {
+           updateTree(id, function (item) {
+             return item.displayName = displayName;
+           });
+         },
+         onSetChildren: function (id, nextChildIDs) {
+           updateTree(id, function (item) {
+             item.childIDs = nextChildIDs;
+       
+             nextChildIDs.forEach(function (nextChildID) {
+               var nextChild = tree[nextChildID];
+               !nextChild ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected devtool events to fire for the child before its parent includes it in onSetChildren().') : _prodInvariant('68') : void 0;
+               !(nextChild.displayName != null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected onSetDisplayName() to fire for the child before its parent includes it in onSetChildren().') : _prodInvariant('69') : void 0;
+               !(nextChild.childIDs != null || nextChild.text != null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected onSetChildren() or onSetText() to fire for the child before its parent includes it in onSetChildren().') : _prodInvariant('70') : void 0;
+               !nextChild.isMounted ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected onMountComponent() to fire for the child before its parent includes it in onSetChildren().') : _prodInvariant('71') : void 0;
+               if (nextChild.parentID == null) {
+                 nextChild.parentID = id;
+                 // TODO: This shouldn't be necessary but mounting a new root during in
+                 // componentWillMount currently causes not-yet-mounted components to
+                 // be purged from our tree data so their parent ID is missing.
+               }
+               !(nextChild.parentID === id) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected onSetParent() and onSetChildren() to be consistent (%s has parents %s and %s).', nextChildID, nextChild.parentID, id) : _prodInvariant('72', nextChildID, nextChild.parentID, id) : void 0;
+             });
+           });
+         },
+         onSetOwner: function (id, ownerID) {
+           updateTree(id, function (item) {
+             return item.ownerID = ownerID;
+           });
+         },
+         onSetParent: function (id, parentID) {
+           updateTree(id, function (item) {
+             return item.parentID = parentID;
+           });
+         },
+         onSetText: function (id, text) {
+           updateTree(id, function (item) {
+             return item.text = text;
+           });
+         },
+         onBeforeMountComponent: function (id, element) {
+           updateTree(id, function (item) {
+             return item.element = element;
+           });
+         },
+         onBeforeUpdateComponent: function (id, element) {
+           updateTree(id, function (item) {
+             return item.element = element;
+           });
+         },
+         onMountComponent: function (id) {
+           updateTree(id, function (item) {
+             return item.isMounted = true;
+           });
+         },
+         onMountRootComponent: function (id) {
+           rootIDs[id] = true;
+         },
+         onUpdateComponent: function (id) {
+           updateTree(id, function (item) {
+             return item.updateCount++;
+           });
+         },
+         onUnmountComponent: function (id) {
+           updateTree(id, function (item) {
+             return item.isMounted = false;
+           });
+           unmountedIDs[id] = true;
+           delete rootIDs[id];
+         },
+         purgeUnmountedComponents: function () {
+           if (ReactComponentTreeDevtool._preventPurging) {
+             // Should only be used for testing.
+             return;
+           }
+       
+           for (var id in unmountedIDs) {
+             purgeDeep(id);
+           }
+           unmountedIDs = {};
+         },
+         isMounted: function (id) {
+           var item = tree[id];
+           return item ? item.isMounted : false;
+         },
+         getCurrentStackAddendum: function (topElement) {
+           var info = '';
+           if (topElement) {
+             var type = topElement.type;
+             var name = typeof type === 'function' ? type.displayName || type.name : type;
+             var owner = topElement._owner;
+             info += describeComponentFrame(name || 'Unknown', topElement._source, owner && owner.getName());
+           }
+       
+           var currentOwner = ReactCurrentOwner.current;
+           var id = currentOwner && currentOwner._debugID;
+       
+           info += ReactComponentTreeDevtool.getStackAddendumByID(id);
+           return info;
+         },
+         getStackAddendumByID: function (id) {
+           var info = '';
+           while (id) {
+             info += describeID(id);
+             id = ReactComponentTreeDevtool.getParentID(id);
            }
+           return info;
+         },
+         getChildIDs: function (id) {
+           var item = tree[id];
+           return item ? item.childIDs : [];
+         },
+         getDisplayName: function (id) {
+           var item = tree[id];
+           return item ? item.displayName : 'Unknown';
+         },
+         getElement: function (id) {
+           var item = tree[id];
+           return item ? item.element : null;
+         },
+         getOwnerID: function (id) {
+           var item = tree[id];
+           return item ? item.ownerID : null;
+         },
+         getParentID: function (id) {
+           var item = tree[id];
+           return item ? item.parentID : null;
+         },
+         getSource: function (id) {
+           var item = tree[id];
+           var element = item ? item.element : null;
+           var source = element != null ? element._source : null;
+           return source;
+         },
+         getText: function (id) {
+           var item = tree[id];
+           return item ? item.text : null;
+         },
+         getUpdateCount: function (id) {
+           var item = tree[id];
+           return item ? item.updateCount : 0;
+         },
+         getRootIDs: function () {
+           return Object.keys(rootIDs);
+         },
+         getRegisteredIDs: function () {
+           return Object.keys(tree);
          }
        };
-       var executeDispatchesAndReleaseSimulated = function (e) {
-         return executeDispatchesAndRelease(e, true);
-       };
-       var executeDispatchesAndReleaseTopLevel = function (e) {
-         return executeDispatchesAndRelease(e, false);
-       };
        
-       /**
-        * - `InstanceHandle`: [required] Module that performs logical traversals of DOM
-        *   hierarchy given ids of the logical DOM elements involved.
+       module.exports = ReactComponentTreeDevtool;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
+
+/***/ },
+/* 32 */
+/***/ function(module, exports, __webpack_require__) {
+
+       /* WEBPACK VAR INJECTION */(function(process) {/**
+        * Copyright 2013-present, 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.
+        *
+        * @providesModule checkReactTypeSpec
         */
-       var InstanceHandle = null;
        
-       function validateInstanceHandle() {
-         var valid = InstanceHandle && InstanceHandle.traverseTwoPhase && InstanceHandle.traverseEnterLeave;
-         process.env.NODE_ENV !== 'production' ? warning(valid, 'InstanceHandle not injected before use!') : undefined;
+       'use strict';
+       
+       var _prodInvariant = __webpack_require__(9);
+       
+       var ReactPropTypeLocationNames = __webpack_require__(26);
+       var ReactPropTypesSecret = __webpack_require__(33);
+       
+       var invariant = __webpack_require__(10);
+       var warning = __webpack_require__(13);
+       
+       var ReactComponentTreeDevtool;
+       
+       if (typeof process !== 'undefined' && process.env && process.env.NODE_ENV === 'test') {
+         // Temporary hack.
+         // Inline requires don't work well with Jest:
+         // https://github.com/facebook/react/issues/7240
+         // Remove the inline requires when we don't need them anymore:
+         // https://github.com/facebook/react/pull/7178
+         ReactComponentTreeDevtool = __webpack_require__(31);
        }
        
+       var loggedTypeFailures = {};
+       
        /**
-        * This is a unified interface for event plugins to be installed and configured.
-        *
-        * Event plugins can implement the following properties:
+        * Assert that the values match with the type specs.
+        * Error messages are memorized and will only be shown once.
         *
-        *   `extractEvents` {function(string, DOMEventTarget, string, object): *}
-        *     Required. When a top-level event is fired, this method is expected to
-        *     extract synthetic events that will in turn be queued and dispatched.
-        *
-        *   `eventTypes` {object}
-        *     Optional, plugins that fire events must publish a mapping of registration
-        *     names that are used to register listeners. Values of this mapping must
-        *     be objects that contain `registrationName` or `phasedRegistrationNames`.
-        *
-        *   `executeDispatch` {function(object, function, string)}
-        *     Optional, allows plugins to override how an event gets dispatched. By
-        *     default, the listener is simply invoked.
-        *
-        * Each plugin that is injected into `EventsPluginHub` is immediately operable.
-        *
-        * @public
+        * @param {object} typeSpecs Map of name to a ReactPropType
+        * @param {object} values Runtime values that need to be type-checked
+        * @param {string} location e.g. "prop", "context", "child context"
+        * @param {string} componentName Name of the component for error messages.
+        * @param {?object} element The React element that is being type-checked
+        * @param {?number} debugID The React component instance that is being type-checked
+        * @private
         */
-       var EventPluginHub = {
-       
-         /**
-          * Methods for injecting dependencies.
-          */
-         injection: {
-       
-           /**
-            * @param {object} InjectedMount
-            * @public
-            */
-           injectMount: EventPluginUtils.injection.injectMount,
-       
-           /**
-            * @param {object} InjectedInstanceHandle
-            * @public
-            */
-           injectInstanceHandle: function (InjectedInstanceHandle) {
-             InstanceHandle = InjectedInstanceHandle;
-             if (process.env.NODE_ENV !== 'production') {
-               validateInstanceHandle();
-             }
-           },
-       
-           getInstanceHandle: function () {
-             if (process.env.NODE_ENV !== 'production') {
-               validateInstanceHandle();
-             }
-             return InstanceHandle;
-           },
-       
-           /**
-            * @param {array} InjectedEventPluginOrder
-            * @public
-            */
-           injectEventPluginOrder: EventPluginRegistry.injectEventPluginOrder,
-       
-           /**
-            * @param {object} injectedNamesToPlugins Map from names to plugin modules.
-            */
-           injectEventPluginsByName: EventPluginRegistry.injectEventPluginsByName
-       
-         },
-       
-         eventNameDispatchConfigs: EventPluginRegistry.eventNameDispatchConfigs,
-       
-         registrationNameModules: EventPluginRegistry.registrationNameModules,
-       
-         /**
-          * Stores `listener` at `listenerBank[registrationName][id]`. Is idempotent.
-          *
-          * @param {string} id ID of the DOM element.
-          * @param {string} registrationName Name of listener (e.g. `onClick`).
-          * @param {?function} listener The callback to store.
-          */
-         putListener: function (id, registrationName, listener) {
-           !(typeof listener === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected %s listener to be a function, instead got type %s', registrationName, typeof listener) : invariant(false) : undefined;
-       
-           var bankForRegistrationName = listenerBank[registrationName] || (listenerBank[registrationName] = {});
-           bankForRegistrationName[id] = listener;
-       
-           var PluginModule = EventPluginRegistry.registrationNameModules[registrationName];
-           if (PluginModule && PluginModule.didPutListener) {
-             PluginModule.didPutListener(id, registrationName, listener);
-           }
-         },
-       
-         /**
-          * @param {string} id ID of the DOM element.
-          * @param {string} registrationName Name of listener (e.g. `onClick`).
-          * @return {?function} The stored callback.
-          */
-         getListener: function (id, registrationName) {
-           var bankForRegistrationName = listenerBank[registrationName];
-           return bankForRegistrationName && bankForRegistrationName[id];
-         },
-       
-         /**
-          * Deletes a listener from the registration bank.
-          *
-          * @param {string} id ID of the DOM element.
-          * @param {string} registrationName Name of listener (e.g. `onClick`).
-          */
-         deleteListener: function (id, registrationName) {
-           var PluginModule = EventPluginRegistry.registrationNameModules[registrationName];
-           if (PluginModule && PluginModule.willDeleteListener) {
-             PluginModule.willDeleteListener(id, registrationName);
-           }
-       
-           var bankForRegistrationName = listenerBank[registrationName];
-           // TODO: This should never be null -- when is it?
-           if (bankForRegistrationName) {
-             delete bankForRegistrationName[id];
-           }
-         },
-       
-         /**
-          * Deletes all listeners for the DOM element with the supplied ID.
-          *
-          * @param {string} id ID of the DOM element.
-          */
-         deleteAllListeners: function (id) {
-           for (var registrationName in listenerBank) {
-             if (!listenerBank[registrationName][id]) {
-               continue;
-             }
-       
-             var PluginModule = EventPluginRegistry.registrationNameModules[registrationName];
-             if (PluginModule && PluginModule.willDeleteListener) {
-               PluginModule.willDeleteListener(id, registrationName);
+       function checkReactTypeSpec(typeSpecs, values, location, componentName, element, debugID) {
+         for (var typeSpecName in typeSpecs) {
+           if (typeSpecs.hasOwnProperty(typeSpecName)) {
+             var error;
+             // Prop type validation may throw. In case they do, we don't want to
+             // fail the render phase where it didn't fail before. So we log it.
+             // After these have been cleaned up, we'll let them throw.
+             try {
+               // This is intentionally an invariant that gets caught. It's the same
+               // behavior as without this statement except with a better message.
+               !(typeof typeSpecs[typeSpecName] === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s: %s type `%s` is invalid; it must be a function, usually from React.PropTypes.', componentName || 'React class', ReactPropTypeLocationNames[location], typeSpecName) : _prodInvariant('84', componentName || 'React class', ReactPropTypeLocationNames[location], typeSpecName) : void 0;
+               error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret);
+             } catch (ex) {
+               error = ex;
              }
+             process.env.NODE_ENV !== 'production' ? warning(!error || error instanceof Error, '%s: type specification of %s `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', ReactPropTypeLocationNames[location], typeSpecName, typeof error) : void 0;
+             if (error instanceof Error && !(error.message in loggedTypeFailures)) {
+               // Only monitor this failure once because there tends to be a lot of the
+               // same error.
+               loggedTypeFailures[error.message] = true;
        
-             delete listenerBank[registrationName][id];
-           }
-         },
+               var componentStackInfo = '';
        
-         /**
-          * Allows registered plugins an opportunity to extract events from top-level
-          * native browser events.
-          *
-          * @param {string} topLevelType Record from `EventConstants`.
-          * @param {DOMEventTarget} topLevelTarget The listening component root node.
-          * @param {string} topLevelTargetID ID of `topLevelTarget`.
-          * @param {object} nativeEvent Native browser event.
-          * @return {*} An accumulation of synthetic events.
-          * @internal
-          */
-         extractEvents: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) {
-           var events;
-           var plugins = EventPluginRegistry.plugins;
-           for (var i = 0; i < plugins.length; i++) {
-             // Not every plugin in the ordering may be loaded at runtime.
-             var possiblePlugin = plugins[i];
-             if (possiblePlugin) {
-               var extractedEvents = possiblePlugin.extractEvents(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget);
-               if (extractedEvents) {
-                 events = accumulateInto(events, extractedEvents);
+               if (process.env.NODE_ENV !== 'production') {
+                 if (!ReactComponentTreeDevtool) {
+                   ReactComponentTreeDevtool = __webpack_require__(31);
+                 }
+                 if (debugID !== null) {
+                   componentStackInfo = ReactComponentTreeDevtool.getStackAddendumByID(debugID);
+                 } else if (element !== null) {
+                   componentStackInfo = ReactComponentTreeDevtool.getCurrentStackAddendum(element);
+                 }
                }
-             }
-           }
-           return events;
-         },
-       
-         /**
-          * Enqueues a synthetic event that should be dispatched when
-          * `processEventQueue` is invoked.
-          *
-          * @param {*} events An accumulation of synthetic events.
-          * @internal
-          */
-         enqueueEvents: function (events) {
-           if (events) {
-             eventQueue = accumulateInto(eventQueue, events);
-           }
-         },
        
-         /**
-          * Dispatches all synthetic events on the event queue.
-          *
-          * @internal
-          */
-         processEventQueue: function (simulated) {
-           // Set `eventQueue` to null before processing it so that we can tell if more
-           // events get enqueued while processing.
-           var processingEventQueue = eventQueue;
-           eventQueue = null;
-           if (simulated) {
-             forEachAccumulated(processingEventQueue, executeDispatchesAndReleaseSimulated);
-           } else {
-             forEachAccumulated(processingEventQueue, executeDispatchesAndReleaseTopLevel);
+               process.env.NODE_ENV !== 'production' ? warning(false, 'Failed %s type: %s%s', location, error.message, componentStackInfo) : void 0;
+             }
            }
-           !!eventQueue ? process.env.NODE_ENV !== 'production' ? invariant(false, 'processEventQueue(): Additional events were enqueued while processing ' + 'an event queue. Support for this has not yet been implemented.') : invariant(false) : undefined;
-           // This would be a good time to rethrow if any of the event handlers threw.
-           ReactErrorUtils.rethrowCaughtError();
-         },
+         }
+       }
        
-         /**
-          * These are needed for tests only. Do not use!
-          */
-         __purge: function () {
-           listenerBank = {};
-         },
+       module.exports = checkReactTypeSpec;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
+
+/***/ },
+/* 33 */
+/***/ function(module, exports) {
+
+       /**
+        * Copyright 2013-present, 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.
+        *
+        * @providesModule ReactPropTypesSecret
+        */
        
-         __getListenerBank: function () {
-           return listenerBank;
-         }
+       'use strict';
        
-       };
+       var ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';
        
-       module.exports = EventPluginHub;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
+       module.exports = ReactPropTypesSecret;
 
 /***/ },
 /* 34 */
 /***/ function(module, exports, __webpack_require__) {
 
        /* WEBPACK VAR INJECTION */(function(process) {/**
-        * Copyright 2013-2015, Facebook, Inc.
+        * Copyright 2013-present, 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.
         *
-        * @providesModule EventPluginRegistry
-        * @typechecks static-only
+        * @providesModule ReactPropTypes
         */
        
        'use strict';
        
-       var invariant = __webpack_require__(15);
-       
-       /**
-        * Injectable ordering of event plugins.
-        */
-       var EventPluginOrder = null;
+       var ReactElement = __webpack_require__(11);
+       var ReactPropTypeLocationNames = __webpack_require__(26);
+       var ReactPropTypesSecret = __webpack_require__(33);
        
-       /**
-        * Injectable mapping from names to event plugin modules.
-        */
-       var namesToPlugins = {};
+       var emptyFunction = __webpack_require__(14);
+       var getIteratorFn = __webpack_require__(17);
+       var warning = __webpack_require__(13);
        
        /**
-        * Recomputes the plugin list using the injected plugins and plugin ordering.
+        * Collection of methods that allow declaration and validation of props that are
+        * supplied to React components. Example usage:
         *
-        * @private
-        */
-       function recomputePluginOrdering() {
-         if (!EventPluginOrder) {
-           // Wait until an `EventPluginOrder` is injected.
-           return;
-         }
-         for (var pluginName in namesToPlugins) {
-           var PluginModule = namesToPlugins[pluginName];
-           var pluginIndex = EventPluginOrder.indexOf(pluginName);
-           !(pluginIndex > -1) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject event plugins that do not exist in ' + 'the plugin ordering, `%s`.', pluginName) : invariant(false) : undefined;
-           if (EventPluginRegistry.plugins[pluginIndex]) {
-             continue;
-           }
-           !PluginModule.extractEvents ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Event plugins must implement an `extractEvents` ' + 'method, but `%s` does not.', pluginName) : invariant(false) : undefined;
-           EventPluginRegistry.plugins[pluginIndex] = PluginModule;
-           var publishedEvents = PluginModule.eventTypes;
-           for (var eventName in publishedEvents) {
-             !publishEventForPlugin(publishedEvents[eventName], PluginModule, eventName) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Failed to publish event `%s` for plugin `%s`.', eventName, pluginName) : invariant(false) : undefined;
-           }
-         }
-       }
-       
-       /**
-        * Publishes an event so that it can be dispatched by the supplied plugin.
+        *   var Props = require('ReactPropTypes');
+        *   var MyArticle = React.createClass({
+        *     propTypes: {
+        *       // An optional string prop named "description".
+        *       description: Props.string,
         *
-        * @param {object} dispatchConfig Dispatch configuration for the event.
-        * @param {object} PluginModule Plugin publishing the event.
-        * @return {boolean} True if the event was successfully published.
-        * @private
-        */
-       function publishEventForPlugin(dispatchConfig, PluginModule, eventName) {
-         !!EventPluginRegistry.eventNameDispatchConfigs.hasOwnProperty(eventName) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginHub: More than one plugin attempted to publish the same ' + 'event name, `%s`.', eventName) : invariant(false) : undefined;
-         EventPluginRegistry.eventNameDispatchConfigs[eventName] = dispatchConfig;
-       
-         var phasedRegistrationNames = dispatchConfig.phasedRegistrationNames;
-         if (phasedRegistrationNames) {
-           for (var phaseName in phasedRegistrationNames) {
-             if (phasedRegistrationNames.hasOwnProperty(phaseName)) {
-               var phasedRegistrationName = phasedRegistrationNames[phaseName];
-               publishRegistrationName(phasedRegistrationName, PluginModule, eventName);
-             }
-           }
-           return true;
-         } else if (dispatchConfig.registrationName) {
-           publishRegistrationName(dispatchConfig.registrationName, PluginModule, eventName);
-           return true;
-         }
-         return false;
-       }
-       
-       /**
-        * Publishes a registration name that is used to identify dispatched events and
-        * can be used with `EventPluginHub.putListener` to register listeners.
+        *       // A required enum prop named "category".
+        *       category: Props.oneOf(['News','Photos']).isRequired,
         *
-        * @param {string} registrationName Registration name to add.
-        * @param {object} PluginModule Plugin publishing the event.
-        * @private
-        */
-       function publishRegistrationName(registrationName, PluginModule, eventName) {
-         !!EventPluginRegistry.registrationNameModules[registrationName] ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginHub: More than one plugin attempted to publish the same ' + 'registration name, `%s`.', registrationName) : invariant(false) : undefined;
-         EventPluginRegistry.registrationNameModules[registrationName] = PluginModule;
-         EventPluginRegistry.registrationNameDependencies[registrationName] = PluginModule.eventTypes[eventName].dependencies;
-       }
-       
-       /**
-        * Registers plugins so that they can extract and dispatch events.
+        *       // A prop named "dialog" that requires an instance of Dialog.
+        *       dialog: Props.instanceOf(Dialog).isRequired
+        *     },
+        *     render: function() { ... }
+        *   });
         *
-        * @see {EventPluginHub}
+        * A more formal specification of how these methods are used:
+        *
+        *   type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)
+        *   decl := ReactPropTypes.{type}(.isRequired)?
+        *
+        * Each and every declaration produces a function with the same signature. This
+        * allows the creation of custom validation functions. For example:
+        *
+        *  var MyLink = React.createClass({
+        *    propTypes: {
+        *      // An optional string or URI prop named "href".
+        *      href: function(props, propName, componentName) {
+        *        var propValue = props[propName];
+        *        if (propValue != null && typeof propValue !== 'string' &&
+        *            !(propValue instanceof URI)) {
+        *          return new Error(
+        *            'Expected a string or an URI for ' + propName + ' in ' +
+        *            componentName
+        *          );
+        *        }
+        *      }
+        *    },
+        *    render: function() {...}
+        *  });
+        *
+        * @internal
         */
-       var EventPluginRegistry = {
-       
-         /**
-          * Ordered list of injected plugins.
-          */
-         plugins: [],
        
-         /**
-          * Mapping from event name to dispatch config
-          */
-         eventNameDispatchConfigs: {},
+       var ANONYMOUS = '<<anonymous>>';
        
-         /**
-          * Mapping from registration name to plugin module
-          */
-         registrationNameModules: {},
+       var ReactPropTypes = {
+         array: createPrimitiveTypeChecker('array'),
+         bool: createPrimitiveTypeChecker('boolean'),
+         func: createPrimitiveTypeChecker('function'),
+         number: createPrimitiveTypeChecker('number'),
+         object: createPrimitiveTypeChecker('object'),
+         string: createPrimitiveTypeChecker('string'),
+         symbol: createPrimitiveTypeChecker('symbol'),
        
-         /**
-          * Mapping from registration name to event name
-          */
-         registrationNameDependencies: {},
+         any: createAnyTypeChecker(),
+         arrayOf: createArrayOfTypeChecker,
+         element: createElementTypeChecker(),
+         instanceOf: createInstanceTypeChecker,
+         node: createNodeChecker(),
+         objectOf: createObjectOfTypeChecker,
+         oneOf: createEnumTypeChecker,
+         oneOfType: createUnionTypeChecker,
+         shape: createShapeTypeChecker
+       };
        
-         /**
-          * Injects an ordering of plugins (by plugin name). This allows the ordering
-          * to be decoupled from injection of the actual plugins so that ordering is
-          * always deterministic regardless of packaging, on-the-fly injection, etc.
-          *
-          * @param {array} InjectedEventPluginOrder
-          * @internal
-          * @see {EventPluginHub.injection.injectEventPluginOrder}
-          */
-         injectEventPluginOrder: function (InjectedEventPluginOrder) {
-           !!EventPluginOrder ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject event plugin ordering more than ' + 'once. You are likely trying to load more than one copy of React.') : invariant(false) : undefined;
-           // Clone the ordering so it cannot be dynamically mutated.
-           EventPluginOrder = Array.prototype.slice.call(InjectedEventPluginOrder);
-           recomputePluginOrdering();
-         },
+       /**
+        * inlined Object.is polyfill to avoid requiring consumers ship their own
+        * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is
+        */
+       /*eslint-disable no-self-compare*/
+       function is(x, y) {
+         // SameValue algorithm
+         if (x === y) {
+           // Steps 1-5, 7-10
+           // Steps 6.b-6.e: +0 != -0
+           return x !== 0 || 1 / x === 1 / y;
+         } else {
+           // Step 6.a: NaN == NaN
+           return x !== x && y !== y;
+         }
+       }
+       /*eslint-enable no-self-compare*/
        
-         /**
-          * Injects plugins to be used by `EventPluginHub`. The plugin names must be
-          * in the ordering injected by `injectEventPluginOrder`.
-          *
-          * Plugins can be injected as part of page initialization or on-the-fly.
-          *
-          * @param {object} injectedNamesToPlugins Map from names to plugin modules.
-          * @internal
-          * @see {EventPluginHub.injection.injectEventPluginsByName}
-          */
-         injectEventPluginsByName: function (injectedNamesToPlugins) {
-           var isOrderingDirty = false;
-           for (var pluginName in injectedNamesToPlugins) {
-             if (!injectedNamesToPlugins.hasOwnProperty(pluginName)) {
-               continue;
+       function createChainableTypeChecker(validate) {
+         if (process.env.NODE_ENV !== 'production') {
+           var manualPropTypeCallCache = {};
+         }
+         function checkType(isRequired, props, propName, componentName, location, propFullName, secret) {
+           componentName = componentName || ANONYMOUS;
+           propFullName = propFullName || propName;
+           if (process.env.NODE_ENV !== 'production') {
+             if (secret !== ReactPropTypesSecret && typeof console !== 'undefined') {
+               var cacheKey = componentName + ':' + propName;
+               if (!manualPropTypeCallCache[cacheKey]) {
+                 process.env.NODE_ENV !== 'production' ? warning(false, 'You are manually calling a React.PropTypes validation ' + 'function for the `%s` prop on `%s`. This is deprecated ' + 'and will not work in the next major version. You may be ' + 'seeing this warning due to a third-party PropTypes library. ' + 'See https://fb.me/react-warning-dont-call-proptypes for details.', propFullName, componentName) : void 0;
+                 manualPropTypeCallCache[cacheKey] = true;
+               }
              }
-             var PluginModule = injectedNamesToPlugins[pluginName];
-             if (!namesToPlugins.hasOwnProperty(pluginName) || namesToPlugins[pluginName] !== PluginModule) {
-               !!namesToPlugins[pluginName] ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject two different event plugins ' + 'using the same name, `%s`.', pluginName) : invariant(false) : undefined;
-               namesToPlugins[pluginName] = PluginModule;
-               isOrderingDirty = true;
+           }
+           if (props[propName] == null) {
+             var locationName = ReactPropTypeLocationNames[location];
+             if (isRequired) {
+               return new Error('Required ' + locationName + ' `' + propFullName + '` was not specified in ' + ('`' + componentName + '`.'));
              }
+             return null;
+           } else {
+             return validate(props, propName, componentName, location, propFullName);
            }
-           if (isOrderingDirty) {
-             recomputePluginOrdering();
+         }
+       
+         var chainedCheckType = checkType.bind(null, false);
+         chainedCheckType.isRequired = checkType.bind(null, true);
+       
+         return chainedCheckType;
+       }
+       
+       function createPrimitiveTypeChecker(expectedType) {
+         function validate(props, propName, componentName, location, propFullName, secret) {
+           var propValue = props[propName];
+           var propType = getPropType(propValue);
+           if (propType !== expectedType) {
+             var locationName = ReactPropTypeLocationNames[location];
+             // `propValue` being instance of, say, date/regexp, pass the 'object'
+             // check, but we can offer a more precise error message here rather than
+             // 'of type `object`'.
+             var preciseType = getPreciseType(propValue);
+       
+             return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'));
            }
-         },
+           return null;
+         }
+         return createChainableTypeChecker(validate);
+       }
        
-         /**
-          * Looks up the plugin for the supplied event.
-          *
-          * @param {object} event A synthetic event.
-          * @return {?object} The plugin that created the supplied event.
-          * @internal
-          */
-         getPluginModuleForEvent: function (event) {
-           var dispatchConfig = event.dispatchConfig;
-           if (dispatchConfig.registrationName) {
-             return EventPluginRegistry.registrationNameModules[dispatchConfig.registrationName] || null;
+       function createAnyTypeChecker() {
+         return createChainableTypeChecker(emptyFunction.thatReturns(null));
+       }
+       
+       function createArrayOfTypeChecker(typeChecker) {
+         function validate(props, propName, componentName, location, propFullName) {
+           if (typeof typeChecker !== 'function') {
+             return new Error('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.');
            }
-           for (var phase in dispatchConfig.phasedRegistrationNames) {
-             if (!dispatchConfig.phasedRegistrationNames.hasOwnProperty(phase)) {
-               continue;
-             }
-             var PluginModule = EventPluginRegistry.registrationNameModules[dispatchConfig.phasedRegistrationNames[phase]];
-             if (PluginModule) {
-               return PluginModule;
+           var propValue = props[propName];
+           if (!Array.isArray(propValue)) {
+             var locationName = ReactPropTypeLocationNames[location];
+             var propType = getPropType(propValue);
+             return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));
+           }
+           for (var i = 0; i < propValue.length; i++) {
+             var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret);
+             if (error instanceof Error) {
+               return error;
              }
            }
            return null;
-         },
+         }
+         return createChainableTypeChecker(validate);
+       }
        
-         /**
-          * Exposed for unit testing.
-          * @private
-          */
-         _resetEventPlugins: function () {
-           EventPluginOrder = null;
-           for (var pluginName in namesToPlugins) {
-             if (namesToPlugins.hasOwnProperty(pluginName)) {
-               delete namesToPlugins[pluginName];
-             }
+       function createElementTypeChecker() {
+         function validate(props, propName, componentName, location, propFullName) {
+           var propValue = props[propName];
+           if (!ReactElement.isValidElement(propValue)) {
+             var locationName = ReactPropTypeLocationNames[location];
+             var propType = getPropType(propValue);
+             return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.'));
            }
-           EventPluginRegistry.plugins.length = 0;
+           return null;
+         }
+         return createChainableTypeChecker(validate);
+       }
        
-           var eventNameDispatchConfigs = EventPluginRegistry.eventNameDispatchConfigs;
-           for (var eventName in eventNameDispatchConfigs) {
-             if (eventNameDispatchConfigs.hasOwnProperty(eventName)) {
-               delete eventNameDispatchConfigs[eventName];
-             }
+       function createInstanceTypeChecker(expectedClass) {
+         function validate(props, propName, componentName, location, propFullName) {
+           if (!(props[propName] instanceof expectedClass)) {
+             var locationName = ReactPropTypeLocationNames[location];
+             var expectedClassName = expectedClass.name || ANONYMOUS;
+             var actualClassName = getClassName(props[propName]);
+             return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));
            }
+           return null;
+         }
+         return createChainableTypeChecker(validate);
+       }
        
-           var registrationNameModules = EventPluginRegistry.registrationNameModules;
-           for (var registrationName in registrationNameModules) {
-             if (registrationNameModules.hasOwnProperty(registrationName)) {
-               delete registrationNameModules[registrationName];
-             }
-           }
+       function createEnumTypeChecker(expectedValues) {
+         if (!Array.isArray(expectedValues)) {
+           process.env.NODE_ENV !== 'production' ? warning(false, 'Invalid argument supplied to oneOf, expected an instance of array.') : void 0;
+           return emptyFunction.thatReturnsNull;
          }
        
-       };
+         function validate(props, propName, componentName, location, propFullName) {
+           var propValue = props[propName];
+           for (var i = 0; i < expectedValues.length; i++) {
+             if (is(propValue, expectedValues[i])) {
+               return null;
+             }
+           }
        
-       module.exports = EventPluginRegistry;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
-
-/***/ },
-/* 35 */
-/***/ function(module, exports, __webpack_require__) {
-
-       /* WEBPACK VAR INJECTION */(function(process) {/**
-        * 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.
-        *
-        * @providesModule EventPluginUtils
-        */
+           var locationName = ReactPropTypeLocationNames[location];
+           var valuesString = JSON.stringify(expectedValues);
+           return new Error('Invalid ' + locationName + ' `' + propFullName + '` of value `' + propValue + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));
+         }
+         return createChainableTypeChecker(validate);
+       }
        
-       'use strict';
+       function createObjectOfTypeChecker(typeChecker) {
+         function validate(props, propName, componentName, location, propFullName) {
+           if (typeof typeChecker !== 'function') {
+             return new Error('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.');
+           }
+           var propValue = props[propName];
+           var propType = getPropType(propValue);
+           if (propType !== 'object') {
+             var locationName = ReactPropTypeLocationNames[location];
+             return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));
+           }
+           for (var key in propValue) {
+             if (propValue.hasOwnProperty(key)) {
+               var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);
+               if (error instanceof Error) {
+                 return error;
+               }
+             }
+           }
+           return null;
+         }
+         return createChainableTypeChecker(validate);
+       }
        
-       var EventConstants = __webpack_require__(32);
-       var ReactErrorUtils = __webpack_require__(36);
+       function createUnionTypeChecker(arrayOfTypeCheckers) {
+         if (!Array.isArray(arrayOfTypeCheckers)) {
+           process.env.NODE_ENV !== 'production' ? warning(false, 'Invalid argument supplied to oneOfType, expected an instance of array.') : void 0;
+           return emptyFunction.thatReturnsNull;
+         }
        
-       var invariant = __webpack_require__(15);
-       var warning = __webpack_require__(27);
+         function validate(props, propName, componentName, location, propFullName) {
+           for (var i = 0; i < arrayOfTypeCheckers.length; i++) {
+             var checker = arrayOfTypeCheckers[i];
+             if (checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret) == null) {
+               return null;
+             }
+           }
        
-       /**
-        * Injected dependencies:
-        */
+           var locationName = ReactPropTypeLocationNames[location];
+           return new Error('Invalid ' + locationName + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`.'));
+         }
+         return createChainableTypeChecker(validate);
+       }
        
-       /**
-        * - `Mount`: [required] Module that can convert between React dom IDs and
-        *   actual node references.
-        */
-       var injection = {
-         Mount: null,
-         injectMount: function (InjectedMount) {
-           injection.Mount = InjectedMount;
-           if (process.env.NODE_ENV !== 'production') {
-             process.env.NODE_ENV !== 'production' ? warning(InjectedMount && InjectedMount.getNode && InjectedMount.getID, 'EventPluginUtils.injection.injectMount(...): Injected Mount ' + 'module is missing getNode or getID.') : undefined;
+       function createNodeChecker() {
+         function validate(props, propName, componentName, location, propFullName) {
+           if (!isNode(props[propName])) {
+             var locationName = ReactPropTypeLocationNames[location];
+             return new Error('Invalid ' + locationName + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));
            }
+           return null;
          }
-       };
-       
-       var topLevelTypes = EventConstants.topLevelTypes;
-       
-       function isEndish(topLevelType) {
-         return topLevelType === topLevelTypes.topMouseUp || topLevelType === topLevelTypes.topTouchEnd || topLevelType === topLevelTypes.topTouchCancel;
+         return createChainableTypeChecker(validate);
        }
        
-       function isMoveish(topLevelType) {
-         return topLevelType === topLevelTypes.topMouseMove || topLevelType === topLevelTypes.topTouchMove;
-       }
-       function isStartish(topLevelType) {
-         return topLevelType === topLevelTypes.topMouseDown || topLevelType === topLevelTypes.topTouchStart;
+       function createShapeTypeChecker(shapeTypes) {
+         function validate(props, propName, componentName, location, propFullName) {
+           var propValue = props[propName];
+           var propType = getPropType(propValue);
+           if (propType !== 'object') {
+             var locationName = ReactPropTypeLocationNames[location];
+             return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));
+           }
+           for (var key in shapeTypes) {
+             var checker = shapeTypes[key];
+             if (!checker) {
+               continue;
+             }
+             var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);
+             if (error) {
+               return error;
+             }
+           }
+           return null;
+         }
+         return createChainableTypeChecker(validate);
        }
        
-       var validateEventDispatches;
-       if (process.env.NODE_ENV !== 'production') {
-         validateEventDispatches = function (event) {
-           var dispatchListeners = event._dispatchListeners;
-           var dispatchIDs = event._dispatchIDs;
+       function isNode(propValue) {
+         switch (typeof propValue) {
+           case 'number':
+           case 'string':
+           case 'undefined':
+             return true;
+           case 'boolean':
+             return !propValue;
+           case 'object':
+             if (Array.isArray(propValue)) {
+               return propValue.every(isNode);
+             }
+             if (propValue === null || ReactElement.isValidElement(propValue)) {
+               return true;
+             }
        
-           var listenersIsArr = Array.isArray(dispatchListeners);
-           var idsIsArr = Array.isArray(dispatchIDs);
-           var IDsLen = idsIsArr ? dispatchIDs.length : dispatchIDs ? 1 : 0;
-           var listenersLen = listenersIsArr ? dispatchListeners.length : dispatchListeners ? 1 : 0;
+             var iteratorFn = getIteratorFn(propValue);
+             if (iteratorFn) {
+               var iterator = iteratorFn.call(propValue);
+               var step;
+               if (iteratorFn !== propValue.entries) {
+                 while (!(step = iterator.next()).done) {
+                   if (!isNode(step.value)) {
+                     return false;
+                   }
+                 }
+               } else {
+                 // Iterator will provide entry [k,v] tuples rather than values.
+                 while (!(step = iterator.next()).done) {
+                   var entry = step.value;
+                   if (entry) {
+                     if (!isNode(entry[1])) {
+                       return false;
+                     }
+                   }
+                 }
+               }
+             } else {
+               return false;
+             }
        
-           process.env.NODE_ENV !== 'production' ? warning(idsIsArr === listenersIsArr && IDsLen === listenersLen, 'EventPluginUtils: Invalid `event`.') : undefined;
-         };
+             return true;
+           default:
+             return false;
+         }
        }
        
-       /**
-        * Dispatch the event to the listener.
-        * @param {SyntheticEvent} event SyntheticEvent to handle
-        * @param {boolean} simulated If the event is simulated (changes exn behavior)
-        * @param {function} listener Application-level callback
-        * @param {string} domID DOM id to pass to the callback.
-        */
-       function executeDispatch(event, simulated, listener, domID) {
-         var type = event.type || 'unknown-event';
-         event.currentTarget = injection.Mount.getNode(domID);
-         if (simulated) {
-           ReactErrorUtils.invokeGuardedCallbackWithCatch(type, listener, event, domID);
-         } else {
-           ReactErrorUtils.invokeGuardedCallback(type, listener, event, domID);
+       function isSymbol(propType, propValue) {
+         // Native Symbol.
+         if (propType === 'symbol') {
+           return true;
          }
-         event.currentTarget = null;
-       }
        
-       /**
-        * Standard/simple iteration through an event's collected dispatches.
-        */
-       function executeDispatchesInOrder(event, simulated) {
-         var dispatchListeners = event._dispatchListeners;
-         var dispatchIDs = event._dispatchIDs;
-         if (process.env.NODE_ENV !== 'production') {
-           validateEventDispatches(event);
+         // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'
+         if (propValue['@@toStringTag'] === 'Symbol') {
+           return true;
          }
-         if (Array.isArray(dispatchListeners)) {
-           for (var i = 0; i < dispatchListeners.length; i++) {
-             if (event.isPropagationStopped()) {
-               break;
-             }
-             // Listeners and IDs are two parallel arrays that are always in sync.
-             executeDispatch(event, simulated, dispatchListeners[i], dispatchIDs[i]);
-           }
-         } else if (dispatchListeners) {
-           executeDispatch(event, simulated, dispatchListeners, dispatchIDs);
+       
+         // Fallback for non-spec compliant Symbols which are polyfilled.
+         if (typeof Symbol === 'function' && propValue instanceof Symbol) {
+           return true;
          }
-         event._dispatchListeners = null;
-         event._dispatchIDs = null;
+       
+         return false;
        }
        
-       /**
-        * Standard/simple iteration through an event's collected dispatches, but stops
-        * at the first dispatch execution returning true, and returns that id.
-        *
-        * @return {?string} id of the first dispatch execution who's listener returns
-        * true, or null if no listener returned true.
-        */
-       function executeDispatchesInOrderStopAtTrueImpl(event) {
-         var dispatchListeners = event._dispatchListeners;
-         var dispatchIDs = event._dispatchIDs;
-         if (process.env.NODE_ENV !== 'production') {
-           validateEventDispatches(event);
+       // Equivalent of `typeof` but with special handling for array and regexp.
+       function getPropType(propValue) {
+         var propType = typeof propValue;
+         if (Array.isArray(propValue)) {
+           return 'array';
          }
-         if (Array.isArray(dispatchListeners)) {
-           for (var i = 0; i < dispatchListeners.length; i++) {
-             if (event.isPropagationStopped()) {
-               break;
-             }
-             // Listeners and IDs are two parallel arrays that are always in sync.
-             if (dispatchListeners[i](event, dispatchIDs[i])) {
-               return dispatchIDs[i];
-             }
-           }
-         } else if (dispatchListeners) {
-           if (dispatchListeners(event, dispatchIDs)) {
-             return dispatchIDs;
+         if (propValue instanceof RegExp) {
+           // Old webkits (at least until Android 4.0) return 'function' rather than
+           // 'object' for typeof a RegExp. We'll normalize this here so that /bla/
+           // passes PropTypes.object.
+           return 'object';
+         }
+         if (isSymbol(propType, propValue)) {
+           return 'symbol';
+         }
+         return propType;
+       }
+       
+       // This handles more types than `getPropType`. Only used for error messages.
+       // See `createPrimitiveTypeChecker`.
+       function getPreciseType(propValue) {
+         var propType = getPropType(propValue);
+         if (propType === 'object') {
+           if (propValue instanceof Date) {
+             return 'date';
+           } else if (propValue instanceof RegExp) {
+             return 'regexp';
            }
          }
-         return null;
+         return propType;
        }
        
-       /**
-        * @see executeDispatchesInOrderStopAtTrueImpl
-        */
-       function executeDispatchesInOrderStopAtTrue(event) {
-         var ret = executeDispatchesInOrderStopAtTrueImpl(event);
-         event._dispatchIDs = null;
-         event._dispatchListeners = null;
-         return ret;
+       // Returns class name of the object, if any.
+       function getClassName(propValue) {
+         if (!propValue.constructor || !propValue.constructor.name) {
+           return ANONYMOUS;
+         }
+         return propValue.constructor.name;
        }
        
+       module.exports = ReactPropTypes;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
+
+/***/ },
+/* 35 */
+/***/ function(module, exports) {
+
        /**
-        * Execution of a "direct" dispatch - there must be at most one dispatch
-        * accumulated on the event or it is considered an error. It doesn't really make
-        * sense for an event with multiple dispatches (bubbled) to keep track of the
-        * return values at each dispatch execution, but it does tend to make sense when
-        * dealing with "direct" dispatches.
+        * Copyright 2013-present, Facebook, Inc.
+        * All rights reserved.
         *
-        * @return {*} The return value of executing the single dispatch.
+        * 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.
+        *
+        * @providesModule ReactVersion
         */
-       function executeDirectDispatch(event) {
-         if (process.env.NODE_ENV !== 'production') {
-           validateEventDispatches(event);
-         }
-         var dispatchListener = event._dispatchListeners;
-         var dispatchID = event._dispatchIDs;
-         !!Array.isArray(dispatchListener) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'executeDirectDispatch(...): Invalid `event`.') : invariant(false) : undefined;
-         var res = dispatchListener ? dispatchListener(event, dispatchID) : null;
-         event._dispatchListeners = null;
-         event._dispatchIDs = null;
-         return res;
-       }
        
-       /**
-        * @param {SyntheticEvent} event
-        * @return {boolean} True iff number of dispatches accumulated is greater than 0.
-        */
-       function hasDispatches(event) {
-         return !!event._dispatchListeners;
-       }
+       'use strict';
        
-       /**
-        * General utilities that are useful in creating custom Event Plugins.
+       module.exports = '15.3.0';
+
+/***/ },
+/* 36 */
+/***/ function(module, exports, __webpack_require__) {
+
+       /* WEBPACK VAR INJECTION */(function(process) {/**
+        * Copyright 2013-present, 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.
+        *
+        * @providesModule onlyChild
         */
-       var EventPluginUtils = {
-         isEndish: isEndish,
-         isMoveish: isMoveish,
-         isStartish: isStartish,
+       'use strict';
        
-         executeDirectDispatch: executeDirectDispatch,
-         executeDispatchesInOrder: executeDispatchesInOrder,
-         executeDispatchesInOrderStopAtTrue: executeDispatchesInOrderStopAtTrue,
-         hasDispatches: hasDispatches,
+       var _prodInvariant = __webpack_require__(9);
        
-         getNode: function (id) {
-           return injection.Mount.getNode(id);
-         },
-         getID: function (node) {
-           return injection.Mount.getID(node);
-         },
+       var ReactElement = __webpack_require__(11);
        
-         injection: injection
-       };
+       var invariant = __webpack_require__(10);
        
-       module.exports = EventPluginUtils;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
+       /**
+        * Returns the first child in a collection of children and verifies that there
+        * is only one child in the collection.
+        *
+        * See https://facebook.github.io/react/docs/top-level-api.html#react.children.only
+        *
+        * The current implementation of this function assumes that a single child gets
+        * passed without a wrapper, but the purpose of this helper function is to
+        * abstract away the particular structure of children.
+        *
+        * @param {?object} children Child collection structure.
+        * @return {ReactElement} The first and only `ReactElement` contained in the
+        * structure.
+        */
+       function onlyChild(children) {
+         !ReactElement.isValidElement(children) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'onlyChild must be passed a children with exactly one child.') : _prodInvariant('23') : void 0;
+         return children;
+       }
+       
+       module.exports = onlyChild;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
 
 /***/ },
-/* 36 */
+/* 37 */
+/***/ function(module, exports, __webpack_require__) {
+
+       'use strict';
+       
+       module.exports = __webpack_require__(38);
+
+
+/***/ },
+/* 38 */
 /***/ function(module, exports, __webpack_require__) {
 
        /* WEBPACK VAR INJECTION */(function(process) {/**
-        * Copyright 2013-2015, Facebook, Inc.
+        * Copyright 2013-present, 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.
         *
-        * @providesModule ReactErrorUtils
-        * @typechecks
+        * @providesModule ReactDOM
         */
        
+       /* globals __REACT_DEVTOOLS_GLOBAL_HOOK__*/
+       
        'use strict';
        
-       var caughtError = null;
+       var ReactDOMComponentTree = __webpack_require__(39);
+       var ReactDefaultInjection = __webpack_require__(42);
+       var ReactMount = __webpack_require__(169);
+       var ReactReconciler = __webpack_require__(62);
+       var ReactUpdates = __webpack_require__(59);
+       var ReactVersion = __webpack_require__(35);
        
-       /**
-        * Call a function while guarding against errors that happens within it.
-        *
-        * @param {?String} name of the guard to use for logging or debugging
-        * @param {Function} func The function to invoke
-        * @param {*} a First argument
-        * @param {*} b Second argument
-        */
-       function invokeGuardedCallback(name, func, a, b) {
-         try {
-           return func(a, b);
-         } catch (x) {
-           if (caughtError === null) {
-             caughtError = x;
-           }
-           return undefined;
-         }
-       }
+       var findDOMNode = __webpack_require__(174);
+       var getHostComponentFromComposite = __webpack_require__(175);
+       var renderSubtreeIntoContainer = __webpack_require__(176);
+       var warning = __webpack_require__(13);
        
-       var ReactErrorUtils = {
-         invokeGuardedCallback: invokeGuardedCallback,
+       ReactDefaultInjection.inject();
        
-         /**
-          * Invoked by ReactTestUtils.Simulate so that any errors thrown by the event
-          * handler are sure to be rethrown by rethrowCaughtError.
-          */
-         invokeGuardedCallbackWithCatch: invokeGuardedCallback,
+       var ReactDOM = {
+         findDOMNode: findDOMNode,
+         render: ReactMount.render,
+         unmountComponentAtNode: ReactMount.unmountComponentAtNode,
+         version: ReactVersion,
        
-         /**
-          * During execution of guarded functions we will capture the first error which
-          * we will rethrow to be handled by the top level error handler.
-          */
-         rethrowCaughtError: function () {
-           if (caughtError) {
-             var error = caughtError;
-             caughtError = null;
-             throw error;
-           }
-         }
+         /* eslint-disable camelcase */
+         unstable_batchedUpdates: ReactUpdates.batchedUpdates,
+         unstable_renderSubtreeIntoContainer: renderSubtreeIntoContainer
        };
        
+       // Inject the runtime into a devtools global hook regardless of browser.
+       // Allows for debugging when the hook is injected on the page.
+       /* eslint-enable camelcase */
+       if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' && typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.inject === 'function') {
+         __REACT_DEVTOOLS_GLOBAL_HOOK__.inject({
+           ComponentTree: {
+             getClosestInstanceFromNode: ReactDOMComponentTree.getClosestInstanceFromNode,
+             getNodeFromInstance: function (inst) {
+               // inst is an internal instance (but could be a composite)
+               if (inst._renderedComponent) {
+                 inst = getHostComponentFromComposite(inst);
+               }
+               if (inst) {
+                 return ReactDOMComponentTree.getNodeFromInstance(inst);
+               } else {
+                 return null;
+               }
+             }
+           },
+           Mount: ReactMount,
+           Reconciler: ReactReconciler
+         });
+       }
+       
        if (process.env.NODE_ENV !== 'production') {
-         /**
-          * To help development we can get better devtools integration by simulating a
-          * real browser event.
-          */
-         if (typeof window !== 'undefined' && typeof window.dispatchEvent === 'function' && typeof document !== 'undefined' && typeof document.createEvent === 'function') {
-           var fakeNode = document.createElement('react');
-           ReactErrorUtils.invokeGuardedCallback = function (name, func, a, b) {
-             var boundFunc = func.bind(null, a, b);
-             var evtType = 'react-' + name;
-             fakeNode.addEventListener(evtType, boundFunc, false);
-             var evt = document.createEvent('Event');
-             evt.initEvent(evtType, false, false);
-             fakeNode.dispatchEvent(evt);
-             fakeNode.removeEventListener(evtType, boundFunc, false);
-           };
+         var ExecutionEnvironment = __webpack_require__(52);
+         if (ExecutionEnvironment.canUseDOM && window.top === window.self) {
+       
+           // First check if devtools is not installed
+           if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined') {
+             // If we're in Chrome or Firefox, provide a download link if not installed.
+             if (navigator.userAgent.indexOf('Chrome') > -1 && navigator.userAgent.indexOf('Edge') === -1 || navigator.userAgent.indexOf('Firefox') > -1) {
+               // Firefox does not have the issue with devtools loaded over file://
+               var showFileUrlMessage = window.location.protocol.indexOf('http') === -1 && navigator.userAgent.indexOf('Firefox') === -1;
+               console.debug('Download the React DevTools ' + (showFileUrlMessage ? 'and use an HTTP server (instead of a file: URL) ' : '') + 'for a better development experience: ' + 'https://fb.me/react-devtools');
+             }
+           }
+       
+           var testFunc = function testFn() {};
+           process.env.NODE_ENV !== 'production' ? warning((testFunc.name || testFunc.toString()).indexOf('testFn') !== -1, 'It looks like you\'re using a minified copy of the development build ' + 'of React. When deploying React apps to production, make sure to use ' + 'the production build which skips development warnings and is faster. ' + 'See https://fb.me/react-minification for more details.') : void 0;
+       
+           // If we're in IE8, check to see if we are in compatibility mode and provide
+           // information on preventing compatibility mode
+           var ieCompatibilityMode = document.documentMode && document.documentMode < 8;
+       
+           process.env.NODE_ENV !== 'production' ? warning(!ieCompatibilityMode, 'Internet Explorer is running in compatibility mode; please add the ' + 'following tag to your HTML to prevent this from happening: ' + '<meta http-equiv="X-UA-Compatible" content="IE=edge" />') : void 0;
+       
+           var expectedFeatures = [
+           // shims
+           Array.isArray, Array.prototype.every, Array.prototype.forEach, Array.prototype.indexOf, Array.prototype.map, Date.now, Function.prototype.bind, Object.keys, String.prototype.split, String.prototype.trim];
+       
+           for (var i = 0; i < expectedFeatures.length; i++) {
+             if (!expectedFeatures[i]) {
+               process.env.NODE_ENV !== 'production' ? warning(false, 'One or more ES5 shims expected by React are not available: ' + 'https://fb.me/react-warning-polyfills') : void 0;
+               break;
+             }
+           }
          }
        }
        
-       module.exports = ReactErrorUtils;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
+       module.exports = ReactDOM;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
 
 /***/ },
-/* 37 */
+/* 39 */
 /***/ function(module, exports, __webpack_require__) {
 
        /* WEBPACK VAR INJECTION */(function(process) {/**
-        * Copyright 2014-2015, Facebook, Inc.
+        * Copyright 2013-present, 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.
         *
-        * @providesModule accumulateInto
+        * @providesModule ReactDOMComponentTree
         */
        
        'use strict';
        
-       var invariant = __webpack_require__(15);
+       var _prodInvariant = __webpack_require__(9);
+       
+       var DOMProperty = __webpack_require__(40);
+       var ReactDOMComponentFlags = __webpack_require__(41);
+       
+       var invariant = __webpack_require__(10);
+       
+       var ATTR_NAME = DOMProperty.ID_ATTRIBUTE_NAME;
+       var Flags = ReactDOMComponentFlags;
+       
+       var internalInstanceKey = '__reactInternalInstance$' + Math.random().toString(36).slice(2);
        
        /**
+        * Drill down (through composites and empty components) until we get a host or
+        * host text component.
         *
-        * Accumulates items that must not be null or undefined into the first one. This
-        * is used to conserve memory by avoiding array allocations, and thus sacrifices
-        * API cleanness. Since `current` can be null before being passed in and not
-        * null after this function, make sure to assign it back to `current`:
-        *
-        * `a = accumulateInto(a, b);`
+        * This is pretty polymorphic but unavoidable with the current structure we have
+        * for `_renderedChildren`.
+        */
+       function getRenderedHostOrTextFromComponent(component) {
+         var rendered;
+         while (rendered = component._renderedComponent) {
+           component = rendered;
+         }
+         return component;
+       }
+       
+       /**
+        * Populate `_hostNode` on the rendered host/text component with the given
+        * DOM node. The passed `inst` can be a composite.
+        */
+       function precacheNode(inst, node) {
+         var hostInst = getRenderedHostOrTextFromComponent(inst);
+         hostInst._hostNode = node;
+         node[internalInstanceKey] = hostInst;
+       }
+       
+       function uncacheNode(inst) {
+         var node = inst._hostNode;
+         if (node) {
+           delete node[internalInstanceKey];
+           inst._hostNode = null;
+         }
+       }
+       
+       /**
+        * Populate `_hostNode` on each child of `inst`, assuming that the children
+        * match up with the DOM (element) children of `node`.
         *
-        * This API should be sparingly used. Try `accumulate` for something cleaner.
+        * We cache entire levels at once to avoid an n^2 problem where we access the
+        * children of a node sequentially and have to walk from the start to our target
+        * node every time.
         *
-        * @return {*|array<*>} An accumulation of items.
+        * Since we update `_renderedChildren` and the actual DOM at (slightly)
+        * different times, we could race here and see a newer `_renderedChildren` than
+        * the DOM nodes we see. To avoid this, ReactMultiChild calls
+        * `prepareToManageChildren` before we change `_renderedChildren`, at which
+        * time the container's child nodes are always cached (until it unmounts).
         */
+       function precacheChildNodes(inst, node) {
+         if (inst._flags & Flags.hasCachedChildNodes) {
+           return;
+         }
+         var children = inst._renderedChildren;
+         var childNode = node.firstChild;
+         outer: for (var name in children) {
+           if (!children.hasOwnProperty(name)) {
+             continue;
+           }
+           var childInst = children[name];
+           var childID = getRenderedHostOrTextFromComponent(childInst)._domID;
+           if (childID == null) {
+             // We're currently unmounting this child in ReactMultiChild; skip it.
+             continue;
+           }
+           // We assume the child nodes are in the same order as the child instances.
+           for (; childNode !== null; childNode = childNode.nextSibling) {
+             if (childNode.nodeType === 1 && childNode.getAttribute(ATTR_NAME) === String(childID) || childNode.nodeType === 8 && childNode.nodeValue === ' react-text: ' + childID + ' ' || childNode.nodeType === 8 && childNode.nodeValue === ' react-empty: ' + childID + ' ') {
+               precacheNode(childInst, childNode);
+               continue outer;
+             }
+           }
+           // We reached the end of the DOM children without finding an ID match.
+            true ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Unable to find element with ID %s.', childID) : _prodInvariant('32', childID) : void 0;
+         }
+         inst._flags |= Flags.hasCachedChildNodes;
+       }
        
-       function accumulateInto(current, next) {
-         !(next != null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'accumulateInto(...): Accumulated items must not be null or undefined.') : invariant(false) : undefined;
-         if (current == null) {
-           return next;
+       /**
+        * Given a DOM node, return the closest ReactDOMComponent or
+        * ReactDOMTextComponent instance ancestor.
+        */
+       function getClosestInstanceFromNode(node) {
+         if (node[internalInstanceKey]) {
+           return node[internalInstanceKey];
          }
        
-         // Both are not empty. Warning: Never call x.concat(y) when you are not
-         // certain that x is an Array (x could be a string with concat method).
-         var currentIsArray = Array.isArray(current);
-         var nextIsArray = Array.isArray(next);
+         // Walk up the tree until we find an ancestor whose instance we have cached.
+         var parents = [];
+         while (!node[internalInstanceKey]) {
+           parents.push(node);
+           if (node.parentNode) {
+             node = node.parentNode;
+           } else {
+             // Top of the tree. This node must not be part of a React tree (or is
+             // unmounted, potentially).
+             return null;
+           }
+         }
        
-         if (currentIsArray && nextIsArray) {
-           current.push.apply(current, next);
-           return current;
+         var closest;
+         var inst;
+         for (; node && (inst = node[internalInstanceKey]); node = parents.pop()) {
+           closest = inst;
+           if (parents.length) {
+             precacheChildNodes(inst, node);
+           }
          }
        
-         if (currentIsArray) {
-           current.push(next);
-           return current;
+         return closest;
+       }
+       
+       /**
+        * Given a DOM node, return the ReactDOMComponent or ReactDOMTextComponent
+        * instance, or null if the node was not rendered by this React.
+        */
+       function getInstanceFromNode(node) {
+         var inst = getClosestInstanceFromNode(node);
+         if (inst != null && inst._hostNode === node) {
+           return inst;
+         } else {
+           return null;
          }
+       }
        
-         if (nextIsArray) {
-           // A bit too dangerous to mutate `next`.
-           return [current].concat(next);
+       /**
+        * Given a ReactDOMComponent or ReactDOMTextComponent, return the corresponding
+        * DOM node.
+        */
+       function getNodeFromInstance(inst) {
+         // Without this first invariant, passing a non-DOM-component triggers the next
+         // invariant for a missing parent, which is super confusing.
+         !(inst._hostNode !== undefined) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'getNodeFromInstance: Invalid argument.') : _prodInvariant('33') : void 0;
+       
+         if (inst._hostNode) {
+           return inst._hostNode;
          }
        
-         return [current, next];
+         // Walk up the tree until we find an ancestor whose DOM node we have cached.
+         var parents = [];
+         while (!inst._hostNode) {
+           parents.push(inst);
+           !inst._hostParent ? process.env.NODE_ENV !== 'production' ? invariant(false, 'React DOM tree root should always have a node reference.') : _prodInvariant('34') : void 0;
+           inst = inst._hostParent;
+         }
+       
+         // Now parents contains each ancestor that does *not* have a cached native
+         // node, and `inst` is the deepest ancestor that does.
+         for (; parents.length; inst = parents.pop()) {
+           precacheChildNodes(inst, inst._hostNode);
+         }
+       
+         return inst._hostNode;
        }
        
-       module.exports = accumulateInto;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
+       var ReactDOMComponentTree = {
+         getClosestInstanceFromNode: getClosestInstanceFromNode,
+         getInstanceFromNode: getInstanceFromNode,
+         getNodeFromInstance: getNodeFromInstance,
+         precacheChildNodes: precacheChildNodes,
+         precacheNode: precacheNode,
+         uncacheNode: uncacheNode
+       };
+       
+       module.exports = ReactDOMComponentTree;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
 
 /***/ },
-/* 38 */
-/***/ function(module, exports) {
+/* 40 */
+/***/ function(module, exports, __webpack_require__) {
 
-       /**
-        * Copyright 2013-2015, Facebook, Inc.
+       /* WEBPACK VAR INJECTION */(function(process) {/**
+        * Copyright 2013-present, 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.
         *
-        * @providesModule forEachAccumulated
+        * @providesModule DOMProperty
         */
        
        'use strict';
        
-       /**
-        * @param {array} arr an "accumulation" of items which is either an Array or
-        * a single item. Useful when paired with the `accumulate` module. This is a
-        * simple utility that allows us to reason about a collection of items, but
-        * handling the case when there is exactly one item (and we do not need to
-        * allocate an array).
-        */
-       var forEachAccumulated = function (arr, cb, scope) {
-         if (Array.isArray(arr)) {
-           arr.forEach(cb, scope);
-         } else if (arr) {
-           cb.call(scope, arr);
-         }
-       };
-       
-       module.exports = forEachAccumulated;
-
-/***/ },
-/* 39 */
-/***/ 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.
-        *
-        * @providesModule ReactEventEmitterMixin
-        */
-       
-       'use strict';
+       var _prodInvariant = __webpack_require__(9);
        
-       var EventPluginHub = __webpack_require__(33);
+       var invariant = __webpack_require__(10);
        
-       function runEventQueueInBatch(events) {
-         EventPluginHub.enqueueEvents(events);
-         EventPluginHub.processEventQueue(false);
+       function checkMask(value, bitmask) {
+         return (value & bitmask) === bitmask;
        }
        
-       var ReactEventEmitterMixin = {
+       var DOMPropertyInjection = {
+         /**
+          * Mapping from normalized, camelcased property names to a configuration that
+          * specifies how the associated DOM property should be accessed or rendered.
+          */
+         MUST_USE_PROPERTY: 0x1,
+         HAS_BOOLEAN_VALUE: 0x4,
+         HAS_NUMERIC_VALUE: 0x8,
+         HAS_POSITIVE_NUMERIC_VALUE: 0x10 | 0x8,
+         HAS_OVERLOADED_BOOLEAN_VALUE: 0x20,
        
          /**
-          * Streams a fired top-level event to `EventPluginHub` where plugins have the
-          * opportunity to create `ReactEvent`s to be dispatched.
+          * Inject some specialized knowledge about the DOM. This takes a config object
+          * with the following properties:
           *
-          * @param {string} topLevelType Record from `EventConstants`.
-          * @param {object} topLevelTarget The listening component root node.
-          * @param {string} topLevelTargetID ID of `topLevelTarget`.
-          * @param {object} nativeEvent Native environment event.
+          * isCustomAttribute: function that given an attribute name will return true
+          * if it can be inserted into the DOM verbatim. Useful for data-* or aria-*
+          * attributes where it's impossible to enumerate all of the possible
+          * attribute names,
+          *
+          * Properties: object mapping DOM property name to one of the
+          * DOMPropertyInjection constants or null. If your attribute isn't in here,
+          * it won't get written to the DOM.
+          *
+          * DOMAttributeNames: object mapping React attribute name to the DOM
+          * attribute name. Attribute names not specified use the **lowercase**
+          * normalized name.
+          *
+          * DOMAttributeNamespaces: object mapping React attribute name to the DOM
+          * attribute namespace URL. (Attribute names not specified use no namespace.)
+          *
+          * DOMPropertyNames: similar to DOMAttributeNames but for DOM properties.
+          * Property names not specified use the normalized name.
+          *
+          * DOMMutationMethods: Properties that require special mutation methods. If
+          * `value` is undefined, the mutation method should unset the property.
+          *
+          * @param {object} domPropertyConfig the config as described above.
           */
-         handleTopLevel: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) {
-           var events = EventPluginHub.extractEvents(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget);
-           runEventQueueInBatch(events);
+         injectDOMPropertyConfig: function (domPropertyConfig) {
+           var Injection = DOMPropertyInjection;
+           var Properties = domPropertyConfig.Properties || {};
+           var DOMAttributeNamespaces = domPropertyConfig.DOMAttributeNamespaces || {};
+           var DOMAttributeNames = domPropertyConfig.DOMAttributeNames || {};
+           var DOMPropertyNames = domPropertyConfig.DOMPropertyNames || {};
+           var DOMMutationMethods = domPropertyConfig.DOMMutationMethods || {};
+       
+           if (domPropertyConfig.isCustomAttribute) {
+             DOMProperty._isCustomAttributeFunctions.push(domPropertyConfig.isCustomAttribute);
+           }
+       
+           for (var propName in Properties) {
+             !!DOMProperty.properties.hasOwnProperty(propName) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'injectDOMPropertyConfig(...): You\'re trying to inject DOM property \'%s\' which has already been injected. You may be accidentally injecting the same DOM property config twice, or you may be injecting two configs that have conflicting property names.', propName) : _prodInvariant('48', propName) : void 0;
+       
+             var lowerCased = propName.toLowerCase();
+             var propConfig = Properties[propName];
+       
+             var propertyInfo = {
+               attributeName: lowerCased,
+               attributeNamespace: null,
+               propertyName: propName,
+               mutationMethod: null,
+       
+               mustUseProperty: checkMask(propConfig, Injection.MUST_USE_PROPERTY),
+               hasBooleanValue: checkMask(propConfig, Injection.HAS_BOOLEAN_VALUE),
+               hasNumericValue: checkMask(propConfig, Injection.HAS_NUMERIC_VALUE),
+               hasPositiveNumericValue: checkMask(propConfig, Injection.HAS_POSITIVE_NUMERIC_VALUE),
+               hasOverloadedBooleanValue: checkMask(propConfig, Injection.HAS_OVERLOADED_BOOLEAN_VALUE)
+             };
+             !(propertyInfo.hasBooleanValue + propertyInfo.hasNumericValue + propertyInfo.hasOverloadedBooleanValue <= 1) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'DOMProperty: Value can be one of boolean, overloaded boolean, or numeric value, but not a combination: %s', propName) : _prodInvariant('50', propName) : void 0;
+       
+             if (process.env.NODE_ENV !== 'production') {
+               DOMProperty.getPossibleStandardName[lowerCased] = propName;
+             }
+       
+             if (DOMAttributeNames.hasOwnProperty(propName)) {
+               var attributeName = DOMAttributeNames[propName];
+               propertyInfo.attributeName = attributeName;
+               if (process.env.NODE_ENV !== 'production') {
+                 DOMProperty.getPossibleStandardName[attributeName] = propName;
+               }
+             }
+       
+             if (DOMAttributeNamespaces.hasOwnProperty(propName)) {
+               propertyInfo.attributeNamespace = DOMAttributeNamespaces[propName];
+             }
+       
+             if (DOMPropertyNames.hasOwnProperty(propName)) {
+               propertyInfo.propertyName = DOMPropertyNames[propName];
+             }
+       
+             if (DOMMutationMethods.hasOwnProperty(propName)) {
+               propertyInfo.mutationMethod = DOMMutationMethods[propName];
+             }
+       
+             DOMProperty.properties[propName] = propertyInfo;
+           }
          }
        };
        
-       module.exports = ReactEventEmitterMixin;
-
-/***/ },
-/* 40 */
-/***/ function(module, exports) {
-
+       /* eslint-disable max-len */
+       var ATTRIBUTE_NAME_START_CHAR = ':A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD';
+       /* eslint-enable max-len */
+       
        /**
-        * Copyright 2013-2015, Facebook, Inc.
-        * All rights reserved.
+        * DOMProperty exports lookup objects that can be used like functions:
         *
-        * 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.
+        *   > DOMProperty.isValid['id']
+        *   true
+        *   > DOMProperty.isValid['foobar']
+        *   undefined
         *
-        * @providesModule ViewportMetrics
+        * Although this may be confusing, it performs better in general.
+        *
+        * @see http://jsperf.com/key-exists
+        * @see http://jsperf.com/key-missing
         */
+       var DOMProperty = {
        
-       'use strict';
+         ID_ATTRIBUTE_NAME: 'data-reactid',
+         ROOT_ATTRIBUTE_NAME: 'data-reactroot',
        
-       var ViewportMetrics = {
+         ATTRIBUTE_NAME_START_CHAR: ATTRIBUTE_NAME_START_CHAR,
+         ATTRIBUTE_NAME_CHAR: ATTRIBUTE_NAME_START_CHAR + '\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040',
        
-         currentScrollLeft: 0,
+         /**
+          * Map from property "standard name" to an object with info about how to set
+          * the property in the DOM. Each object contains:
+          *
+          * attributeName:
+          *   Used when rendering markup or with `*Attribute()`.
+          * attributeNamespace
+          * propertyName:
+          *   Used on DOM node instances. (This includes properties that mutate due to
+          *   external factors.)
+          * mutationMethod:
+          *   If non-null, used instead of the property or `setAttribute()` after
+          *   initial render.
+          * mustUseProperty:
+          *   Whether the property must be accessed and mutated as an object property.
+          * hasBooleanValue:
+          *   Whether the property should be removed when set to a falsey value.
+          * hasNumericValue:
+          *   Whether the property must be numeric or parse as a numeric and should be
+          *   removed when set to a falsey value.
+          * hasPositiveNumericValue:
+          *   Whether the property must be positive numeric or parse as a positive
+          *   numeric and should be removed when set to a falsey value.
+          * hasOverloadedBooleanValue:
+          *   Whether the property can be used as a flag as well as with a value.
+          *   Removed when strictly equal to false; present without a value when
+          *   strictly equal to true; present with a value otherwise.
+          */
+         properties: {},
        
-         currentScrollTop: 0,
+         /**
+          * Mapping from lowercase property names to the properly cased version, used
+          * to warn in the case of missing properties. Available only in __DEV__.
+          * @type {Object}
+          */
+         getPossibleStandardName: process.env.NODE_ENV !== 'production' ? {} : null,
        
-         refreshScrollValues: function (scrollPosition) {
-           ViewportMetrics.currentScrollLeft = scrollPosition.x;
-           ViewportMetrics.currentScrollTop = scrollPosition.y;
-         }
+         /**
+          * All of the isCustomAttribute() functions that have been injected.
+          */
+         _isCustomAttributeFunctions: [],
+       
+         /**
+          * Checks whether a property name is a custom attribute.
+          * @method
+          */
+         isCustomAttribute: function (attributeName) {
+           for (var i = 0; i < DOMProperty._isCustomAttributeFunctions.length; i++) {
+             var isCustomAttributeFn = DOMProperty._isCustomAttributeFunctions[i];
+             if (isCustomAttributeFn(attributeName)) {
+               return true;
+             }
+           }
+           return false;
+         },
        
+         injection: DOMPropertyInjection
        };
        
-       module.exports = ViewportMetrics;
+       module.exports = DOMProperty;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
 
 /***/ },
 /* 41 */
 /***/ function(module, exports) {
 
        /**
-        * Copyright 2014-2015, Facebook, Inc.
+        * Copyright 2015-present, 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.
         *
-        * @providesModule Object.assign
+        * @providesModule ReactDOMComponentFlags
         */
        
-       // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.assign
-       
        'use strict';
        
-       function assign(target, sources) {
-         if (target == null) {
-           throw new TypeError('Object.assign target cannot be null or undefined');
-         }
-       
-         var to = Object(target);
-         var hasOwnProperty = Object.prototype.hasOwnProperty;
-       
-         for (var nextIndex = 1; nextIndex < arguments.length; nextIndex++) {
-           var nextSource = arguments[nextIndex];
-           if (nextSource == null) {
-             continue;
-           }
-       
-           var from = Object(nextSource);
-       
-           // We don't currently support accessors nor proxies. Therefore this
-           // copy cannot throw. If we ever supported this then we must handle
-           // exceptions and side-effects. We don't support symbols so they won't
-           // be transferred.
-       
-           for (var key in from) {
-             if (hasOwnProperty.call(from, key)) {
-               to[key] = from[key];
-             }
-           }
-         }
-       
-         return to;
-       }
+       var ReactDOMComponentFlags = {
+         hasCachedChildNodes: 1 << 0
+       };
        
-       module.exports = assign;
+       module.exports = ReactDOMComponentFlags;
 
 /***/ },
 /* 42 */
 /***/ function(module, exports, __webpack_require__) {
 
        /**
-        * Copyright 2013-2015, Facebook, Inc.
+        * Copyright 2013-present, 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.
         *
-        * @providesModule isEventSupported
+        * @providesModule ReactDefaultInjection
         */
        
        'use strict';
        
-       var ExecutionEnvironment = __webpack_require__(11);
+       var BeforeInputEventPlugin = __webpack_require__(43);
+       var ChangeEventPlugin = __webpack_require__(58);
+       var DefaultEventPluginOrder = __webpack_require__(76);
+       var EnterLeaveEventPlugin = __webpack_require__(77);
+       var HTMLDOMPropertyConfig = __webpack_require__(82);
+       var ReactComponentBrowserEnvironment = __webpack_require__(83);
+       var ReactDOMComponent = __webpack_require__(97);
+       var ReactDOMComponentTree = __webpack_require__(39);
+       var ReactDOMEmptyComponent = __webpack_require__(140);
+       var ReactDOMTreeTraversal = __webpack_require__(141);
+       var ReactDOMTextComponent = __webpack_require__(142);
+       var ReactDefaultBatchingStrategy = __webpack_require__(143);
+       var ReactEventListener = __webpack_require__(144);
+       var ReactInjection = __webpack_require__(147);
+       var ReactReconcileTransaction = __webpack_require__(148);
+       var SVGDOMPropertyConfig = __webpack_require__(156);
+       var SelectEventPlugin = __webpack_require__(157);
+       var SimpleEventPlugin = __webpack_require__(158);
        
-       var useHasFeature;
-       if (ExecutionEnvironment.canUseDOM) {
-         useHasFeature = document.implementation && document.implementation.hasFeature &&
-         // always returns true in newer browsers as per the standard.
-         // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature
-         document.implementation.hasFeature('', '') !== true;
-       }
+       var alreadyInjected = false;
        
-       /**
-        * Checks if an event is supported in the current execution environment.
-        *
-        * NOTE: This will not work correctly for non-generic events such as `change`,
-        * `reset`, `load`, `error`, and `select`.
-        *
-        * Borrows from Modernizr.
-        *
-        * @param {string} eventNameSuffix Event name, e.g. "click".
-        * @param {?boolean} capture Check if the capture phase is supported.
-        * @return {boolean} True if the event is supported.
-        * @internal
-        * @license Modernizr 3.0.0pre (Custom Build) | MIT
-        */
-       function isEventSupported(eventNameSuffix, capture) {
-         if (!ExecutionEnvironment.canUseDOM || capture && !('addEventListener' in document)) {
-           return false;
+       function inject() {
+         if (alreadyInjected) {
+           // TODO: This is currently true because these injections are shared between
+           // the client and the server package. They should be built independently
+           // and not share any injection state. Then this problem will be solved.
+           return;
          }
+         alreadyInjected = true;
        
-         var eventName = 'on' + eventNameSuffix;
-         var isSupported = (eventName in document);
+         ReactInjection.EventEmitter.injectReactEventListener(ReactEventListener);
        
-         if (!isSupported) {
-           var element = document.createElement('div');
-           element.setAttribute(eventName, 'return;');
-           isSupported = typeof element[eventName] === 'function';
-         }
+         /**
+          * Inject modules for resolving DOM hierarchy and plugin ordering.
+          */
+         ReactInjection.EventPluginHub.injectEventPluginOrder(DefaultEventPluginOrder);
+         ReactInjection.EventPluginUtils.injectComponentTree(ReactDOMComponentTree);
+         ReactInjection.EventPluginUtils.injectTreeTraversal(ReactDOMTreeTraversal);
        
-         if (!isSupported && useHasFeature && eventNameSuffix === 'wheel') {
-           // This is the only way to test support for the `wheel` event in IE9+.
-           isSupported = document.implementation.hasFeature('Events.wheel', '3.0');
-         }
+         /**
+          * Some important event plugins included by default (without having to require
+          * them).
+          */
+         ReactInjection.EventPluginHub.injectEventPluginsByName({
+           SimpleEventPlugin: SimpleEventPlugin,
+           EnterLeaveEventPlugin: EnterLeaveEventPlugin,
+           ChangeEventPlugin: ChangeEventPlugin,
+           SelectEventPlugin: SelectEventPlugin,
+           BeforeInputEventPlugin: BeforeInputEventPlugin
+         });
        
-         return isSupported;
+         ReactInjection.HostComponent.injectGenericComponentClass(ReactDOMComponent);
+       
+         ReactInjection.HostComponent.injectTextComponentClass(ReactDOMTextComponent);
+       
+         ReactInjection.DOMProperty.injectDOMPropertyConfig(HTMLDOMPropertyConfig);
+         ReactInjection.DOMProperty.injectDOMPropertyConfig(SVGDOMPropertyConfig);
+       
+         ReactInjection.EmptyComponent.injectEmptyComponentFactory(function (instantiate) {
+           return new ReactDOMEmptyComponent(instantiate);
+         });
+       
+         ReactInjection.Updates.injectReconcileTransaction(ReactReconcileTransaction);
+         ReactInjection.Updates.injectBatchingStrategy(ReactDefaultBatchingStrategy);
+       
+         ReactInjection.Component.injectEnvironment(ReactComponentBrowserEnvironment);
        }
        
-       module.exports = isEventSupported;
+       module.exports = {
+         inject: inject
+       };
 
 /***/ },
 /* 43 */
-/***/ function(module, exports) {
+/***/ function(module, exports, __webpack_require__) {
 
        /**
-        * Copyright 2013-2015, Facebook, Inc.
+        * Copyright 2013-present 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.
         *
-        * @providesModule ReactDOMFeatureFlags
+        * @providesModule BeforeInputEventPlugin
         */
        
        'use strict';
        
-       var ReactDOMFeatureFlags = {
-         useCreateElement: false
-       };
+       var EventConstants = __webpack_require__(44);
+       var EventPropagators = __webpack_require__(45);
+       var ExecutionEnvironment = __webpack_require__(52);
+       var FallbackCompositionState = __webpack_require__(53);
+       var SyntheticCompositionEvent = __webpack_require__(55);
+       var SyntheticInputEvent = __webpack_require__(57);
        
-       module.exports = ReactDOMFeatureFlags;
-
-/***/ },
-/* 44 */
-/***/ function(module, exports, __webpack_require__) {
-
-       /* WEBPACK VAR INJECTION */(function(process) {/**
-        * Copyright 2014-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.
-        *
-        * @providesModule ReactElement
-        */
+       var keyOf = __webpack_require__(27);
        
-       'use strict';
+       var END_KEYCODES = [9, 13, 27, 32]; // Tab, Return, Esc, Space
+       var START_KEYCODE = 229;
        
-       var ReactCurrentOwner = __webpack_require__(7);
+       var canUseCompositionEvent = ExecutionEnvironment.canUseDOM && 'CompositionEvent' in window;
        
-       var assign = __webpack_require__(41);
-       var canDefineProperty = __webpack_require__(45);
+       var documentMode = null;
+       if (ExecutionEnvironment.canUseDOM && 'documentMode' in document) {
+         documentMode = document.documentMode;
+       }
        
-       // The Symbol used to tag the ReactElement type. If there is no native Symbol
-       // nor polyfill, then a plain number is used for performance.
-       var REACT_ELEMENT_TYPE = typeof Symbol === 'function' && Symbol['for'] && Symbol['for']('react.element') || 0xeac7;
+       // Webkit offers a very useful `textInput` event that can be used to
+       // directly represent `beforeInput`. The IE `textinput` event is not as
+       // useful, so we don't use it.
+       var canUseTextInputEvent = ExecutionEnvironment.canUseDOM && 'TextEvent' in window && !documentMode && !isPresto();
        
-       var RESERVED_PROPS = {
-         key: true,
-         ref: true,
-         __self: true,
-         __source: true
-       };
+       // In IE9+, we have access to composition events, but the data supplied
+       // by the native compositionend event may be incorrect. Japanese ideographic
+       // spaces, for instance (\u3000) are not recorded correctly.
+       var useFallbackCompositionData = ExecutionEnvironment.canUseDOM && (!canUseCompositionEvent || documentMode && documentMode > 8 && documentMode <= 11);
        
        /**
-        * Base constructor for all React elements. This is only used to make this
-        * work with a dynamic instanceof check. Nothing should live on this prototype.
-        *
-        * @param {*} type
-        * @param {*} key
-        * @param {string|object} ref
-        * @param {*} self A *temporary* helper to detect places where `this` is
-        * different from the `owner` when React.createElement is called, so that we
-        * can warn. We want to get rid of owner and replace string `ref`s with arrow
-        * functions, and as long as `this` and owner are the same, there will be no
-        * change in behavior.
-        * @param {*} source An annotation object (added by a transpiler or otherwise)
-        * indicating filename, line number, and/or other information.
-        * @param {*} owner
-        * @param {*} props
-        * @internal
+        * Opera <= 12 includes TextEvent in window, but does not fire
+        * text input events. Rely on keypress instead.
         */
-       var ReactElement = function (type, key, ref, self, source, owner, props) {
-         var element = {
-           // This tag allow us to uniquely identify this as a React Element
-           $$typeof: REACT_ELEMENT_TYPE,
-       
-           // Built-in properties that belong on the element
-           type: type,
-           key: key,
-           ref: ref,
-           props: props,
+       function isPresto() {
+         var opera = window.opera;
+         return typeof opera === 'object' && typeof opera.version === 'function' && parseInt(opera.version(), 10) <= 12;
+       }
        
-           // Record the component responsible for creating this element.
-           _owner: owner
-         };
+       var SPACEBAR_CODE = 32;
+       var SPACEBAR_CHAR = String.fromCharCode(SPACEBAR_CODE);
        
-         if (process.env.NODE_ENV !== 'production') {
-           // The validation flag is currently mutative. We put it on
-           // an external backing store so that we can freeze the whole object.
-           // This can be replaced with a WeakMap once they are implemented in
-           // commonly used development environments.
-           element._store = {};
+       var topLevelTypes = EventConstants.topLevelTypes;
        
-           // To make comparing ReactElements easier for testing purposes, we make
-           // the validation flag non-enumerable (where possible, which should
-           // include every environment we run tests in), so the test framework
-           // ignores it.
-           if (canDefineProperty) {
-             Object.defineProperty(element._store, 'validated', {
-               configurable: false,
-               enumerable: false,
-               writable: true,
-               value: false
-             });
-             // self and source are DEV only properties.
-             Object.defineProperty(element, '_self', {
-               configurable: false,
-               enumerable: false,
-               writable: false,
-               value: self
-             });
-             // Two elements created in two different places should be considered
-             // equal for testing purposes and therefore we hide it from enumeration.
-             Object.defineProperty(element, '_source', {
-               configurable: false,
-               enumerable: false,
-               writable: false,
-               value: source
-             });
-           } else {
-             element._store.validated = false;
-             element._self = self;
-             element._source = source;
-           }
-           Object.freeze(element.props);
-           Object.freeze(element);
+       // Events and their corresponding property names.
+       var eventTypes = {
+         beforeInput: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onBeforeInput: null }),
+             captured: keyOf({ onBeforeInputCapture: null })
+           },
+           dependencies: [topLevelTypes.topCompositionEnd, topLevelTypes.topKeyPress, topLevelTypes.topTextInput, topLevelTypes.topPaste]
+         },
+         compositionEnd: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onCompositionEnd: null }),
+             captured: keyOf({ onCompositionEndCapture: null })
+           },
+           dependencies: [topLevelTypes.topBlur, topLevelTypes.topCompositionEnd, topLevelTypes.topKeyDown, topLevelTypes.topKeyPress, topLevelTypes.topKeyUp, topLevelTypes.topMouseDown]
+         },
+         compositionStart: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onCompositionStart: null }),
+             captured: keyOf({ onCompositionStartCapture: null })
+           },
+           dependencies: [topLevelTypes.topBlur, topLevelTypes.topCompositionStart, topLevelTypes.topKeyDown, topLevelTypes.topKeyPress, topLevelTypes.topKeyUp, topLevelTypes.topMouseDown]
+         },
+         compositionUpdate: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onCompositionUpdate: null }),
+             captured: keyOf({ onCompositionUpdateCapture: null })
+           },
+           dependencies: [topLevelTypes.topBlur, topLevelTypes.topCompositionUpdate, topLevelTypes.topKeyDown, topLevelTypes.topKeyPress, topLevelTypes.topKeyUp, topLevelTypes.topMouseDown]
          }
-       
-         return element;
        };
        
-       ReactElement.createElement = function (type, config, children) {
-         var propName;
-       
-         // Reserved names are extracted
-         var props = {};
+       // Track whether we've ever handled a keypress on the space key.
+       var hasSpaceKeypress = false;
        
-         var key = null;
-         var ref = null;
-         var self = null;
-         var source = null;
+       /**
+        * Return whether a native keypress event is assumed to be a command.
+        * This is required because Firefox fires `keypress` events for key commands
+        * (cut, copy, select-all, etc.) even though no character is inserted.
+        */
+       function isKeypressCommand(nativeEvent) {
+         return (nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) &&
+         // ctrlKey && altKey is equivalent to AltGr, and is not a command.
+         !(nativeEvent.ctrlKey && nativeEvent.altKey);
+       }
        
-         if (config != null) {
-           ref = config.ref === undefined ? null : config.ref;
-           key = config.key === undefined ? null : '' + config.key;
-           self = config.__self === undefined ? null : config.__self;
-           source = config.__source === undefined ? null : config.__source;
-           // Remaining properties are added to a new props object
-           for (propName in config) {
-             if (config.hasOwnProperty(propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {
-               props[propName] = config[propName];
-             }
-           }
+       /**
+        * Translate native top level events into event types.
+        *
+        * @param {string} topLevelType
+        * @return {object}
+        */
+       function getCompositionEventType(topLevelType) {
+         switch (topLevelType) {
+           case topLevelTypes.topCompositionStart:
+             return eventTypes.compositionStart;
+           case topLevelTypes.topCompositionEnd:
+             return eventTypes.compositionEnd;
+           case topLevelTypes.topCompositionUpdate:
+             return eventTypes.compositionUpdate;
          }
+       }
        
-         // Children can be more than one argument, and those are transferred onto
-         // the newly allocated props object.
-         var childrenLength = arguments.length - 2;
-         if (childrenLength === 1) {
-           props.children = children;
-         } else if (childrenLength > 1) {
-           var childArray = Array(childrenLength);
-           for (var i = 0; i < childrenLength; i++) {
-             childArray[i] = arguments[i + 2];
-           }
-           props.children = childArray;
-         }
+       /**
+        * Does our fallback best-guess model think this event signifies that
+        * composition has begun?
+        *
+        * @param {string} topLevelType
+        * @param {object} nativeEvent
+        * @return {boolean}
+        */
+       function isFallbackCompositionStart(topLevelType, nativeEvent) {
+         return topLevelType === topLevelTypes.topKeyDown && nativeEvent.keyCode === START_KEYCODE;
+       }
        
-         // Resolve default props
-         if (type && type.defaultProps) {
-           var defaultProps = type.defaultProps;
-           for (propName in defaultProps) {
-             if (typeof props[propName] === 'undefined') {
-               props[propName] = defaultProps[propName];
-             }
-           }
+       /**
+        * Does our fallback mode think that this event is the end of composition?
+        *
+        * @param {string} topLevelType
+        * @param {object} nativeEvent
+        * @return {boolean}
+        */
+       function isFallbackCompositionEnd(topLevelType, nativeEvent) {
+         switch (topLevelType) {
+           case topLevelTypes.topKeyUp:
+             // Command keys insert or clear IME input.
+             return END_KEYCODES.indexOf(nativeEvent.keyCode) !== -1;
+           case topLevelTypes.topKeyDown:
+             // Expect IME keyCode on each keydown. If we get any other
+             // code we must have exited earlier.
+             return nativeEvent.keyCode !== START_KEYCODE;
+           case topLevelTypes.topKeyPress:
+           case topLevelTypes.topMouseDown:
+           case topLevelTypes.topBlur:
+             // Events are not possible without cancelling IME.
+             return true;
+           default:
+             return false;
          }
+       }
        
-         return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);
-       };
-       
-       ReactElement.createFactory = function (type) {
-         var factory = ReactElement.createElement.bind(null, type);
-         // Expose the type on the factory and the prototype so that it can be
-         // easily accessed on elements. E.g. `<Foo />.type === Foo`.
-         // This should not be named `constructor` since this may not be the function
-         // that created the element, and it may not even be a constructor.
-         // Legacy hook TODO: Warn if this is accessed
-         factory.type = type;
-         return factory;
-       };
-       
-       ReactElement.cloneAndReplaceKey = function (oldElement, newKey) {
-         var newElement = ReactElement(oldElement.type, newKey, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, oldElement.props);
-       
-         return newElement;
-       };
-       
-       ReactElement.cloneAndReplaceProps = function (oldElement, newProps) {
-         var newElement = ReactElement(oldElement.type, oldElement.key, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, newProps);
-       
-         if (process.env.NODE_ENV !== 'production') {
-           // If the key on the original is valid, then the clone is valid
-           newElement._store.validated = oldElement._store.validated;
+       /**
+        * Google Input Tools provides composition data via a CustomEvent,
+        * with the `data` property populated in the `detail` object. If this
+        * is available on the event object, use it. If not, this is a plain
+        * composition event and we have nothing special to extract.
+        *
+        * @param {object} nativeEvent
+        * @return {?string}
+        */
+       function getDataFromCustomEvent(nativeEvent) {
+         var detail = nativeEvent.detail;
+         if (typeof detail === 'object' && 'data' in detail) {
+           return detail.data;
          }
+         return null;
+       }
        
-         return newElement;
-       };
-       
-       ReactElement.cloneElement = function (element, config, children) {
-         var propName;
+       // Track the current IME composition fallback object, if any.
+       var currentComposition = null;
        
-         // Original props are copied
-         var props = assign({}, element.props);
+       /**
+        * @return {?object} A SyntheticCompositionEvent.
+        */
+       function extractCompositionEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget) {
+         var eventType;
+         var fallbackData;
        
-         // Reserved names are extracted
-         var key = element.key;
-         var ref = element.ref;
-         // Self is preserved since the owner is preserved.
-         var self = element._self;
-         // Source is preserved since cloneElement is unlikely to be targeted by a
-         // transpiler, and the original source is probably a better indicator of the
-         // true owner.
-         var source = element._source;
+         if (canUseCompositionEvent) {
+           eventType = getCompositionEventType(topLevelType);
+         } else if (!currentComposition) {
+           if (isFallbackCompositionStart(topLevelType, nativeEvent)) {
+             eventType = eventTypes.compositionStart;
+           }
+         } else if (isFallbackCompositionEnd(topLevelType, nativeEvent)) {
+           eventType = eventTypes.compositionEnd;
+         }
        
-         // Owner will be preserved, unless ref is overridden
-         var owner = element._owner;
+         if (!eventType) {
+           return null;
+         }
        
-         if (config != null) {
-           if (config.ref !== undefined) {
-             // Silently steal the ref from the parent.
-             ref = config.ref;
-             owner = ReactCurrentOwner.current;
-           }
-           if (config.key !== undefined) {
-             key = '' + config.key;
-           }
-           // Remaining properties override existing props
-           for (propName in config) {
-             if (config.hasOwnProperty(propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {
-               props[propName] = config[propName];
+         if (useFallbackCompositionData) {
+           // The current composition is stored statically and must not be
+           // overwritten while composition continues.
+           if (!currentComposition && eventType === eventTypes.compositionStart) {
+             currentComposition = FallbackCompositionState.getPooled(nativeEventTarget);
+           } else if (eventType === eventTypes.compositionEnd) {
+             if (currentComposition) {
+               fallbackData = currentComposition.getData();
              }
            }
          }
        
-         // Children can be more than one argument, and those are transferred onto
-         // the newly allocated props object.
-         var childrenLength = arguments.length - 2;
-         if (childrenLength === 1) {
-           props.children = children;
-         } else if (childrenLength > 1) {
-           var childArray = Array(childrenLength);
-           for (var i = 0; i < childrenLength; i++) {
-             childArray[i] = arguments[i + 2];
+         var event = SyntheticCompositionEvent.getPooled(eventType, targetInst, nativeEvent, nativeEventTarget);
+       
+         if (fallbackData) {
+           // Inject data generated from fallback path into the synthetic event.
+           // This matches the property of native CompositionEventInterface.
+           event.data = fallbackData;
+         } else {
+           var customData = getDataFromCustomEvent(nativeEvent);
+           if (customData !== null) {
+             event.data = customData;
            }
-           props.children = childArray;
          }
        
-         return ReactElement(element.type, key, ref, self, source, owner, props);
-       };
+         EventPropagators.accumulateTwoPhaseDispatches(event);
+         return event;
+       }
        
        /**
-        * @param {?object} object
-        * @return {boolean} True if `object` is a valid component.
-        * @final
+        * @param {string} topLevelType Record from `EventConstants`.
+        * @param {object} nativeEvent Native browser event.
+        * @return {?string} The string corresponding to this `beforeInput` event.
         */
-       ReactElement.isValidElement = function (object) {
-         return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;
-       };
+       function getNativeBeforeInputChars(topLevelType, nativeEvent) {
+         switch (topLevelType) {
+           case topLevelTypes.topCompositionEnd:
+             return getDataFromCustomEvent(nativeEvent);
+           case topLevelTypes.topKeyPress:
+             /**
+              * If native `textInput` events are available, our goal is to make
+              * use of them. However, there is a special case: the spacebar key.
+              * In Webkit, preventing default on a spacebar `textInput` event
+              * cancels character insertion, but it *also* causes the browser
+              * to fall back to its default spacebar behavior of scrolling the
+              * page.
+              *
+              * Tracking at:
+              * https://code.google.com/p/chromium/issues/detail?id=355103
+              *
+              * To avoid this issue, use the keypress event as if no `textInput`
+              * event is available.
+              */
+             var which = nativeEvent.which;
+             if (which !== SPACEBAR_CODE) {
+               return null;
+             }
        
-       module.exports = ReactElement;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
-
-/***/ },
-/* 45 */
-/***/ function(module, exports, __webpack_require__) {
-
-       /* WEBPACK VAR INJECTION */(function(process) {/**
-        * 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.
-        *
-        * @providesModule canDefineProperty
-        */
+             hasSpaceKeypress = true;
+             return SPACEBAR_CHAR;
        
-       'use strict';
+           case topLevelTypes.topTextInput:
+             // Record the characters to be added to the DOM.
+             var chars = nativeEvent.data;
        
-       var canDefineProperty = false;
-       if (process.env.NODE_ENV !== 'production') {
-         try {
-           Object.defineProperty({}, 'x', { get: function () {} });
-           canDefineProperty = true;
-         } catch (x) {
-           // IE will fail on defineProperty
+             // If it's a spacebar character, assume that we have already handled
+             // it at the keypress level and bail immediately. Android Chrome
+             // doesn't give us keycodes, so we need to blacklist it.
+             if (chars === SPACEBAR_CHAR && hasSpaceKeypress) {
+               return null;
+             }
+       
+             return chars;
+       
+           default:
+             // For other native event types, do nothing.
+             return null;
          }
        }
        
-       module.exports = canDefineProperty;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
-
-/***/ },
-/* 46 */
-/***/ function(module, exports) {
-
        /**
-        * Copyright 2014-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.
+        * For browsers that do not provide the `textInput` event, extract the
+        * appropriate string to use for SyntheticInputEvent.
         *
-        * @providesModule ReactEmptyComponentRegistry
-        */
-       
-       'use strict';
-       
-       // This registry keeps track of the React IDs of the components that rendered to
-       // `null` (in reality a placeholder such as `noscript`)
-       var nullComponentIDsRegistry = {};
-       
-       /**
-        * @param {string} id Component's `_rootNodeID`.
-        * @return {boolean} True if the component is rendered to null.
+        * @param {string} topLevelType Record from `EventConstants`.
+        * @param {object} nativeEvent Native browser event.
+        * @return {?string} The fallback string for this `beforeInput` event.
         */
-       function isNullComponentID(id) {
-         return !!nullComponentIDsRegistry[id];
-       }
-       
-       /**
-        * Mark the component as having rendered to null.
-        * @param {string} id Component's `_rootNodeID`.
-        */
-       function registerNullComponentID(id) {
-         nullComponentIDsRegistry[id] = true;
+       function getFallbackBeforeInputChars(topLevelType, nativeEvent) {
+         // If we are currently composing (IME) and using a fallback to do so,
+         // try to extract the composed characters from the fallback object.
+         if (currentComposition) {
+           if (topLevelType === topLevelTypes.topCompositionEnd || isFallbackCompositionEnd(topLevelType, nativeEvent)) {
+             var chars = currentComposition.getData();
+             FallbackCompositionState.release(currentComposition);
+             currentComposition = null;
+             return chars;
+           }
+           return null;
+         }
+       
+         switch (topLevelType) {
+           case topLevelTypes.topPaste:
+             // If a paste event occurs after a keypress, throw out the input
+             // chars. Paste events should not lead to BeforeInput events.
+             return null;
+           case topLevelTypes.topKeyPress:
+             /**
+              * As of v27, Firefox may fire keypress events even when no character
+              * will be inserted. A few possibilities:
+              *
+              * - `which` is `0`. Arrow keys, Esc key, etc.
+              *
+              * - `which` is the pressed key code, but no char is available.
+              *   Ex: 'AltGr + d` in Polish. There is no modified character for
+              *   this key combination and no character is inserted into the
+              *   document, but FF fires the keypress for char code `100` anyway.
+              *   No `input` event will occur.
+              *
+              * - `which` is the pressed key code, but a command combination is
+              *   being used. Ex: `Cmd+C`. No character is inserted, and no
+              *   `input` event will occur.
+              */
+             if (nativeEvent.which && !isKeypressCommand(nativeEvent)) {
+               return String.fromCharCode(nativeEvent.which);
+             }
+             return null;
+           case topLevelTypes.topCompositionEnd:
+             return useFallbackCompositionData ? null : nativeEvent.data;
+           default:
+             return null;
+         }
        }
        
        /**
-        * Unmark the component as having rendered to null: it renders to something now.
-        * @param {string} id Component's `_rootNodeID`.
+        * Extract a SyntheticInputEvent for `beforeInput`, based on either native
+        * `textInput` or fallback behavior.
+        *
+        * @return {?object} A SyntheticInputEvent.
         */
-       function deregisterNullComponentID(id) {
-         delete nullComponentIDsRegistry[id];
+       function extractBeforeInputEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget) {
+         var chars;
+       
+         if (canUseTextInputEvent) {
+           chars = getNativeBeforeInputChars(topLevelType, nativeEvent);
+         } else {
+           chars = getFallbackBeforeInputChars(topLevelType, nativeEvent);
+         }
+       
+         // If no characters are being inserted, no BeforeInput event should
+         // be fired.
+         if (!chars) {
+           return null;
+         }
+       
+         var event = SyntheticInputEvent.getPooled(eventTypes.beforeInput, targetInst, nativeEvent, nativeEventTarget);
+       
+         event.data = chars;
+         EventPropagators.accumulateTwoPhaseDispatches(event);
+         return event;
        }
        
-       var ReactEmptyComponentRegistry = {
-         isNullComponentID: isNullComponentID,
-         registerNullComponentID: registerNullComponentID,
-         deregisterNullComponentID: deregisterNullComponentID
+       /**
+        * Create an `onBeforeInput` event to match
+        * http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105/#events-inputevents.
+        *
+        * This event plugin is based on the native `textInput` event
+        * available in Chrome, Safari, Opera, and IE. This event fires after
+        * `onKeyPress` and `onCompositionEnd`, but before `onInput`.
+        *
+        * `beforeInput` is spec'd but not implemented in any browsers, and
+        * the `input` event does not provide any useful information about what has
+        * actually been added, contrary to the spec. Thus, `textInput` is the best
+        * available event to identify the characters that have actually been inserted
+        * into the target node.
+        *
+        * This plugin is also responsible for emitting `composition` events, thus
+        * allowing us to share composition fallback code for both `beforeInput` and
+        * `composition` event types.
+        */
+       var BeforeInputEventPlugin = {
+       
+         eventTypes: eventTypes,
+       
+         extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {
+           return [extractCompositionEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget), extractBeforeInputEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget)];
+         }
        };
        
-       module.exports = ReactEmptyComponentRegistry;
+       module.exports = BeforeInputEventPlugin;
 
 /***/ },
-/* 47 */
+/* 44 */
 /***/ function(module, exports, __webpack_require__) {
 
-       /* WEBPACK VAR INJECTION */(function(process) {/**
-        * Copyright 2013-2015, Facebook, Inc.
+       /**
+        * Copyright 2013-present, 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.
         *
-        * @providesModule ReactInstanceHandles
-        * @typechecks static-only
+        * @providesModule EventConstants
         */
        
        'use strict';
        
-       var ReactRootIndex = __webpack_require__(48);
-       
-       var invariant = __webpack_require__(15);
+       var keyMirror = __webpack_require__(25);
        
-       var SEPARATOR = '.';
-       var SEPARATOR_LENGTH = SEPARATOR.length;
+       var PropagationPhases = keyMirror({ bubbled: null, captured: null });
        
        /**
-        * Maximum depth of traversals before we consider the possibility of a bad ID.
+        * Types of raw signals from the browser caught at the top level.
         */
-       var MAX_TREE_DEPTH = 10000;
+       var topLevelTypes = keyMirror({
+         topAbort: null,
+         topAnimationEnd: null,
+         topAnimationIteration: null,
+         topAnimationStart: null,
+         topBlur: null,
+         topCanPlay: null,
+         topCanPlayThrough: null,
+         topChange: null,
+         topClick: null,
+         topCompositionEnd: null,
+         topCompositionStart: null,
+         topCompositionUpdate: null,
+         topContextMenu: null,
+         topCopy: null,
+         topCut: null,
+         topDoubleClick: null,
+         topDrag: null,
+         topDragEnd: null,
+         topDragEnter: null,
+         topDragExit: null,
+         topDragLeave: null,
+         topDragOver: null,
+         topDragStart: null,
+         topDrop: null,
+         topDurationChange: null,
+         topEmptied: null,
+         topEncrypted: null,
+         topEnded: null,
+         topError: null,
+         topFocus: null,
+         topInput: null,
+         topInvalid: null,
+         topKeyDown: null,
+         topKeyPress: null,
+         topKeyUp: null,
+         topLoad: null,
+         topLoadedData: null,
+         topLoadedMetadata: null,
+         topLoadStart: null,
+         topMouseDown: null,
+         topMouseMove: null,
+         topMouseOut: null,
+         topMouseOver: null,
+         topMouseUp: null,
+         topPaste: null,
+         topPause: null,
+         topPlay: null,
+         topPlaying: null,
+         topProgress: null,
+         topRateChange: null,
+         topReset: null,
+         topScroll: null,
+         topSeeked: null,
+         topSeeking: null,
+         topSelectionChange: null,
+         topStalled: null,
+         topSubmit: null,
+         topSuspend: null,
+         topTextInput: null,
+         topTimeUpdate: null,
+         topTouchCancel: null,
+         topTouchEnd: null,
+         topTouchMove: null,
+         topTouchStart: null,
+         topTransitionEnd: null,
+         topVolumeChange: null,
+         topWaiting: null,
+         topWheel: null
+       });
        
-       /**
-        * Creates a DOM ID prefix to use when mounting React components.
-        *
-        * @param {number} index A unique integer
-        * @return {string} React root ID.
-        * @internal
-        */
-       function getReactRootIDString(index) {
-         return SEPARATOR + index.toString(36);
-       }
+       var EventConstants = {
+         topLevelTypes: topLevelTypes,
+         PropagationPhases: PropagationPhases
+       };
        
-       /**
-        * Checks if a character in the supplied ID is a separator or the end.
+       module.exports = EventConstants;
+
+/***/ },
+/* 45 */
+/***/ function(module, exports, __webpack_require__) {
+
+       /* WEBPACK VAR INJECTION */(function(process) {/**
+        * Copyright 2013-present, Facebook, Inc.
+        * All rights reserved.
         *
-        * @param {string} id A React DOM ID.
-        * @param {number} index Index of the character to check.
-        * @return {boolean} True if the character is a separator or end of the ID.
-        * @private
-        */
-       function isBoundary(id, index) {
-         return id.charAt(index) === SEPARATOR || index === id.length;
-       }
-       
-       /**
-        * Checks if the supplied string is a valid React DOM ID.
+        * 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.
         *
-        * @param {string} id A React DOM ID, maybe.
-        * @return {boolean} True if the string is a valid React DOM ID.
-        * @private
+        * @providesModule EventPropagators
         */
-       function isValidID(id) {
-         return id === '' || id.charAt(0) === SEPARATOR && id.charAt(id.length - 1) !== SEPARATOR;
-       }
+       
+       'use strict';
+       
+       var EventConstants = __webpack_require__(44);
+       var EventPluginHub = __webpack_require__(46);
+       var EventPluginUtils = __webpack_require__(48);
+       
+       var accumulateInto = __webpack_require__(50);
+       var forEachAccumulated = __webpack_require__(51);
+       var warning = __webpack_require__(13);
+       
+       var PropagationPhases = EventConstants.PropagationPhases;
+       var getListener = EventPluginHub.getListener;
        
        /**
-        * Checks if the first ID is an ancestor of or equal to the second ID.
-        *
-        * @param {string} ancestorID
-        * @param {string} descendantID
-        * @return {boolean} True if `ancestorID` is an ancestor of `descendantID`.
-        * @internal
+        * Some event types have a notion of different registration names for different
+        * "phases" of propagation. This finds listeners by a given phase.
         */
-       function isAncestorIDOf(ancestorID, descendantID) {
-         return descendantID.indexOf(ancestorID) === 0 && isBoundary(descendantID, ancestorID.length);
+       function listenerAtPhase(inst, event, propagationPhase) {
+         var registrationName = event.dispatchConfig.phasedRegistrationNames[propagationPhase];
+         return getListener(inst, registrationName);
        }
        
        /**
-        * Gets the parent ID of the supplied React DOM ID, `id`.
-        *
-        * @param {string} id ID of a component.
-        * @return {string} ID of the parent, or an empty string.
-        * @private
+        * Tags a `SyntheticEvent` with dispatched listeners. Creating this function
+        * here, allows us to not have to bind or create functions for each event.
+        * Mutating the event's members allows us to not have to create a wrapping
+        * "dispatch" object that pairs the event with the listener.
         */
-       function getParentID(id) {
-         return id ? id.substr(0, id.lastIndexOf(SEPARATOR)) : '';
+       function accumulateDirectionalDispatches(inst, upwards, event) {
+         if (process.env.NODE_ENV !== 'production') {
+           process.env.NODE_ENV !== 'production' ? warning(inst, 'Dispatching inst must not be null') : void 0;
+         }
+         var phase = upwards ? PropagationPhases.bubbled : PropagationPhases.captured;
+         var listener = listenerAtPhase(inst, event, phase);
+         if (listener) {
+           event._dispatchListeners = accumulateInto(event._dispatchListeners, listener);
+           event._dispatchInstances = accumulateInto(event._dispatchInstances, inst);
+         }
        }
        
        /**
-        * Gets the next DOM ID on the tree path from the supplied `ancestorID` to the
-        * supplied `destinationID`. If they are equal, the ID is returned.
-        *
-        * @param {string} ancestorID ID of an ancestor node of `destinationID`.
-        * @param {string} destinationID ID of the destination node.
-        * @return {string} Next ID on the path from `ancestorID` to `destinationID`.
-        * @private
+        * Collect dispatches (must be entirely collected before dispatching - see unit
+        * tests). Lazily allocate the array to conserve memory.  We must loop through
+        * each event and perform the traversal for each one. We cannot perform a
+        * single traversal for the entire collection of events because each event may
+        * have a different target.
         */
-       function getNextDescendantID(ancestorID, destinationID) {
-         !(isValidID(ancestorID) && isValidID(destinationID)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'getNextDescendantID(%s, %s): Received an invalid React DOM ID.', ancestorID, destinationID) : invariant(false) : undefined;
-         !isAncestorIDOf(ancestorID, destinationID) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'getNextDescendantID(...): React has made an invalid assumption about ' + 'the DOM hierarchy. Expected `%s` to be an ancestor of `%s`.', ancestorID, destinationID) : invariant(false) : undefined;
-         if (ancestorID === destinationID) {
-           return ancestorID;
-         }
-         // Skip over the ancestor and the immediate separator. Traverse until we hit
-         // another separator or we reach the end of `destinationID`.
-         var start = ancestorID.length + SEPARATOR_LENGTH;
-         var i;
-         for (i = start; i < destinationID.length; i++) {
-           if (isBoundary(destinationID, i)) {
-             break;
-           }
+       function accumulateTwoPhaseDispatchesSingle(event) {
+         if (event && event.dispatchConfig.phasedRegistrationNames) {
+           EventPluginUtils.traverseTwoPhase(event._targetInst, accumulateDirectionalDispatches, event);
          }
-         return destinationID.substr(0, i);
        }
        
        /**
-        * Gets the nearest common ancestor ID of two IDs.
-        *
-        * Using this ID scheme, the nearest common ancestor ID is the longest common
-        * prefix of the two IDs that immediately preceded a "marker" in both strings.
-        *
-        * @param {string} oneID
-        * @param {string} twoID
-        * @return {string} Nearest common ancestor ID, or the empty string if none.
-        * @private
+        * Same as `accumulateTwoPhaseDispatchesSingle`, but skips over the targetID.
         */
-       function getFirstCommonAncestorID(oneID, twoID) {
-         var minLength = Math.min(oneID.length, twoID.length);
-         if (minLength === 0) {
-           return '';
-         }
-         var lastCommonMarkerIndex = 0;
-         // Use `<=` to traverse until the "EOL" of the shorter string.
-         for (var i = 0; i <= minLength; i++) {
-           if (isBoundary(oneID, i) && isBoundary(twoID, i)) {
-             lastCommonMarkerIndex = i;
-           } else if (oneID.charAt(i) !== twoID.charAt(i)) {
-             break;
-           }
+       function accumulateTwoPhaseDispatchesSingleSkipTarget(event) {
+         if (event && event.dispatchConfig.phasedRegistrationNames) {
+           var targetInst = event._targetInst;
+           var parentInst = targetInst ? EventPluginUtils.getParentInstance(targetInst) : null;
+           EventPluginUtils.traverseTwoPhase(parentInst, accumulateDirectionalDispatches, event);
          }
-         var longestCommonID = oneID.substr(0, lastCommonMarkerIndex);
-         !isValidID(longestCommonID) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'getFirstCommonAncestorID(%s, %s): Expected a valid React DOM ID: %s', oneID, twoID, longestCommonID) : invariant(false) : undefined;
-         return longestCommonID;
        }
        
        /**
-        * Traverses the parent path between two IDs (either up or down). The IDs must
-        * not be the same, and there must exist a parent path between them. If the
-        * callback returns `false`, traversal is stopped.
-        *
-        * @param {?string} start ID at which to start traversal.
-        * @param {?string} stop ID at which to end traversal.
-        * @param {function} cb Callback to invoke each ID with.
-        * @param {*} arg Argument to invoke the callback with.
-        * @param {?boolean} skipFirst Whether or not to skip the first node.
-        * @param {?boolean} skipLast Whether or not to skip the last node.
-        * @private
+        * Accumulates without regard to direction, does not look for phased
+        * registration names. Same as `accumulateDirectDispatchesSingle` but without
+        * requiring that the `dispatchMarker` be the same as the dispatched ID.
         */
-       function traverseParentPath(start, stop, cb, arg, skipFirst, skipLast) {
-         start = start || '';
-         stop = stop || '';
-         !(start !== stop) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'traverseParentPath(...): Cannot traverse from and to the same ID, `%s`.', start) : invariant(false) : undefined;
-         var traverseUp = isAncestorIDOf(stop, start);
-         !(traverseUp || isAncestorIDOf(start, stop)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'traverseParentPath(%s, %s, ...): Cannot traverse from two IDs that do ' + 'not have a parent path.', start, stop) : invariant(false) : undefined;
-         // Traverse from `start` to `stop` one depth at a time.
-         var depth = 0;
-         var traverse = traverseUp ? getParentID : getNextDescendantID;
-         for (var id = start;; /* until break */id = traverse(id, stop)) {
-           var ret;
-           if ((!skipFirst || id !== start) && (!skipLast || id !== stop)) {
-             ret = cb(id, traverseUp, arg);
-           }
-           if (ret === false || id === stop) {
-             // Only break //after// visiting `stop`.
-             break;
+       function accumulateDispatches(inst, ignoredDirection, event) {
+         if (event && event.dispatchConfig.registrationName) {
+           var registrationName = event.dispatchConfig.registrationName;
+           var listener = getListener(inst, registrationName);
+           if (listener) {
+             event._dispatchListeners = accumulateInto(event._dispatchListeners, listener);
+             event._dispatchInstances = accumulateInto(event._dispatchInstances, inst);
            }
-           !(depth++ < MAX_TREE_DEPTH) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'traverseParentPath(%s, %s, ...): Detected an infinite loop while ' + 'traversing the React DOM ID tree. This may be due to malformed IDs: %s', start, stop, id) : invariant(false) : undefined;
          }
        }
        
        /**
-        * Manages the IDs assigned to DOM representations of React components. This
-        * uses a specific scheme in order to traverse the DOM efficiently (e.g. in
-        * order to simulate events).
-        *
-        * @internal
+        * Accumulates dispatches on an `SyntheticEvent`, but only for the
+        * `dispatchMarker`.
+        * @param {SyntheticEvent} event
+        */
+       function accumulateDirectDispatchesSingle(event) {
+         if (event && event.dispatchConfig.registrationName) {
+           accumulateDispatches(event._targetInst, null, event);
+         }
+       }
+       
+       function accumulateTwoPhaseDispatches(events) {
+         forEachAccumulated(events, accumulateTwoPhaseDispatchesSingle);
+       }
+       
+       function accumulateTwoPhaseDispatchesSkipTarget(events) {
+         forEachAccumulated(events, accumulateTwoPhaseDispatchesSingleSkipTarget);
+       }
+       
+       function accumulateEnterLeaveDispatches(leave, enter, from, to) {
+         EventPluginUtils.traverseEnterLeave(from, to, accumulateDispatches, leave, enter);
+       }
+       
+       function accumulateDirectDispatches(events) {
+         forEachAccumulated(events, accumulateDirectDispatchesSingle);
+       }
+       
+       /**
+        * A small set of propagation patterns, each of which will accept a small amount
+        * of information, and generate a set of "dispatch ready event objects" - which
+        * are sets of events that have already been annotated with a set of dispatched
+        * listener functions/ids. The API is designed this way to discourage these
+        * propagation strategies from actually executing the dispatches, since we
+        * always want to collect the entire set of dispatches before executing event a
+        * single one.
+        *
+        * @constructor EventPropagators
+        */
+       var EventPropagators = {
+         accumulateTwoPhaseDispatches: accumulateTwoPhaseDispatches,
+         accumulateTwoPhaseDispatchesSkipTarget: accumulateTwoPhaseDispatchesSkipTarget,
+         accumulateDirectDispatches: accumulateDirectDispatches,
+         accumulateEnterLeaveDispatches: accumulateEnterLeaveDispatches
+       };
+       
+       module.exports = EventPropagators;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
+
+/***/ },
+/* 46 */
+/***/ function(module, exports, __webpack_require__) {
+
+       /* WEBPACK VAR INJECTION */(function(process) {/**
+        * Copyright 2013-present, 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.
+        *
+        * @providesModule EventPluginHub
+        */
+       
+       'use strict';
+       
+       var _prodInvariant = __webpack_require__(9);
+       
+       var EventPluginRegistry = __webpack_require__(47);
+       var EventPluginUtils = __webpack_require__(48);
+       var ReactErrorUtils = __webpack_require__(49);
+       
+       var accumulateInto = __webpack_require__(50);
+       var forEachAccumulated = __webpack_require__(51);
+       var invariant = __webpack_require__(10);
+       
+       /**
+        * Internal store for event listeners
         */
-       var ReactInstanceHandles = {
+       var listenerBank = {};
+       
+       /**
+        * Internal queue of events that have accumulated their dispatches and are
+        * waiting to have their dispatches executed.
+        */
+       var eventQueue = null;
+       
+       /**
+        * Dispatches an event and releases it back into the pool, unless persistent.
+        *
+        * @param {?object} event Synthetic event to be dispatched.
+        * @param {boolean} simulated If the event is simulated (changes exn behavior)
+        * @private
+        */
+       var executeDispatchesAndRelease = function (event, simulated) {
+         if (event) {
+           EventPluginUtils.executeDispatchesInOrder(event, simulated);
+       
+           if (!event.isPersistent()) {
+             event.constructor.release(event);
+           }
+         }
+       };
+       var executeDispatchesAndReleaseSimulated = function (e) {
+         return executeDispatchesAndRelease(e, true);
+       };
+       var executeDispatchesAndReleaseTopLevel = function (e) {
+         return executeDispatchesAndRelease(e, false);
+       };
+       
+       var getDictionaryKey = function (inst) {
+         return '.' + inst._rootNodeID;
+       };
+       
+       /**
+        * This is a unified interface for event plugins to be installed and configured.
+        *
+        * Event plugins can implement the following properties:
+        *
+        *   `extractEvents` {function(string, DOMEventTarget, string, object): *}
+        *     Required. When a top-level event is fired, this method is expected to
+        *     extract synthetic events that will in turn be queued and dispatched.
+        *
+        *   `eventTypes` {object}
+        *     Optional, plugins that fire events must publish a mapping of registration
+        *     names that are used to register listeners. Values of this mapping must
+        *     be objects that contain `registrationName` or `phasedRegistrationNames`.
+        *
+        *   `executeDispatch` {function(object, function, string)}
+        *     Optional, allows plugins to override how an event gets dispatched. By
+        *     default, the listener is simply invoked.
+        *
+        * Each plugin that is injected into `EventsPluginHub` is immediately operable.
+        *
+        * @public
+        */
+       var EventPluginHub = {
        
          /**
-          * Constructs a React root ID
-          * @return {string} A React root ID.
+          * Methods for injecting dependencies.
           */
-         createReactRootID: function () {
-           return getReactRootIDString(ReactRootIndex.createReactRootIndex());
+         injection: {
+       
+           /**
+            * @param {array} InjectedEventPluginOrder
+            * @public
+            */
+           injectEventPluginOrder: EventPluginRegistry.injectEventPluginOrder,
+       
+           /**
+            * @param {object} injectedNamesToPlugins Map from names to plugin modules.
+            */
+           injectEventPluginsByName: EventPluginRegistry.injectEventPluginsByName
+       
          },
        
          /**
-          * Constructs a React ID by joining a root ID with a name.
+          * Stores `listener` at `listenerBank[registrationName][key]`. Is idempotent.
           *
-          * @param {string} rootID Root ID of a parent component.
-          * @param {string} name A component's name (as flattened children).
-          * @return {string} A React ID.
-          * @internal
+          * @param {object} inst The instance, which is the source of events.
+          * @param {string} registrationName Name of listener (e.g. `onClick`).
+          * @param {function} listener The callback to store.
           */
-         createReactID: function (rootID, name) {
-           return rootID + name;
+         putListener: function (inst, registrationName, listener) {
+           !(typeof listener === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected %s listener to be a function, instead got type %s', registrationName, typeof listener) : _prodInvariant('94', registrationName, typeof listener) : void 0;
+       
+           var key = getDictionaryKey(inst);
+           var bankForRegistrationName = listenerBank[registrationName] || (listenerBank[registrationName] = {});
+           bankForRegistrationName[key] = listener;
+       
+           var PluginModule = EventPluginRegistry.registrationNameModules[registrationName];
+           if (PluginModule && PluginModule.didPutListener) {
+             PluginModule.didPutListener(inst, registrationName, listener);
+           }
          },
        
          /**
-          * Gets the DOM ID of the React component that is the root of the tree that
-          * contains the React component with the supplied DOM ID.
-          *
-          * @param {string} id DOM ID of a React component.
-          * @return {?string} DOM ID of the React component that is the root.
-          * @internal
+          * @param {object} inst The instance, which is the source of events.
+          * @param {string} registrationName Name of listener (e.g. `onClick`).
+          * @return {?function} The stored callback.
           */
-         getReactRootIDFromNodeID: function (id) {
-           if (id && id.charAt(0) === SEPARATOR && id.length > 1) {
-             var index = id.indexOf(SEPARATOR, 1);
-             return index > -1 ? id.substr(0, index) : id;
-           }
-           return null;
+         getListener: function (inst, registrationName) {
+           var bankForRegistrationName = listenerBank[registrationName];
+           var key = getDictionaryKey(inst);
+           return bankForRegistrationName && bankForRegistrationName[key];
          },
        
          /**
-          * Traverses the ID hierarchy and invokes the supplied `cb` on any IDs that
-          * should would receive a `mouseEnter` or `mouseLeave` event.
-          *
-          * NOTE: Does not invoke the callback on the nearest common ancestor because
-          * nothing "entered" or "left" that element.
+          * Deletes a listener from the registration bank.
           *
-          * @param {string} leaveID ID being left.
-          * @param {string} enterID ID being entered.
-          * @param {function} cb Callback to invoke on each entered/left ID.
-          * @param {*} upArg Argument to invoke the callback with on left IDs.
-          * @param {*} downArg Argument to invoke the callback with on entered IDs.
-          * @internal
+          * @param {object} inst The instance, which is the source of events.
+          * @param {string} registrationName Name of listener (e.g. `onClick`).
           */
-         traverseEnterLeave: function (leaveID, enterID, cb, upArg, downArg) {
-           var ancestorID = getFirstCommonAncestorID(leaveID, enterID);
-           if (ancestorID !== leaveID) {
-             traverseParentPath(leaveID, ancestorID, cb, upArg, false, true);
+         deleteListener: function (inst, registrationName) {
+           var PluginModule = EventPluginRegistry.registrationNameModules[registrationName];
+           if (PluginModule && PluginModule.willDeleteListener) {
+             PluginModule.willDeleteListener(inst, registrationName);
            }
-           if (ancestorID !== enterID) {
-             traverseParentPath(ancestorID, enterID, cb, downArg, true, false);
+       
+           var bankForRegistrationName = listenerBank[registrationName];
+           // TODO: This should never be null -- when is it?
+           if (bankForRegistrationName) {
+             var key = getDictionaryKey(inst);
+             delete bankForRegistrationName[key];
            }
          },
        
          /**
-          * Simulates the traversal of a two-phase, capture/bubble event dispatch.
+          * Deletes all listeners for the DOM element with the supplied ID.
           *
-          * NOTE: This traversal happens on IDs without touching the DOM.
+          * @param {object} inst The instance, which is the source of events.
+          */
+         deleteAllListeners: function (inst) {
+           var key = getDictionaryKey(inst);
+           for (var registrationName in listenerBank) {
+             if (!listenerBank.hasOwnProperty(registrationName)) {
+               continue;
+             }
+       
+             if (!listenerBank[registrationName][key]) {
+               continue;
+             }
+       
+             var PluginModule = EventPluginRegistry.registrationNameModules[registrationName];
+             if (PluginModule && PluginModule.willDeleteListener) {
+               PluginModule.willDeleteListener(inst, registrationName);
+             }
+       
+             delete listenerBank[registrationName][key];
+           }
+         },
+       
+         /**
+          * Allows registered plugins an opportunity to extract events from top-level
+          * native browser events.
           *
-          * @param {string} targetID ID of the target node.
-          * @param {function} cb Callback to invoke.
-          * @param {*} arg Argument to invoke the callback with.
+          * @return {*} An accumulation of synthetic events.
           * @internal
           */
-         traverseTwoPhase: function (targetID, cb, arg) {
-           if (targetID) {
-             traverseParentPath('', targetID, cb, arg, true, false);
-             traverseParentPath(targetID, '', cb, arg, false, true);
+         extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {
+           var events;
+           var plugins = EventPluginRegistry.plugins;
+           for (var i = 0; i < plugins.length; i++) {
+             // Not every plugin in the ordering may be loaded at runtime.
+             var possiblePlugin = plugins[i];
+             if (possiblePlugin) {
+               var extractedEvents = possiblePlugin.extractEvents(topLevelType, targetInst, nativeEvent, nativeEventTarget);
+               if (extractedEvents) {
+                 events = accumulateInto(events, extractedEvents);
+               }
+             }
            }
+           return events;
          },
        
          /**
-          * Same as `traverseTwoPhase` but skips the `targetID`.
+          * Enqueues a synthetic event that should be dispatched when
+          * `processEventQueue` is invoked.
+          *
+          * @param {*} events An accumulation of synthetic events.
+          * @internal
           */
-         traverseTwoPhaseSkipTarget: function (targetID, cb, arg) {
-           if (targetID) {
-             traverseParentPath('', targetID, cb, arg, true, true);
-             traverseParentPath(targetID, '', cb, arg, true, true);
+         enqueueEvents: function (events) {
+           if (events) {
+             eventQueue = accumulateInto(eventQueue, events);
            }
          },
        
          /**
-          * Traverse a node ID, calling the supplied `cb` for each ancestor ID. For
-          * example, passing `.0.$row-0.1` would result in `cb` getting called
-          * with `.0`, `.0.$row-0`, and `.0.$row-0.1`.
-          *
-          * NOTE: This traversal happens on IDs without touching the DOM.
+          * Dispatches all synthetic events on the event queue.
           *
-          * @param {string} targetID ID of the target node.
-          * @param {function} cb Callback to invoke.
-          * @param {*} arg Argument to invoke the callback with.
           * @internal
           */
-         traverseAncestors: function (targetID, cb, arg) {
-           traverseParentPath('', targetID, cb, arg, true, false);
+         processEventQueue: function (simulated) {
+           // Set `eventQueue` to null before processing it so that we can tell if more
+           // events get enqueued while processing.
+           var processingEventQueue = eventQueue;
+           eventQueue = null;
+           if (simulated) {
+             forEachAccumulated(processingEventQueue, executeDispatchesAndReleaseSimulated);
+           } else {
+             forEachAccumulated(processingEventQueue, executeDispatchesAndReleaseTopLevel);
+           }
+           !!eventQueue ? process.env.NODE_ENV !== 'production' ? invariant(false, 'processEventQueue(): Additional events were enqueued while processing an event queue. Support for this has not yet been implemented.') : _prodInvariant('95') : void 0;
+           // This would be a good time to rethrow if any of the event handlers threw.
+           ReactErrorUtils.rethrowCaughtError();
          },
        
-         getFirstCommonAncestorID: getFirstCommonAncestorID,
-       
          /**
-          * Exposed for unit testing.
-          * @private
+          * These are needed for tests only. Do not use!
           */
-         _getNextDescendantID: getNextDescendantID,
-       
-         isAncestorIDOf: isAncestorIDOf,
+         __purge: function () {
+           listenerBank = {};
+         },
        
-         SEPARATOR: SEPARATOR
+         __getListenerBank: function () {
+           return listenerBank;
+         }
        
        };
        
-       module.exports = ReactInstanceHandles;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
+       module.exports = EventPluginHub;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
 
 /***/ },
-/* 48 */
-/***/ function(module, exports) {
+/* 47 */
+/***/ function(module, exports, __webpack_require__) {
 
-       /**
-        * Copyright 2013-2015, Facebook, Inc.
+       /* WEBPACK VAR INJECTION */(function(process) {/**
+        * Copyright 2013-present, 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.
         *
-        * @providesModule ReactRootIndex
-        * @typechecks
+        * @providesModule EventPluginRegistry
         */
        
        'use strict';
        
-       var ReactRootIndexInjection = {
-         /**
-          * @param {function} _createReactRootIndex
-          */
-         injectCreateReactRootIndex: function (_createReactRootIndex) {
-           ReactRootIndex.createReactRootIndex = _createReactRootIndex;
-         }
-       };
+       var _prodInvariant = __webpack_require__(9);
        
-       var ReactRootIndex = {
-         createReactRootIndex: null,
-         injection: ReactRootIndexInjection
-       };
+       var invariant = __webpack_require__(10);
        
-       module.exports = ReactRootIndex;
-
-/***/ },
-/* 49 */
-/***/ function(module, exports) {
-
        /**
-        * 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.
-        *
-        * @providesModule ReactInstanceMap
+        * Injectable ordering of event plugins.
         */
+       var EventPluginOrder = null;
        
-       'use strict';
+       /**
+        * Injectable mapping from names to event plugin modules.
+        */
+       var namesToPlugins = {};
        
        /**
-        * `ReactInstanceMap` maintains a mapping from a public facing stateful
-        * instance (key) and the internal representation (value). This allows public
-        * methods to accept the user facing instance as an argument and map them back
-        * to internal methods.
+        * Recomputes the plugin list using the injected plugins and plugin ordering.
+        *
+        * @private
         */
-       
-       // TODO: Replace this with ES6: var ReactInstanceMap = new Map();
-       var ReactInstanceMap = {
-       
-         /**
-          * This API should be called `delete` but we'd have to make sure to always
-          * transform these to strings for IE support. When this transform is fully
-          * supported we can rename it.
-          */
-         remove: function (key) {
-           key._reactInternalInstance = undefined;
-         },
-       
-         get: function (key) {
-           return key._reactInternalInstance;
-         },
-       
-         has: function (key) {
-           return key._reactInternalInstance !== undefined;
-         },
-       
-         set: function (key, value) {
-           key._reactInternalInstance = value;
+       function recomputePluginOrdering() {
+         if (!EventPluginOrder) {
+           // Wait until an `EventPluginOrder` is injected.
+           return;
          }
+         for (var pluginName in namesToPlugins) {
+           var PluginModule = namesToPlugins[pluginName];
+           var pluginIndex = EventPluginOrder.indexOf(pluginName);
+           !(pluginIndex > -1) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject event plugins that do not exist in the plugin ordering, `%s`.', pluginName) : _prodInvariant('96', pluginName) : void 0;
+           if (EventPluginRegistry.plugins[pluginIndex]) {
+             continue;
+           }
+           !PluginModule.extractEvents ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Event plugins must implement an `extractEvents` method, but `%s` does not.', pluginName) : _prodInvariant('97', pluginName) : void 0;
+           EventPluginRegistry.plugins[pluginIndex] = PluginModule;
+           var publishedEvents = PluginModule.eventTypes;
+           for (var eventName in publishedEvents) {
+             !publishEventForPlugin(publishedEvents[eventName], PluginModule, eventName) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Failed to publish event `%s` for plugin `%s`.', eventName, pluginName) : _prodInvariant('98', eventName, pluginName) : void 0;
+           }
+         }
+       }
        
-       };
-       
-       module.exports = ReactInstanceMap;
-
-/***/ },
-/* 50 */
-/***/ 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.
+        * Publishes an event so that it can be dispatched by the supplied plugin.
         *
-        * @providesModule ReactMarkupChecksum
+        * @param {object} dispatchConfig Dispatch configuration for the event.
+        * @param {object} PluginModule Plugin publishing the event.
+        * @return {boolean} True if the event was successfully published.
+        * @private
         */
+       function publishEventForPlugin(dispatchConfig, PluginModule, eventName) {
+         !!EventPluginRegistry.eventNameDispatchConfigs.hasOwnProperty(eventName) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginHub: More than one plugin attempted to publish the same event name, `%s`.', eventName) : _prodInvariant('99', eventName) : void 0;
+         EventPluginRegistry.eventNameDispatchConfigs[eventName] = dispatchConfig;
        
-       'use strict';
-       
-       var adler32 = __webpack_require__(51);
-       
-       var TAG_END = /\/?>/;
-       
-       var ReactMarkupChecksum = {
-         CHECKSUM_ATTR_NAME: 'data-react-checksum',
-       
-         /**
-          * @param {string} markup Markup string
-          * @return {string} Markup string with checksum attribute attached
-          */
-         addChecksumToMarkup: function (markup) {
-           var checksum = adler32(markup);
-       
-           // Add checksum (handle both parent tags and self-closing tags)
-           return markup.replace(TAG_END, ' ' + ReactMarkupChecksum.CHECKSUM_ATTR_NAME + '="' + checksum + '"$&');
-         },
-       
-         /**
-          * @param {string} markup to use
-          * @param {DOMElement} element root React element
-          * @returns {boolean} whether or not the markup is the same
-          */
-         canReuseMarkup: function (markup, element) {
-           var existingChecksum = element.getAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME);
-           existingChecksum = existingChecksum && parseInt(existingChecksum, 10);
-           var markupChecksum = adler32(markup);
-           return markupChecksum === existingChecksum;
+         var phasedRegistrationNames = dispatchConfig.phasedRegistrationNames;
+         if (phasedRegistrationNames) {
+           for (var phaseName in phasedRegistrationNames) {
+             if (phasedRegistrationNames.hasOwnProperty(phaseName)) {
+               var phasedRegistrationName = phasedRegistrationNames[phaseName];
+               publishRegistrationName(phasedRegistrationName, PluginModule, eventName);
+             }
+           }
+           return true;
+         } else if (dispatchConfig.registrationName) {
+           publishRegistrationName(dispatchConfig.registrationName, PluginModule, eventName);
+           return true;
          }
-       };
+         return false;
+       }
        
-       module.exports = ReactMarkupChecksum;
-
-/***/ },
-/* 51 */
-/***/ function(module, exports) {
-
        /**
-        * 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.
+        * Publishes a registration name that is used to identify dispatched events and
+        * can be used with `EventPluginHub.putListener` to register listeners.
         *
-        * @providesModule adler32
+        * @param {string} registrationName Registration name to add.
+        * @param {object} PluginModule Plugin publishing the event.
+        * @private
         */
+       function publishRegistrationName(registrationName, PluginModule, eventName) {
+         !!EventPluginRegistry.registrationNameModules[registrationName] ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginHub: More than one plugin attempted to publish the same registration name, `%s`.', registrationName) : _prodInvariant('100', registrationName) : void 0;
+         EventPluginRegistry.registrationNameModules[registrationName] = PluginModule;
+         EventPluginRegistry.registrationNameDependencies[registrationName] = PluginModule.eventTypes[eventName].dependencies;
        
-       'use strict';
-       
-       var MOD = 65521;
+         if (process.env.NODE_ENV !== 'production') {
+           var lowerCasedName = registrationName.toLowerCase();
+           EventPluginRegistry.possibleRegistrationNames[lowerCasedName] = registrationName;
        
-       // adler32 is not cryptographically strong, and is only used to sanity check that
-       // markup generated on the server matches the markup generated on the client.
-       // This implementation (a modified version of the SheetJS version) has been optimized
-       // for our use case, at the expense of conforming to the adler32 specification
-       // for non-ascii inputs.
-       function adler32(data) {
-         var a = 1;
-         var b = 0;
-         var i = 0;
-         var l = data.length;
-         var m = l & ~0x3;
-         while (i < m) {
-           for (; i < Math.min(i + 4096, m); i += 4) {
-             b += (a += data.charCodeAt(i)) + (a += data.charCodeAt(i + 1)) + (a += data.charCodeAt(i + 2)) + (a += data.charCodeAt(i + 3));
+           if (registrationName === 'onDoubleClick') {
+             EventPluginRegistry.possibleRegistrationNames.ondblclick = registrationName;
            }
-           a %= MOD;
-           b %= MOD;
          }
-         for (; i < l; i++) {
-           b += a += data.charCodeAt(i);
-         }
-         a %= MOD;
-         b %= MOD;
-         return a | b << 16;
        }
        
-       module.exports = adler32;
-
-/***/ },
-/* 52 */
-/***/ 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.
+        * Registers plugins so that they can extract and dispatch events.
         *
-        * @providesModule ReactReconciler
+        * @see {EventPluginHub}
         */
+       var EventPluginRegistry = {
        
-       'use strict';
+         /**
+          * Ordered list of injected plugins.
+          */
+         plugins: [],
        
-       var ReactRef = __webpack_require__(53);
+         /**
+          * Mapping from event name to dispatch config
+          */
+         eventNameDispatchConfigs: {},
        
-       /**
-        * Helper to call ReactRef.attachRefs with this composite component, split out
-        * to avoid allocations in the transaction mount-ready queue.
-        */
-       function attachRefs() {
-         ReactRef.attachRefs(this, this._currentElement);
-       }
+         /**
+          * Mapping from registration name to plugin module
+          */
+         registrationNameModules: {},
        
-       var ReactReconciler = {
+         /**
+          * Mapping from registration name to event name
+          */
+         registrationNameDependencies: {},
        
          /**
-          * Initializes the component, renders markup, and registers event listeners.
+          * Mapping from lowercase registration names to the properly cased version,
+          * used to warn in the case of missing event handlers. Available
+          * only in __DEV__.
+          * @type {Object}
+          */
+         possibleRegistrationNames: process.env.NODE_ENV !== 'production' ? {} : null,
+       
+         /**
+          * Injects an ordering of plugins (by plugin name). This allows the ordering
+          * to be decoupled from injection of the actual plugins so that ordering is
+          * always deterministic regardless of packaging, on-the-fly injection, etc.
           *
-          * @param {ReactComponent} internalInstance
-          * @param {string} rootID DOM ID of the root node.
-          * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction
-          * @return {?string} Rendered markup to be inserted into the DOM.
-          * @final
+          * @param {array} InjectedEventPluginOrder
           * @internal
+          * @see {EventPluginHub.injection.injectEventPluginOrder}
           */
-         mountComponent: function (internalInstance, rootID, transaction, context) {
-           var markup = internalInstance.mountComponent(rootID, transaction, context);
-           if (internalInstance._currentElement && internalInstance._currentElement.ref != null) {
-             transaction.getReactMountReady().enqueue(attachRefs, internalInstance);
-           }
-           return markup;
+         injectEventPluginOrder: function (InjectedEventPluginOrder) {
+           !!EventPluginOrder ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject event plugin ordering more than once. You are likely trying to load more than one copy of React.') : _prodInvariant('101') : void 0;
+           // Clone the ordering so it cannot be dynamically mutated.
+           EventPluginOrder = Array.prototype.slice.call(InjectedEventPluginOrder);
+           recomputePluginOrdering();
          },
        
          /**
-          * Releases any resources allocated by `mountComponent`.
+          * Injects plugins to be used by `EventPluginHub`. The plugin names must be
+          * in the ordering injected by `injectEventPluginOrder`.
           *
-          * @final
+          * Plugins can be injected as part of page initialization or on-the-fly.
+          *
+          * @param {object} injectedNamesToPlugins Map from names to plugin modules.
           * @internal
+          * @see {EventPluginHub.injection.injectEventPluginsByName}
           */
-         unmountComponent: function (internalInstance) {
-           ReactRef.detachRefs(internalInstance, internalInstance._currentElement);
-           internalInstance.unmountComponent();
+         injectEventPluginsByName: function (injectedNamesToPlugins) {
+           var isOrderingDirty = false;
+           for (var pluginName in injectedNamesToPlugins) {
+             if (!injectedNamesToPlugins.hasOwnProperty(pluginName)) {
+               continue;
+             }
+             var PluginModule = injectedNamesToPlugins[pluginName];
+             if (!namesToPlugins.hasOwnProperty(pluginName) || namesToPlugins[pluginName] !== PluginModule) {
+               !!namesToPlugins[pluginName] ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject two different event plugins using the same name, `%s`.', pluginName) : _prodInvariant('102', pluginName) : void 0;
+               namesToPlugins[pluginName] = PluginModule;
+               isOrderingDirty = true;
+             }
+           }
+           if (isOrderingDirty) {
+             recomputePluginOrdering();
+           }
          },
        
          /**
-          * Update a component using a new element.
+          * Looks up the plugin for the supplied event.
           *
-          * @param {ReactComponent} internalInstance
-          * @param {ReactElement} nextElement
-          * @param {ReactReconcileTransaction} transaction
-          * @param {object} context
+          * @param {object} event A synthetic event.
+          * @return {?object} The plugin that created the supplied event.
           * @internal
           */
-         receiveComponent: function (internalInstance, nextElement, transaction, context) {
-           var prevElement = internalInstance._currentElement;
-       
-           if (nextElement === prevElement && context === internalInstance._context) {
-             // Since elements are immutable after the owner is rendered,
-             // we can do a cheap identity compare here to determine if this is a
-             // superfluous reconcile. It's possible for state to be mutable but such
-             // change should trigger an update of the owner which would recreate
-             // the element. We explicitly check for the existence of an owner since
-             // it's possible for an element created outside a composite to be
-             // deeply mutated and reused.
-       
-             // TODO: Bailing out early is just a perf optimization right?
-             // TODO: Removing the return statement should affect correctness?
-             return;
+         getPluginModuleForEvent: function (event) {
+           var dispatchConfig = event.dispatchConfig;
+           if (dispatchConfig.registrationName) {
+             return EventPluginRegistry.registrationNameModules[dispatchConfig.registrationName] || null;
            }
+           for (var phase in dispatchConfig.phasedRegistrationNames) {
+             if (!dispatchConfig.phasedRegistrationNames.hasOwnProperty(phase)) {
+               continue;
+             }
+             var PluginModule = EventPluginRegistry.registrationNameModules[dispatchConfig.phasedRegistrationNames[phase]];
+             if (PluginModule) {
+               return PluginModule;
+             }
+           }
+           return null;
+         },
        
-           var refsChanged = ReactRef.shouldUpdateRefs(prevElement, nextElement);
-       
-           if (refsChanged) {
-             ReactRef.detachRefs(internalInstance, prevElement);
+         /**
+          * Exposed for unit testing.
+          * @private
+          */
+         _resetEventPlugins: function () {
+           EventPluginOrder = null;
+           for (var pluginName in namesToPlugins) {
+             if (namesToPlugins.hasOwnProperty(pluginName)) {
+               delete namesToPlugins[pluginName];
+             }
            }
+           EventPluginRegistry.plugins.length = 0;
        
-           internalInstance.receiveComponent(nextElement, transaction, context);
+           var eventNameDispatchConfigs = EventPluginRegistry.eventNameDispatchConfigs;
+           for (var eventName in eventNameDispatchConfigs) {
+             if (eventNameDispatchConfigs.hasOwnProperty(eventName)) {
+               delete eventNameDispatchConfigs[eventName];
+             }
+           }
        
-           if (refsChanged && internalInstance._currentElement && internalInstance._currentElement.ref != null) {
-             transaction.getReactMountReady().enqueue(attachRefs, internalInstance);
+           var registrationNameModules = EventPluginRegistry.registrationNameModules;
+           for (var registrationName in registrationNameModules) {
+             if (registrationNameModules.hasOwnProperty(registrationName)) {
+               delete registrationNameModules[registrationName];
+             }
            }
-         },
        
-         /**
-          * Flush any dirty changes in a component.
-          *
-          * @param {ReactComponent} internalInstance
-          * @param {ReactReconcileTransaction} transaction
-          * @internal
-          */
-         performUpdateIfNecessary: function (internalInstance, transaction) {
-           internalInstance.performUpdateIfNecessary(transaction);
+           if (process.env.NODE_ENV !== 'production') {
+             var possibleRegistrationNames = EventPluginRegistry.possibleRegistrationNames;
+             for (var lowerCasedName in possibleRegistrationNames) {
+               if (possibleRegistrationNames.hasOwnProperty(lowerCasedName)) {
+                 delete possibleRegistrationNames[lowerCasedName];
+               }
+             }
+           }
          }
        
        };
        
-       module.exports = ReactReconciler;
+       module.exports = EventPluginRegistry;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
 
 /***/ },
-/* 53 */
+/* 48 */
 /***/ function(module, exports, __webpack_require__) {
 
-       /**
-        * Copyright 2013-2015, Facebook, Inc.
+       /* WEBPACK VAR INJECTION */(function(process) {/**
+        * Copyright 2013-present, 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.
         *
-        * @providesModule ReactRef
+        * @providesModule EventPluginUtils
         */
        
        'use strict';
        
-       var ReactOwner = __webpack_require__(54);
+       var _prodInvariant = __webpack_require__(9);
        
-       var ReactRef = {};
+       var EventConstants = __webpack_require__(44);
+       var ReactErrorUtils = __webpack_require__(49);
        
-       function attachRef(ref, component, owner) {
-         if (typeof ref === 'function') {
-           ref(component.getPublicInstance());
-         } else {
-           // Legacy ref
-           ReactOwner.addComponentAsRefTo(component, ref, owner);
+       var invariant = __webpack_require__(10);
+       var warning = __webpack_require__(13);
+       
+       /**
+        * Injected dependencies:
+        */
+       
+       /**
+        * - `ComponentTree`: [required] Module that can convert between React instances
+        *   and actual node references.
+        */
+       var ComponentTree;
+       var TreeTraversal;
+       var injection = {
+         injectComponentTree: function (Injected) {
+           ComponentTree = Injected;
+           if (process.env.NODE_ENV !== 'production') {
+             process.env.NODE_ENV !== 'production' ? warning(Injected && Injected.getNodeFromInstance && Injected.getInstanceFromNode, 'EventPluginUtils.injection.injectComponentTree(...): Injected ' + 'module is missing getNodeFromInstance or getInstanceFromNode.') : void 0;
+           }
+         },
+         injectTreeTraversal: function (Injected) {
+           TreeTraversal = Injected;
+           if (process.env.NODE_ENV !== 'production') {
+             process.env.NODE_ENV !== 'production' ? warning(Injected && Injected.isAncestor && Injected.getLowestCommonAncestor, 'EventPluginUtils.injection.injectTreeTraversal(...): Injected ' + 'module is missing isAncestor or getLowestCommonAncestor.') : void 0;
+           }
          }
+       };
+       
+       var topLevelTypes = EventConstants.topLevelTypes;
+       
+       function isEndish(topLevelType) {
+         return topLevelType === topLevelTypes.topMouseUp || topLevelType === topLevelTypes.topTouchEnd || topLevelType === topLevelTypes.topTouchCancel;
        }
        
-       function detachRef(ref, component, owner) {
-         if (typeof ref === 'function') {
-           ref(null);
-         } else {
-           // Legacy ref
-           ReactOwner.removeComponentAsRefFrom(component, ref, owner);
-         }
+       function isMoveish(topLevelType) {
+         return topLevelType === topLevelTypes.topMouseMove || topLevelType === topLevelTypes.topTouchMove;
+       }
+       function isStartish(topLevelType) {
+         return topLevelType === topLevelTypes.topMouseDown || topLevelType === topLevelTypes.topTouchStart;
        }
        
-       ReactRef.attachRefs = function (instance, element) {
-         if (element === null || element === false) {
-           return;
-         }
-         var ref = element.ref;
-         if (ref != null) {
-           attachRef(ref, instance, element._owner);
-         }
-       };
+       var validateEventDispatches;
+       if (process.env.NODE_ENV !== 'production') {
+         validateEventDispatches = function (event) {
+           var dispatchListeners = event._dispatchListeners;
+           var dispatchInstances = event._dispatchInstances;
        
-       ReactRef.shouldUpdateRefs = function (prevElement, nextElement) {
-         // If either the owner or a `ref` has changed, make sure the newest owner
-         // has stored a reference to `this`, and the previous owner (if different)
-         // has forgotten the reference to `this`. We use the element instead
-         // of the public this.props because the post processing cannot determine
-         // a ref. The ref conceptually lives on the element.
+           var listenersIsArr = Array.isArray(dispatchListeners);
+           var listenersLen = listenersIsArr ? dispatchListeners.length : dispatchListeners ? 1 : 0;
        
-         // TODO: Should this even be possible? The owner cannot change because
-         // it's forbidden by shouldUpdateReactComponent. The ref can change
-         // if you swap the keys of but not the refs. Reconsider where this check
-         // is made. It probably belongs where the key checking and
-         // instantiateReactComponent is done.
+           var instancesIsArr = Array.isArray(dispatchInstances);
+           var instancesLen = instancesIsArr ? dispatchInstances.length : dispatchInstances ? 1 : 0;
        
-         var prevEmpty = prevElement === null || prevElement === false;
-         var nextEmpty = nextElement === null || nextElement === false;
+           process.env.NODE_ENV !== 'production' ? warning(instancesIsArr === listenersIsArr && instancesLen === listenersLen, 'EventPluginUtils: Invalid `event`.') : void 0;
+         };
+       }
        
-         return(
-           // This has a few false positives w/r/t empty components.
-           prevEmpty || nextEmpty || nextElement._owner !== prevElement._owner || nextElement.ref !== prevElement.ref
-         );
-       };
+       /**
+        * Dispatch the event to the listener.
+        * @param {SyntheticEvent} event SyntheticEvent to handle
+        * @param {boolean} simulated If the event is simulated (changes exn behavior)
+        * @param {function} listener Application-level callback
+        * @param {*} inst Internal component instance
+        */
+       function executeDispatch(event, simulated, listener, inst) {
+         var type = event.type || 'unknown-event';
+         event.currentTarget = EventPluginUtils.getNodeFromInstance(inst);
+         if (simulated) {
+           ReactErrorUtils.invokeGuardedCallbackWithCatch(type, listener, event);
+         } else {
+           ReactErrorUtils.invokeGuardedCallback(type, listener, event);
+         }
+         event.currentTarget = null;
+       }
        
-       ReactRef.detachRefs = function (instance, element) {
-         if (element === null || element === false) {
-           return;
+       /**
+        * Standard/simple iteration through an event's collected dispatches.
+        */
+       function executeDispatchesInOrder(event, simulated) {
+         var dispatchListeners = event._dispatchListeners;
+         var dispatchInstances = event._dispatchInstances;
+         if (process.env.NODE_ENV !== 'production') {
+           validateEventDispatches(event);
          }
-         var ref = element.ref;
-         if (ref != null) {
-           detachRef(ref, instance, element._owner);
+         if (Array.isArray(dispatchListeners)) {
+           for (var i = 0; i < dispatchListeners.length; i++) {
+             if (event.isPropagationStopped()) {
+               break;
+             }
+             // Listeners and Instances are two parallel arrays that are always in sync.
+             executeDispatch(event, simulated, dispatchListeners[i], dispatchInstances[i]);
+           }
+         } else if (dispatchListeners) {
+           executeDispatch(event, simulated, dispatchListeners, dispatchInstances);
          }
-       };
+         event._dispatchListeners = null;
+         event._dispatchInstances = null;
+       }
        
-       module.exports = ReactRef;
-
-/***/ },
-/* 54 */
-/***/ function(module, exports, __webpack_require__) {
-
-       /* WEBPACK VAR INJECTION */(function(process) {/**
-        * 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.
+       /**
+        * Standard/simple iteration through an event's collected dispatches, but stops
+        * at the first dispatch execution returning true, and returns that id.
         *
-        * @providesModule ReactOwner
+        * @return {?string} id of the first dispatch execution who's listener returns
+        * true, or null if no listener returned true.
         */
-       
-       'use strict';
-       
-       var invariant = __webpack_require__(15);
+       function executeDispatchesInOrderStopAtTrueImpl(event) {
+         var dispatchListeners = event._dispatchListeners;
+         var dispatchInstances = event._dispatchInstances;
+         if (process.env.NODE_ENV !== 'production') {
+           validateEventDispatches(event);
+         }
+         if (Array.isArray(dispatchListeners)) {
+           for (var i = 0; i < dispatchListeners.length; i++) {
+             if (event.isPropagationStopped()) {
+               break;
+             }
+             // Listeners and Instances are two parallel arrays that are always in sync.
+             if (dispatchListeners[i](event, dispatchInstances[i])) {
+               return dispatchInstances[i];
+             }
+           }
+         } else if (dispatchListeners) {
+           if (dispatchListeners(event, dispatchInstances)) {
+             return dispatchInstances;
+           }
+         }
+         return null;
+       }
        
        /**
-        * ReactOwners are capable of storing references to owned components.
-        *
-        * All components are capable of //being// referenced by owner components, but
-        * only ReactOwner components are capable of //referencing// owned components.
-        * The named reference is known as a "ref".
-        *
-        * Refs are available when mounted and updated during reconciliation.
-        *
-        *   var MyComponent = React.createClass({
-        *     render: function() {
-        *       return (
-        *         <div onClick={this.handleClick}>
-        *           <CustomComponent ref="custom" />
-        *         </div>
-        *       );
-        *     },
-        *     handleClick: function() {
-        *       this.refs.custom.handleClick();
-        *     },
-        *     componentDidMount: function() {
-        *       this.refs.custom.initialize();
-        *     }
-        *   });
-        *
-        * Refs should rarely be used. When refs are used, they should only be done to
-        * control data that is not handled by React's data flow.
-        *
-        * @class ReactOwner
+        * @see executeDispatchesInOrderStopAtTrueImpl
         */
-       var ReactOwner = {
+       function executeDispatchesInOrderStopAtTrue(event) {
+         var ret = executeDispatchesInOrderStopAtTrueImpl(event);
+         event._dispatchInstances = null;
+         event._dispatchListeners = null;
+         return ret;
+       }
        
-         /**
-          * @param {?object} object
-          * @return {boolean} True if `object` is a valid owner.
-          * @final
-          */
-         isValidOwner: function (object) {
-           return !!(object && typeof object.attachRef === 'function' && typeof object.detachRef === 'function');
+       /**
+        * Execution of a "direct" dispatch - there must be at most one dispatch
+        * accumulated on the event or it is considered an error. It doesn't really make
+        * sense for an event with multiple dispatches (bubbled) to keep track of the
+        * return values at each dispatch execution, but it does tend to make sense when
+        * dealing with "direct" dispatches.
+        *
+        * @return {*} The return value of executing the single dispatch.
+        */
+       function executeDirectDispatch(event) {
+         if (process.env.NODE_ENV !== 'production') {
+           validateEventDispatches(event);
+         }
+         var dispatchListener = event._dispatchListeners;
+         var dispatchInstance = event._dispatchInstances;
+         !!Array.isArray(dispatchListener) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'executeDirectDispatch(...): Invalid `event`.') : _prodInvariant('103') : void 0;
+         event.currentTarget = dispatchListener ? EventPluginUtils.getNodeFromInstance(dispatchInstance) : null;
+         var res = dispatchListener ? dispatchListener(event) : null;
+         event.currentTarget = null;
+         event._dispatchListeners = null;
+         event._dispatchInstances = null;
+         return res;
+       }
+       
+       /**
+        * @param {SyntheticEvent} event
+        * @return {boolean} True iff number of dispatches accumulated is greater than 0.
+        */
+       function hasDispatches(event) {
+         return !!event._dispatchListeners;
+       }
+       
+       /**
+        * General utilities that are useful in creating custom Event Plugins.
+        */
+       var EventPluginUtils = {
+         isEndish: isEndish,
+         isMoveish: isMoveish,
+         isStartish: isStartish,
+       
+         executeDirectDispatch: executeDirectDispatch,
+         executeDispatchesInOrder: executeDispatchesInOrder,
+         executeDispatchesInOrderStopAtTrue: executeDispatchesInOrderStopAtTrue,
+         hasDispatches: hasDispatches,
+       
+         getInstanceFromNode: function (node) {
+           return ComponentTree.getInstanceFromNode(node);
+         },
+         getNodeFromInstance: function (node) {
+           return ComponentTree.getNodeFromInstance(node);
+         },
+         isAncestor: function (a, b) {
+           return TreeTraversal.isAncestor(a, b);
+         },
+         getLowestCommonAncestor: function (a, b) {
+           return TreeTraversal.getLowestCommonAncestor(a, b);
+         },
+         getParentInstance: function (inst) {
+           return TreeTraversal.getParentInstance(inst);
+         },
+         traverseTwoPhase: function (target, fn, arg) {
+           return TreeTraversal.traverseTwoPhase(target, fn, arg);
          },
+         traverseEnterLeave: function (from, to, fn, argFrom, argTo) {
+           return TreeTraversal.traverseEnterLeave(from, to, fn, argFrom, argTo);
+         },
+       
+         injection: injection
+       };
+       
+       module.exports = EventPluginUtils;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
+
+/***/ },
+/* 49 */
+/***/ function(module, exports, __webpack_require__) {
+
+       /* WEBPACK VAR INJECTION */(function(process) {/**
+        * Copyright 2013-present, 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.
+        *
+        * @providesModule ReactErrorUtils
+        */
+       
+       'use strict';
+       
+       var caughtError = null;
+       
+       /**
+        * Call a function while guarding against errors that happens within it.
+        *
+        * @param {?String} name of the guard to use for logging or debugging
+        * @param {Function} func The function to invoke
+        * @param {*} a First argument
+        * @param {*} b Second argument
+        */
+       function invokeGuardedCallback(name, func, a, b) {
+         try {
+           return func(a, b);
+         } catch (x) {
+           if (caughtError === null) {
+             caughtError = x;
+           }
+           return undefined;
+         }
+       }
+       
+       var ReactErrorUtils = {
+         invokeGuardedCallback: invokeGuardedCallback,
        
          /**
-          * Adds a component by ref to an owner component.
-          *
-          * @param {ReactComponent} component Component to reference.
-          * @param {string} ref Name by which to refer to the component.
-          * @param {ReactOwner} owner Component on which to record the ref.
-          * @final
-          * @internal
+          * Invoked by ReactTestUtils.Simulate so that any errors thrown by the event
+          * handler are sure to be rethrown by rethrowCaughtError.
           */
-         addComponentAsRefTo: function (component, ref, owner) {
-           !ReactOwner.isValidOwner(owner) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'addComponentAsRefTo(...): Only a ReactOwner can have refs. You might ' + 'be adding a ref to a component that was not created inside a component\'s ' + '`render` method, or you have multiple copies of React loaded ' + '(details: https://fb.me/react-refs-must-have-owner).') : invariant(false) : undefined;
-           owner.attachRef(ref, component);
-         },
+         invokeGuardedCallbackWithCatch: invokeGuardedCallback,
        
          /**
-          * Removes a component by ref from an owner component.
-          *
-          * @param {ReactComponent} component Component to dereference.
-          * @param {string} ref Name of the ref to remove.
-          * @param {ReactOwner} owner Component on which the ref is recorded.
-          * @final
-          * @internal
+          * During execution of guarded functions we will capture the first error which
+          * we will rethrow to be handled by the top level error handler.
           */
-         removeComponentAsRefFrom: function (component, ref, owner) {
-           !ReactOwner.isValidOwner(owner) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'removeComponentAsRefFrom(...): Only a ReactOwner can have refs. You might ' + 'be removing a ref to a component that was not created inside a component\'s ' + '`render` method, or you have multiple copies of React loaded ' + '(details: https://fb.me/react-refs-must-have-owner).') : invariant(false) : undefined;
-           // Check that `component` is still the current ref because we do not want to
-           // detach the ref if another component stole it.
-           if (owner.getPublicInstance().refs[ref] === component.getPublicInstance()) {
-             owner.detachRef(ref);
+         rethrowCaughtError: function () {
+           if (caughtError) {
+             var error = caughtError;
+             caughtError = null;
+             throw error;
            }
          }
-       
        };
        
-       module.exports = ReactOwner;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
+       if (process.env.NODE_ENV !== 'production') {
+         /**
+          * To help development we can get better devtools integration by simulating a
+          * real browser event.
+          */
+         if (typeof window !== 'undefined' && typeof window.dispatchEvent === 'function' && typeof document !== 'undefined' && typeof document.createEvent === 'function') {
+           var fakeNode = document.createElement('react');
+           ReactErrorUtils.invokeGuardedCallback = function (name, func, a, b) {
+             var boundFunc = func.bind(null, a, b);
+             var evtType = 'react-' + name;
+             fakeNode.addEventListener(evtType, boundFunc, false);
+             var evt = document.createEvent('Event');
+             evt.initEvent(evtType, false, false);
+             fakeNode.dispatchEvent(evt);
+             fakeNode.removeEventListener(evtType, boundFunc, false);
+           };
+         }
+       }
+       
+       module.exports = ReactErrorUtils;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
 
 /***/ },
-/* 55 */
+/* 50 */
 /***/ function(module, exports, __webpack_require__) {
 
        /* WEBPACK VAR INJECTION */(function(process) {/**
-        * Copyright 2015, Facebook, Inc.
+        * Copyright 2014-present, 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.
         *
-        * @providesModule ReactUpdateQueue
+        * @providesModule accumulateInto
+        * 
         */
        
        'use strict';
        
-       var ReactCurrentOwner = __webpack_require__(7);
-       var ReactElement = __webpack_require__(44);
-       var ReactInstanceMap = __webpack_require__(49);
-       var ReactUpdates = __webpack_require__(56);
+       var _prodInvariant = __webpack_require__(9);
        
-       var assign = __webpack_require__(41);
-       var invariant = __webpack_require__(15);
-       var warning = __webpack_require__(27);
+       var invariant = __webpack_require__(10);
        
-       function enqueueUpdate(internalInstance) {
-         ReactUpdates.enqueueUpdate(internalInstance);
-       }
+       /**
+        * Accumulates items that must not be null or undefined into the first one. This
+        * is used to conserve memory by avoiding array allocations, and thus sacrifices
+        * API cleanness. Since `current` can be null before being passed in and not
+        * null after this function, make sure to assign it back to `current`:
+        *
+        * `a = accumulateInto(a, b);`
+        *
+        * This API should be sparingly used. Try `accumulate` for something cleaner.
+        *
+        * @return {*|array<*>} An accumulation of items.
+        */
        
-       function getInternalInstanceReadyForUpdate(publicInstance, callerName) {
-         var internalInstance = ReactInstanceMap.get(publicInstance);
-         if (!internalInstance) {
-           if (process.env.NODE_ENV !== 'production') {
-             // Only warn when we have a callerName. Otherwise we should be silent.
-             // We're probably calling from enqueueCallback. We don't want to warn
-             // there because we already warned for the corresponding lifecycle method.
-             process.env.NODE_ENV !== 'production' ? warning(!callerName, '%s(...): Can only update a mounted or mounting component. ' + 'This usually means you called %s() on an unmounted component. ' + 'This is a no-op. Please check the code for the %s component.', callerName, callerName, publicInstance.constructor.displayName) : undefined;
+       function accumulateInto(current, next) {
+         !(next != null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'accumulateInto(...): Accumulated items must not be null or undefined.') : _prodInvariant('30') : void 0;
+       
+         if (current == null) {
+           return next;
+         }
+       
+         // Both are not empty. Warning: Never call x.concat(y) when you are not
+         // certain that x is an Array (x could be a string with concat method).
+         if (Array.isArray(current)) {
+           if (Array.isArray(next)) {
+             current.push.apply(current, next);
+             return current;
            }
-           return null;
+           current.push(next);
+           return current;
          }
        
-         if (process.env.NODE_ENV !== 'production') {
-           process.env.NODE_ENV !== 'production' ? warning(ReactCurrentOwner.current == null, '%s(...): Cannot update during an existing state transition ' + '(such as within `render`). Render methods should be a pure function ' + 'of props and state.', callerName) : undefined;
+         if (Array.isArray(next)) {
+           // A bit too dangerous to mutate `next`.
+           return [current].concat(next);
          }
        
-         return internalInstance;
+         return [current, next];
        }
        
+       module.exports = accumulateInto;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
+
+/***/ },
+/* 51 */
+/***/ function(module, exports) {
+
        /**
-        * ReactUpdateQueue allows for state updates to be scheduled into a later
-        * reconciliation step.
+        * Copyright 2013-present, 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.
+        *
+        * @providesModule forEachAccumulated
+        * 
         */
-       var ReactUpdateQueue = {
-       
-         /**
-          * Checks whether or not this composite component is mounted.
-          * @param {ReactClass} publicInstance The instance we want to test.
-          * @return {boolean} True if mounted, false otherwise.
-          * @protected
-          * @final
-          */
-         isMounted: function (publicInstance) {
-           if (process.env.NODE_ENV !== 'production') {
-             var owner = ReactCurrentOwner.current;
-             if (owner !== null) {
-               process.env.NODE_ENV !== 'production' ? warning(owner._warnedAboutRefsInRender, '%s is accessing isMounted inside its render() function. ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', owner.getName() || 'A component') : undefined;
-               owner._warnedAboutRefsInRender = true;
-             }
-           }
-           var internalInstance = ReactInstanceMap.get(publicInstance);
-           if (internalInstance) {
-             // During componentWillMount and render this will still be null but after
-             // that will always render to something. At least for now. So we can use
-             // this hack.
-             return !!internalInstance._renderedComponent;
-           } else {
-             return false;
-           }
-         },
        
-         /**
-          * Enqueue a callback that will be executed after all the pending updates
-          * have processed.
-          *
-          * @param {ReactClass} publicInstance The instance to use as `this` context.
-          * @param {?function} callback Called after state is updated.
-          * @internal
-          */
-         enqueueCallback: function (publicInstance, callback) {
-           !(typeof callback === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'enqueueCallback(...): You called `setProps`, `replaceProps`, ' + '`setState`, `replaceState`, or `forceUpdate` with a callback that ' + 'isn\'t callable.') : invariant(false) : undefined;
-           var internalInstance = getInternalInstanceReadyForUpdate(publicInstance);
+       'use strict';
        
-           // Previously we would throw an error if we didn't have an internal
-           // instance. Since we want to make it a no-op instead, we mirror the same
-           // behavior we have in other enqueue* methods.
-           // We also need to ignore callbacks in componentWillMount. See
-           // enqueueUpdates.
-           if (!internalInstance) {
-             return null;
-           }
+       /**
+        * @param {array} arr an "accumulation" of items which is either an Array or
+        * a single item. Useful when paired with the `accumulate` module. This is a
+        * simple utility that allows us to reason about a collection of items, but
+        * handling the case when there is exactly one item (and we do not need to
+        * allocate an array).
+        */
        
-           if (internalInstance._pendingCallbacks) {
-             internalInstance._pendingCallbacks.push(callback);
-           } else {
-             internalInstance._pendingCallbacks = [callback];
-           }
-           // TODO: The callback here is ignored when setState is called from
-           // componentWillMount. Either fix it or disallow doing so completely in
-           // favor of getInitialState. Alternatively, we can disallow
-           // componentWillMount during server-side rendering.
-           enqueueUpdate(internalInstance);
-         },
+       function forEachAccumulated(arr, cb, scope) {
+         if (Array.isArray(arr)) {
+           arr.forEach(cb, scope);
+         } else if (arr) {
+           cb.call(scope, arr);
+         }
+       }
        
-         enqueueCallbackInternal: function (internalInstance, callback) {
-           !(typeof callback === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'enqueueCallback(...): You called `setProps`, `replaceProps`, ' + '`setState`, `replaceState`, or `forceUpdate` with a callback that ' + 'isn\'t callable.') : invariant(false) : undefined;
-           if (internalInstance._pendingCallbacks) {
-             internalInstance._pendingCallbacks.push(callback);
-           } else {
-             internalInstance._pendingCallbacks = [callback];
-           }
-           enqueueUpdate(internalInstance);
-         },
+       module.exports = forEachAccumulated;
+
+/***/ },
+/* 52 */
+/***/ function(module, exports) {
+
+       /**
+        * Copyright (c) 2013-present, 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.
+        *
+        */
        
-         /**
-          * Forces an update. This should only be invoked when it is known with
-          * certainty that we are **not** in a DOM transaction.
-          *
-          * You may want to call this when you know that some deeper aspect of the
-          * component's state has changed but `setState` was not called.
-          *
-          * This will not invoke `shouldComponentUpdate`, but it will invoke
-          * `componentWillUpdate` and `componentDidUpdate`.
-          *
-          * @param {ReactClass} publicInstance The instance that should rerender.
-          * @internal
-          */
-         enqueueForceUpdate: function (publicInstance) {
-           var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'forceUpdate');
+       'use strict';
        
-           if (!internalInstance) {
-             return;
-           }
+       var canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);
        
-           internalInstance._pendingForceUpdate = true;
+       /**
+        * Simple, lightweight module assisting with the detection and context of
+        * Worker. Helps avoid circular dependencies and allows code to reason about
+        * whether or not they are in a Worker, even if they never include the main
+        * `ReactWorker` dependency.
+        */
+       var ExecutionEnvironment = {
        
-           enqueueUpdate(internalInstance);
-         },
+         canUseDOM: canUseDOM,
        
-         /**
-          * Replaces all of the state. Always use this or `setState` to mutate state.
-          * You should treat `this.state` as immutable.
-          *
-          * There is no guarantee that `this.state` will be immediately updated, so
-          * accessing `this.state` after calling this method may return the old value.
-          *
-          * @param {ReactClass} publicInstance The instance that should rerender.
-          * @param {object} completeState Next state.
-          * @internal
-          */
-         enqueueReplaceState: function (publicInstance, completeState) {
-           var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'replaceState');
+         canUseWorkers: typeof Worker !== 'undefined',
        
-           if (!internalInstance) {
-             return;
-           }
+         canUseEventListeners: canUseDOM && !!(window.addEventListener || window.attachEvent),
        
-           internalInstance._pendingStateQueue = [completeState];
-           internalInstance._pendingReplaceState = true;
+         canUseViewport: canUseDOM && !!window.screen,
        
-           enqueueUpdate(internalInstance);
-         },
+         isInWorker: !canUseDOM // For now, this is true - might change in the future.
        
-         /**
-          * Sets a subset of the state. This only exists because _pendingState is
-          * internal. This provides a merging strategy that is not available to deep
-          * properties which is confusing. TODO: Expose pendingState or don't use it
-          * during the merge.
-          *
-          * @param {ReactClass} publicInstance The instance that should rerender.
-          * @param {object} partialState Next partial state to be merged with state.
-          * @internal
-          */
-         enqueueSetState: function (publicInstance, partialState) {
-           var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'setState');
+       };
        
-           if (!internalInstance) {
-             return;
-           }
+       module.exports = ExecutionEnvironment;
+
+/***/ },
+/* 53 */
+/***/ function(module, exports, __webpack_require__) {
+
+       /**
+        * Copyright 2013-present, 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.
+        *
+        * @providesModule FallbackCompositionState
+        */
        
-           var queue = internalInstance._pendingStateQueue || (internalInstance._pendingStateQueue = []);
-           queue.push(partialState);
+       'use strict';
        
-           enqueueUpdate(internalInstance);
+       var _assign = __webpack_require__(6);
+       
+       var PooledClass = __webpack_require__(8);
+       
+       var getTextContentAccessor = __webpack_require__(54);
+       
+       /**
+        * This helper class stores information about text content of a target node,
+        * allowing comparison of content before and after a given event.
+        *
+        * Identify the node where selection currently begins, then observe
+        * both its text content and its current position in the DOM. Since the
+        * browser may natively replace the target node during composition, we can
+        * use its position to find its replacement.
+        *
+        * @param {DOMEventTarget} root
+        */
+       function FallbackCompositionState(root) {
+         this._root = root;
+         this._startText = this.getText();
+         this._fallbackText = null;
+       }
+       
+       _assign(FallbackCompositionState.prototype, {
+         destructor: function () {
+           this._root = null;
+           this._startText = null;
+           this._fallbackText = null;
          },
        
          /**
-          * Sets a subset of the props.
+          * Get current text of input.
           *
-          * @param {ReactClass} publicInstance The instance that should rerender.
-          * @param {object} partialProps Subset of the next props.
-          * @internal
+          * @return {string}
           */
-         enqueueSetProps: function (publicInstance, partialProps) {
-           var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'setProps');
-           if (!internalInstance) {
-             return;
+         getText: function () {
+           if ('value' in this._root) {
+             return this._root.value;
            }
-           ReactUpdateQueue.enqueueSetPropsInternal(internalInstance, partialProps);
-         },
-       
-         enqueueSetPropsInternal: function (internalInstance, partialProps) {
-           var topLevelWrapper = internalInstance._topLevelWrapper;
-           !topLevelWrapper ? process.env.NODE_ENV !== 'production' ? invariant(false, 'setProps(...): You called `setProps` on a ' + 'component with a parent. This is an anti-pattern since props will ' + 'get reactively updated when rendered. Instead, change the owner\'s ' + '`render` method to pass the correct value as props to the component ' + 'where it is created.') : invariant(false) : undefined;
-       
-           // Merge with the pending element if it exists, otherwise with existing
-           // element props.
-           var wrapElement = topLevelWrapper._pendingElement || topLevelWrapper._currentElement;
-           var element = wrapElement.props;
-           var props = assign({}, element.props, partialProps);
-           topLevelWrapper._pendingElement = ReactElement.cloneAndReplaceProps(wrapElement, ReactElement.cloneAndReplaceProps(element, props));
-       
-           enqueueUpdate(topLevelWrapper);
+           return this._root[getTextContentAccessor()];
          },
        
          /**
-          * Replaces all of the props.
+          * Determine the differing substring between the initially stored
+          * text content and the current content.
           *
-          * @param {ReactClass} publicInstance The instance that should rerender.
-          * @param {object} props New props.
-          * @internal
+          * @return {string}
           */
-         enqueueReplaceProps: function (publicInstance, props) {
-           var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'replaceProps');
-           if (!internalInstance) {
-             return;
+         getData: function () {
+           if (this._fallbackText) {
+             return this._fallbackText;
            }
-           ReactUpdateQueue.enqueueReplacePropsInternal(internalInstance, props);
-         },
        
-         enqueueReplacePropsInternal: function (internalInstance, props) {
-           var topLevelWrapper = internalInstance._topLevelWrapper;
-           !topLevelWrapper ? process.env.NODE_ENV !== 'production' ? invariant(false, 'replaceProps(...): You called `replaceProps` on a ' + 'component with a parent. This is an anti-pattern since props will ' + 'get reactively updated when rendered. Instead, change the owner\'s ' + '`render` method to pass the correct value as props to the component ' + 'where it is created.') : invariant(false) : undefined;
+           var start;
+           var startValue = this._startText;
+           var startLength = startValue.length;
+           var end;
+           var endValue = this.getText();
+           var endLength = endValue.length;
        
-           // Merge with the pending element if it exists, otherwise with existing
-           // element props.
-           var wrapElement = topLevelWrapper._pendingElement || topLevelWrapper._currentElement;
-           var element = wrapElement.props;
-           topLevelWrapper._pendingElement = ReactElement.cloneAndReplaceProps(wrapElement, ReactElement.cloneAndReplaceProps(element, props));
+           for (start = 0; start < startLength; start++) {
+             if (startValue[start] !== endValue[start]) {
+               break;
+             }
+           }
        
-           enqueueUpdate(topLevelWrapper);
-         },
+           var minEnd = startLength - start;
+           for (end = 1; end <= minEnd; end++) {
+             if (startValue[startLength - end] !== endValue[endLength - end]) {
+               break;
+             }
+           }
        
-         enqueueElementInternal: function (internalInstance, newElement) {
-           internalInstance._pendingElement = newElement;
-           enqueueUpdate(internalInstance);
+           var sliceTail = end > 1 ? 1 - end : undefined;
+           this._fallbackText = endValue.slice(start, sliceTail);
+           return this._fallbackText;
          }
+       });
        
-       };
+       PooledClass.addPoolingTo(FallbackCompositionState);
        
-       module.exports = ReactUpdateQueue;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
+       module.exports = FallbackCompositionState;
 
 /***/ },
-/* 56 */
+/* 54 */
 /***/ function(module, exports, __webpack_require__) {
 
-       /* WEBPACK VAR INJECTION */(function(process) {/**
-        * Copyright 2013-2015, Facebook, Inc.
+       /**
+        * Copyright 2013-present, 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.
         *
-        * @providesModule ReactUpdates
+        * @providesModule getTextContentAccessor
         */
        
        'use strict';
        
-       var CallbackQueue = __webpack_require__(57);
-       var PooledClass = __webpack_require__(58);
-       var ReactPerf = __webpack_require__(20);
-       var ReactReconciler = __webpack_require__(52);
-       var Transaction = __webpack_require__(59);
+       var ExecutionEnvironment = __webpack_require__(52);
        
-       var assign = __webpack_require__(41);
-       var invariant = __webpack_require__(15);
+       var contentKey = null;
        
-       var dirtyComponents = [];
-       var asapCallbackQueue = CallbackQueue.getPooled();
-       var asapEnqueued = false;
+       /**
+        * Gets the key used to access text content on a DOM node.
+        *
+        * @return {?string} Key used to access text content.
+        * @internal
+        */
+       function getTextContentAccessor() {
+         if (!contentKey && ExecutionEnvironment.canUseDOM) {
+           // Prefer textContent to innerText because many browsers support both but
+           // SVG <text> elements don't support innerText even when <div> does.
+           contentKey = 'textContent' in document.documentElement ? 'textContent' : 'innerText';
+         }
+         return contentKey;
+       }
        
-       var batchingStrategy = null;
+       module.exports = getTextContentAccessor;
+
+/***/ },
+/* 55 */
+/***/ function(module, exports, __webpack_require__) {
+
+       /**
+        * Copyright 2013-present, 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.
+        *
+        * @providesModule SyntheticCompositionEvent
+        */
        
-       function ensureInjected() {
-         !(ReactUpdates.ReactReconcileTransaction && batchingStrategy) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must inject a reconcile transaction class and batching ' + 'strategy') : invariant(false) : undefined;
-       }
+       'use strict';
        
-       var NESTED_UPDATES = {
-         initialize: function () {
-           this.dirtyComponentsLength = dirtyComponents.length;
-         },
-         close: function () {
-           if (this.dirtyComponentsLength !== dirtyComponents.length) {
-             // Additional updates were enqueued by componentDidUpdate handlers or
-             // similar; before our own UPDATE_QUEUEING wrapper closes, we want to run
-             // these new updates so that if A's componentDidUpdate calls setState on
-             // B, B will update before the callback A's updater provided when calling
-             // setState.
-             dirtyComponents.splice(0, this.dirtyComponentsLength);
-             flushBatchedUpdates();
-           } else {
-             dirtyComponents.length = 0;
-           }
-         }
-       };
-       
-       var UPDATE_QUEUEING = {
-         initialize: function () {
-           this.callbackQueue.reset();
-         },
-         close: function () {
-           this.callbackQueue.notifyAll();
-         }
-       };
-       
-       var TRANSACTION_WRAPPERS = [NESTED_UPDATES, UPDATE_QUEUEING];
-       
-       function ReactUpdatesFlushTransaction() {
-         this.reinitializeTransaction();
-         this.dirtyComponentsLength = null;
-         this.callbackQueue = CallbackQueue.getPooled();
-         this.reconcileTransaction = ReactUpdates.ReactReconcileTransaction.getPooled( /* forceHTML */false);
-       }
-       
-       assign(ReactUpdatesFlushTransaction.prototype, Transaction.Mixin, {
-         getTransactionWrappers: function () {
-           return TRANSACTION_WRAPPERS;
-         },
-       
-         destructor: function () {
-           this.dirtyComponentsLength = null;
-           CallbackQueue.release(this.callbackQueue);
-           this.callbackQueue = null;
-           ReactUpdates.ReactReconcileTransaction.release(this.reconcileTransaction);
-           this.reconcileTransaction = null;
-         },
-       
-         perform: function (method, scope, a) {
-           // Essentially calls `this.reconcileTransaction.perform(method, scope, a)`
-           // with this transaction's wrappers around it.
-           return Transaction.Mixin.perform.call(this, this.reconcileTransaction.perform, this.reconcileTransaction, method, scope, a);
-         }
-       });
-       
-       PooledClass.addPoolingTo(ReactUpdatesFlushTransaction);
-       
-       function batchedUpdates(callback, a, b, c, d, e) {
-         ensureInjected();
-         batchingStrategy.batchedUpdates(callback, a, b, c, d, e);
-       }
+       var SyntheticEvent = __webpack_require__(56);
        
        /**
-        * Array comparator for ReactComponents by mount ordering.
-        *
-        * @param {ReactComponent} c1 first component you're comparing
-        * @param {ReactComponent} c2 second component you're comparing
-        * @return {number} Return value usable by Array.prototype.sort().
+        * @interface Event
+        * @see http://www.w3.org/TR/DOM-Level-3-Events/#events-compositionevents
         */
-       function mountOrderComparator(c1, c2) {
-         return c1._mountOrder - c2._mountOrder;
-       }
-       
-       function runBatchedUpdates(transaction) {
-         var len = transaction.dirtyComponentsLength;
-         !(len === dirtyComponents.length) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected flush transaction\'s stored dirty-components length (%s) to ' + 'match dirty-components array length (%s).', len, dirtyComponents.length) : invariant(false) : undefined;
-       
-         // Since reconciling a component higher in the owner hierarchy usually (not
-         // always -- see shouldComponentUpdate()) will reconcile children, reconcile
-         // them before their children by sorting the array.
-         dirtyComponents.sort(mountOrderComparator);
-       
-         for (var i = 0; i < len; i++) {
-           // If a component is unmounted before pending changes apply, it will still
-           // be here, but we assume that it has cleared its _pendingCallbacks and
-           // that performUpdateIfNecessary is a noop.
-           var component = dirtyComponents[i];
-       
-           // If performUpdateIfNecessary happens to enqueue any new updates, we
-           // shouldn't execute the callbacks until the next render happens, so
-           // stash the callbacks first
-           var callbacks = component._pendingCallbacks;
-           component._pendingCallbacks = null;
-       
-           ReactReconciler.performUpdateIfNecessary(component, transaction.reconcileTransaction);
-       
-           if (callbacks) {
-             for (var j = 0; j < callbacks.length; j++) {
-               transaction.callbackQueue.enqueue(callbacks[j], component.getPublicInstance());
-             }
-           }
-         }
-       }
-       
-       var flushBatchedUpdates = function () {
-         // ReactUpdatesFlushTransaction's wrappers will clear the dirtyComponents
-         // array and perform any updates enqueued by mount-ready handlers (i.e.,
-         // componentDidUpdate) but we need to check here too in order to catch
-         // updates enqueued by setState callbacks and asap calls.
-         while (dirtyComponents.length || asapEnqueued) {
-           if (dirtyComponents.length) {
-             var transaction = ReactUpdatesFlushTransaction.getPooled();
-             transaction.perform(runBatchedUpdates, null, transaction);
-             ReactUpdatesFlushTransaction.release(transaction);
-           }
-       
-           if (asapEnqueued) {
-             asapEnqueued = false;
-             var queue = asapCallbackQueue;
-             asapCallbackQueue = CallbackQueue.getPooled();
-             queue.notifyAll();
-             CallbackQueue.release(queue);
-           }
-         }
+       var CompositionEventInterface = {
+         data: null
        };
-       flushBatchedUpdates = ReactPerf.measure('ReactUpdates', 'flushBatchedUpdates', flushBatchedUpdates);
-       
-       /**
-        * Mark a component as needing a rerender, adding an optional callback to a
-        * list of functions which will be executed once the rerender occurs.
-        */
-       function enqueueUpdate(component) {
-         ensureInjected();
-       
-         // Various parts of our code (such as ReactCompositeComponent's
-         // _renderValidatedComponent) assume that calls to render aren't nested;
-         // verify that that's the case. (This is called by each top-level update
-         // function, like setProps, setState, forceUpdate, etc.; creation and
-         // destruction of top-level components is guarded in ReactMount.)
-       
-         if (!batchingStrategy.isBatchingUpdates) {
-           batchingStrategy.batchedUpdates(enqueueUpdate, component);
-           return;
-         }
-       
-         dirtyComponents.push(component);
-       }
        
        /**
-        * Enqueue a callback to be run at the end of the current batching cycle. Throws
-        * if no updates are currently being performed.
+        * @param {object} dispatchConfig Configuration used to dispatch this event.
+        * @param {string} dispatchMarker Marker identifying the event target.
+        * @param {object} nativeEvent Native browser event.
+        * @extends {SyntheticUIEvent}
         */
-       function asap(callback, context) {
-         !batchingStrategy.isBatchingUpdates ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates.asap: Can\'t enqueue an asap callback in a context where' + 'updates are not being batched.') : invariant(false) : undefined;
-         asapCallbackQueue.enqueue(callback, context);
-         asapEnqueued = true;
+       function SyntheticCompositionEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
+         return SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
        }
        
-       var ReactUpdatesInjection = {
-         injectReconcileTransaction: function (ReconcileTransaction) {
-           !ReconcileTransaction ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must provide a reconcile transaction class') : invariant(false) : undefined;
-           ReactUpdates.ReactReconcileTransaction = ReconcileTransaction;
-         },
-       
-         injectBatchingStrategy: function (_batchingStrategy) {
-           !_batchingStrategy ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must provide a batching strategy') : invariant(false) : undefined;
-           !(typeof _batchingStrategy.batchedUpdates === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must provide a batchedUpdates() function') : invariant(false) : undefined;
-           !(typeof _batchingStrategy.isBatchingUpdates === 'boolean') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must provide an isBatchingUpdates boolean attribute') : invariant(false) : undefined;
-           batchingStrategy = _batchingStrategy;
-         }
-       };
-       
-       var ReactUpdates = {
-         /**
-          * React references `ReactReconcileTransaction` using this property in order
-          * to allow dependency injection.
-          *
-          * @internal
-          */
-         ReactReconcileTransaction: null,
-       
-         batchedUpdates: batchedUpdates,
-         enqueueUpdate: enqueueUpdate,
-         flushBatchedUpdates: flushBatchedUpdates,
-         injection: ReactUpdatesInjection,
-         asap: asap
-       };
+       SyntheticEvent.augmentClass(SyntheticCompositionEvent, CompositionEventInterface);
        
-       module.exports = ReactUpdates;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
+       module.exports = SyntheticCompositionEvent;
 
 /***/ },
-/* 57 */
+/* 56 */
 /***/ function(module, exports, __webpack_require__) {
 
        /* WEBPACK VAR INJECTION */(function(process) {/**
-        * Copyright 2013-2015, Facebook, Inc.
+        * Copyright 2013-present, 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.
         *
-        * @providesModule CallbackQueue
+        * @providesModule SyntheticEvent
         */
        
        'use strict';
        
-       var PooledClass = __webpack_require__(58);
+       var _assign = __webpack_require__(6);
        
-       var assign = __webpack_require__(41);
-       var invariant = __webpack_require__(15);
+       var PooledClass = __webpack_require__(8);
+       
+       var emptyFunction = __webpack_require__(14);
+       var warning = __webpack_require__(13);
+       
+       var didWarnForAddedNewProperty = false;
+       var isProxySupported = typeof Proxy === 'function';
+       
+       var shouldBeReleasedProperties = ['dispatchConfig', '_targetInst', 'nativeEvent', 'isDefaultPrevented', 'isPropagationStopped', '_dispatchListeners', '_dispatchInstances'];
        
        /**
-        * A specialized pseudo-event module to help keep track of components waiting to
-        * be notified when their DOM representations are available for use.
+        * @interface Event
+        * @see http://www.w3.org/TR/DOM-Level-3-Events/
+        */
+       var EventInterface = {
+         type: null,
+         target: null,
+         // currentTarget is set when dispatching; no use in copying it here
+         currentTarget: emptyFunction.thatReturnsNull,
+         eventPhase: null,
+         bubbles: null,
+         cancelable: null,
+         timeStamp: function (event) {
+           return event.timeStamp || Date.now();
+         },
+         defaultPrevented: null,
+         isTrusted: null
+       };
+       
+       /**
+        * Synthetic events are dispatched by event plugins, typically in response to a
+        * top-level event delegation handler.
         *
-        * This implements `PooledClass`, so you should never need to instantiate this.
-        * Instead, use `CallbackQueue.getPooled()`.
+        * These systems should generally use pooling to reduce the frequency of garbage
+        * collection. The system should check `isPersistent` to determine whether the
+        * event should be released into the pool after being dispatched. Users that
+        * need a persisted event should invoke `persist`.
         *
-        * @class ReactMountReady
-        * @implements PooledClass
-        * @internal
+        * Synthetic events (and subclasses) implement the DOM Level 3 Events API by
+        * normalizing browser quirks. Subclasses do not necessarily have to implement a
+        * DOM interface; custom application-specific events can also subclass this.
+        *
+        * @param {object} dispatchConfig Configuration used to dispatch this event.
+        * @param {*} targetInst Marker identifying the event target.
+        * @param {object} nativeEvent Native browser event.
+        * @param {DOMEventTarget} nativeEventTarget Target node.
         */
-       function CallbackQueue() {
-         this._callbacks = null;
-         this._contexts = null;
-       }
+       function SyntheticEvent(dispatchConfig, targetInst, nativeEvent, nativeEventTarget) {
+         if (process.env.NODE_ENV !== 'production') {
+           // these have a getter/setter for warnings
+           delete this.nativeEvent;
+           delete this.preventDefault;
+           delete this.stopPropagation;
+         }
        
-       assign(CallbackQueue.prototype, {
+         this.dispatchConfig = dispatchConfig;
+         this._targetInst = targetInst;
+         this.nativeEvent = nativeEvent;
        
-         /**
-          * Enqueues a callback to be invoked when `notifyAll` is invoked.
-          *
-          * @param {function} callback Invoked when `notifyAll` is invoked.
-          * @param {?object} context Context to call `callback` with.
-          * @internal
-          */
-         enqueue: function (callback, context) {
-           this._callbacks = this._callbacks || [];
-           this._contexts = this._contexts || [];
-           this._callbacks.push(callback);
-           this._contexts.push(context);
-         },
+         var Interface = this.constructor.Interface;
+         for (var propName in Interface) {
+           if (!Interface.hasOwnProperty(propName)) {
+             continue;
+           }
+           if (process.env.NODE_ENV !== 'production') {
+             delete this[propName]; // this has a getter/setter for warnings
+           }
+           var normalize = Interface[propName];
+           if (normalize) {
+             this[propName] = normalize(nativeEvent);
+           } else {
+             if (propName === 'target') {
+               this.target = nativeEventTarget;
+             } else {
+               this[propName] = nativeEvent[propName];
+             }
+           }
+         }
        
-         /**
-          * Invokes all enqueued callbacks and clears the queue. This is invoked after
-          * the DOM representation of a component has been created or updated.
-          *
-          * @internal
-          */
-         notifyAll: function () {
-           var callbacks = this._callbacks;
-           var contexts = this._contexts;
-           if (callbacks) {
-             !(callbacks.length === contexts.length) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Mismatched list of contexts in callback queue') : invariant(false) : undefined;
-             this._callbacks = null;
-             this._contexts = null;
-             for (var i = 0; i < callbacks.length; i++) {
-               callbacks[i].call(contexts[i]);
-             }
-             callbacks.length = 0;
-             contexts.length = 0;
+         var defaultPrevented = nativeEvent.defaultPrevented != null ? nativeEvent.defaultPrevented : nativeEvent.returnValue === false;
+         if (defaultPrevented) {
+           this.isDefaultPrevented = emptyFunction.thatReturnsTrue;
+         } else {
+           this.isDefaultPrevented = emptyFunction.thatReturnsFalse;
+         }
+         this.isPropagationStopped = emptyFunction.thatReturnsFalse;
+         return this;
+       }
+       
+       _assign(SyntheticEvent.prototype, {
+       
+         preventDefault: function () {
+           this.defaultPrevented = true;
+           var event = this.nativeEvent;
+           if (!event) {
+             return;
+           }
+       
+           if (event.preventDefault) {
+             event.preventDefault();
+           } else {
+             event.returnValue = false;
+           }
+           this.isDefaultPrevented = emptyFunction.thatReturnsTrue;
+         },
+       
+         stopPropagation: function () {
+           var event = this.nativeEvent;
+           if (!event) {
+             return;
+           }
+       
+           if (event.stopPropagation) {
+             event.stopPropagation();
+           } else {
+             event.cancelBubble = true;
            }
+           this.isPropagationStopped = emptyFunction.thatReturnsTrue;
          },
        
          /**
-          * Resets the internal queue.
-          *
-          * @internal
+          * We release all dispatched `SyntheticEvent`s after each event loop, adding
+          * them back into the pool. This allows a way to hold onto a reference that
+          * won't be added back into the pool.
           */
-         reset: function () {
-           this._callbacks = null;
-           this._contexts = null;
+         persist: function () {
+           this.isPersistent = emptyFunction.thatReturnsTrue;
          },
        
          /**
-          * `PooledClass` looks for this.
+          * Checks if this event should be released back into the pool.
+          *
+          * @return {boolean} True if this should not be released, false otherwise.
+          */
+         isPersistent: emptyFunction.thatReturnsFalse,
+       
+         /**
+          * `PooledClass` looks for `destructor` on each instance it releases.
           */
          destructor: function () {
-           this.reset();
+           var Interface = this.constructor.Interface;
+           for (var propName in Interface) {
+             if (process.env.NODE_ENV !== 'production') {
+               Object.defineProperty(this, propName, getPooledWarningPropertyDefinition(propName, Interface[propName]));
+             } else {
+               this[propName] = null;
+             }
+           }
+           for (var i = 0; i < shouldBeReleasedProperties.length; i++) {
+             this[shouldBeReleasedProperties[i]] = null;
+           }
+           if (process.env.NODE_ENV !== 'production') {
+             Object.defineProperty(this, 'nativeEvent', getPooledWarningPropertyDefinition('nativeEvent', null));
+             Object.defineProperty(this, 'preventDefault', getPooledWarningPropertyDefinition('preventDefault', emptyFunction));
+             Object.defineProperty(this, 'stopPropagation', getPooledWarningPropertyDefinition('stopPropagation', emptyFunction));
+           }
          }
        
        });
        
-       PooledClass.addPoolingTo(CallbackQueue);
+       SyntheticEvent.Interface = EventInterface;
        
-       module.exports = CallbackQueue;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
+       if (process.env.NODE_ENV !== 'production') {
+         if (isProxySupported) {
+           /*eslint-disable no-func-assign */
+           SyntheticEvent = new Proxy(SyntheticEvent, {
+             construct: function (target, args) {
+               return this.apply(target, Object.create(target.prototype), args);
+             },
+             apply: function (constructor, that, args) {
+               return new Proxy(constructor.apply(that, args), {
+                 set: function (target, prop, value) {
+                   if (prop !== 'isPersistent' && !target.constructor.Interface.hasOwnProperty(prop) && shouldBeReleasedProperties.indexOf(prop) === -1) {
+                     process.env.NODE_ENV !== 'production' ? warning(didWarnForAddedNewProperty || target.isPersistent(), 'This synthetic event is reused for performance reasons. If you\'re ' + 'seeing this, you\'re adding a new property in the synthetic event object. ' + 'The property is never released. See ' + 'https://fb.me/react-event-pooling for more information.') : void 0;
+                     didWarnForAddedNewProperty = true;
+                   }
+                   target[prop] = value;
+                   return true;
+                 }
+               });
+             }
+           });
+           /*eslint-enable no-func-assign */
+         }
+       }
+       /**
+        * Helper to reduce boilerplate when creating subclasses.
+        *
+        * @param {function} Class
+        * @param {?object} Interface
+        */
+       SyntheticEvent.augmentClass = function (Class, Interface) {
+         var Super = this;
+       
+         var E = function () {};
+         E.prototype = Super.prototype;
+         var prototype = new E();
+       
+         _assign(prototype, Class.prototype);
+         Class.prototype = prototype;
+         Class.prototype.constructor = Class;
+       
+         Class.Interface = _assign({}, Super.Interface, Interface);
+         Class.augmentClass = Super.augmentClass;
+       
+         PooledClass.addPoolingTo(Class, PooledClass.fourArgumentPooler);
+       };
+       
+       PooledClass.addPoolingTo(SyntheticEvent, PooledClass.fourArgumentPooler);
+       
+       module.exports = SyntheticEvent;
+       
+       /**
+         * Helper to nullify syntheticEvent instance properties when destructing
+         *
+         * @param {object} SyntheticEvent
+         * @param {String} propName
+         * @return {object} defineProperty object
+         */
+       function getPooledWarningPropertyDefinition(propName, getVal) {
+         var isFunction = typeof getVal === 'function';
+         return {
+           configurable: true,
+           set: set,
+           get: get
+         };
+       
+         function set(val) {
+           var action = isFunction ? 'setting the method' : 'setting the property';
+           warn(action, 'This is effectively a no-op');
+           return val;
+         }
+       
+         function get() {
+           var action = isFunction ? 'accessing the method' : 'accessing the property';
+           var result = isFunction ? 'This is a no-op function' : 'This is set to null';
+           warn(action, result);
+           return getVal;
+         }
+       
+         function warn(action, result) {
+           var warningCondition = false;
+           process.env.NODE_ENV !== 'production' ? warning(warningCondition, 'This synthetic event is reused for performance reasons. If you\'re seeing this, ' + 'you\'re %s `%s` on a released/nullified synthetic event. %s. ' + 'If you must keep the original synthetic event around, use event.persist(). ' + 'See https://fb.me/react-event-pooling for more information.', action, propName, result) : void 0;
+         }
+       }
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
 
 /***/ },
-/* 58 */
+/* 57 */
 /***/ function(module, exports, __webpack_require__) {
 
-       /* WEBPACK VAR INJECTION */(function(process) {/**
-        * Copyright 2013-2015, Facebook, Inc.
+       /**
+        * Copyright 2013-present, 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.
         *
-        * @providesModule PooledClass
+        * @providesModule SyntheticInputEvent
         */
        
        'use strict';
        
-       var invariant = __webpack_require__(15);
+       var SyntheticEvent = __webpack_require__(56);
        
        /**
-        * Static poolers. Several custom versions for each potential number of
-        * arguments. A completely generic pooler is easy to implement, but would
-        * require accessing the `arguments` object. In each of these, `this` refers to
-        * the Class itself, not an instance. If any others are needed, simply add them
-        * here, or in their own files.
+        * @interface Event
+        * @see http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105
+        *      /#events-inputevents
         */
-       var oneArgumentPooler = function (copyFieldsFrom) {
-         var Klass = this;
-         if (Klass.instancePool.length) {
-           var instance = Klass.instancePool.pop();
-           Klass.call(instance, copyFieldsFrom);
-           return instance;
-         } else {
-           return new Klass(copyFieldsFrom);
-         }
-       };
-       
-       var twoArgumentPooler = function (a1, a2) {
-         var Klass = this;
-         if (Klass.instancePool.length) {
-           var instance = Klass.instancePool.pop();
-           Klass.call(instance, a1, a2);
-           return instance;
-         } else {
-           return new Klass(a1, a2);
-         }
-       };
-       
-       var threeArgumentPooler = function (a1, a2, a3) {
-         var Klass = this;
-         if (Klass.instancePool.length) {
-           var instance = Klass.instancePool.pop();
-           Klass.call(instance, a1, a2, a3);
-           return instance;
-         } else {
-           return new Klass(a1, a2, a3);
-         }
-       };
-       
-       var fourArgumentPooler = function (a1, a2, a3, a4) {
-         var Klass = this;
-         if (Klass.instancePool.length) {
-           var instance = Klass.instancePool.pop();
-           Klass.call(instance, a1, a2, a3, a4);
-           return instance;
-         } else {
-           return new Klass(a1, a2, a3, a4);
-         }
-       };
-       
-       var fiveArgumentPooler = function (a1, a2, a3, a4, a5) {
-         var Klass = this;
-         if (Klass.instancePool.length) {
-           var instance = Klass.instancePool.pop();
-           Klass.call(instance, a1, a2, a3, a4, a5);
-           return instance;
-         } else {
-           return new Klass(a1, a2, a3, a4, a5);
-         }
-       };
-       
-       var standardReleaser = function (instance) {
-         var Klass = this;
-         !(instance instanceof Klass) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Trying to release an instance into a pool of a different type.') : invariant(false) : undefined;
-         instance.destructor();
-         if (Klass.instancePool.length < Klass.poolSize) {
-           Klass.instancePool.push(instance);
-         }
+       var InputEventInterface = {
+         data: null
        };
        
-       var DEFAULT_POOL_SIZE = 10;
-       var DEFAULT_POOLER = oneArgumentPooler;
-       
        /**
-        * Augments `CopyConstructor` to be a poolable class, augmenting only the class
-        * itself (statically) not adding any prototypical fields. Any CopyConstructor
-        * you give this may have a `poolSize` property, and will look for a
-        * prototypical `destructor` on instances (optional).
-        *
-        * @param {Function} CopyConstructor Constructor that can be used to reset.
-        * @param {Function} pooler Customizable pooler.
+        * @param {object} dispatchConfig Configuration used to dispatch this event.
+        * @param {string} dispatchMarker Marker identifying the event target.
+        * @param {object} nativeEvent Native browser event.
+        * @extends {SyntheticUIEvent}
         */
-       var addPoolingTo = function (CopyConstructor, pooler) {
-         var NewKlass = CopyConstructor;
-         NewKlass.instancePool = [];
-         NewKlass.getPooled = pooler || DEFAULT_POOLER;
-         if (!NewKlass.poolSize) {
-           NewKlass.poolSize = DEFAULT_POOL_SIZE;
-         }
-         NewKlass.release = standardReleaser;
-         return NewKlass;
-       };
+       function SyntheticInputEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
+         return SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
+       }
        
-       var PooledClass = {
-         addPoolingTo: addPoolingTo,
-         oneArgumentPooler: oneArgumentPooler,
-         twoArgumentPooler: twoArgumentPooler,
-         threeArgumentPooler: threeArgumentPooler,
-         fourArgumentPooler: fourArgumentPooler,
-         fiveArgumentPooler: fiveArgumentPooler
-       };
+       SyntheticEvent.augmentClass(SyntheticInputEvent, InputEventInterface);
        
-       module.exports = PooledClass;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
+       module.exports = SyntheticInputEvent;
 
 /***/ },
-/* 59 */
+/* 58 */
 /***/ function(module, exports, __webpack_require__) {
 
-       /* WEBPACK VAR INJECTION */(function(process) {/**
-        * Copyright 2013-2015, Facebook, Inc.
+       /**
+        * Copyright 2013-present, 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.
         *
-        * @providesModule Transaction
+        * @providesModule ChangeEventPlugin
         */
        
        'use strict';
        
-       var invariant = __webpack_require__(15);
+       var EventConstants = __webpack_require__(44);
+       var EventPluginHub = __webpack_require__(46);
+       var EventPropagators = __webpack_require__(45);
+       var ExecutionEnvironment = __webpack_require__(52);
+       var ReactDOMComponentTree = __webpack_require__(39);
+       var ReactUpdates = __webpack_require__(59);
+       var SyntheticEvent = __webpack_require__(56);
+       
+       var getEventTarget = __webpack_require__(73);
+       var isEventSupported = __webpack_require__(74);
+       var isTextInputElement = __webpack_require__(75);
+       var keyOf = __webpack_require__(27);
+       
+       var topLevelTypes = EventConstants.topLevelTypes;
+       
+       var eventTypes = {
+         change: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onChange: null }),
+             captured: keyOf({ onChangeCapture: null })
+           },
+           dependencies: [topLevelTypes.topBlur, topLevelTypes.topChange, topLevelTypes.topClick, topLevelTypes.topFocus, topLevelTypes.topInput, topLevelTypes.topKeyDown, topLevelTypes.topKeyUp, topLevelTypes.topSelectionChange]
+         }
+       };
        
        /**
-        * `Transaction` creates a black box that is able to wrap any method such that
-        * certain invariants are maintained before and after the method is invoked
-        * (Even if an exception is thrown while invoking the wrapped method). Whoever
-        * instantiates a transaction can provide enforcers of the invariants at
-        * creation time. The `Transaction` class itself will supply one additional
-        * automatic invariant for you - the invariant that any transaction instance
-        * should not be run while it is already being run. You would typically create a
-        * single instance of a `Transaction` for reuse multiple times, that potentially
-        * is used to wrap several different methods. Wrappers are extremely simple -
-        * they only require implementing two methods.
-        *
-        * <pre>
-        *                       wrappers (injected at creation time)
-        *                                      +        +
-        *                                      |        |
-        *                    +-----------------|--------|--------------+
-        *                    |                 v        |              |
-        *                    |      +---------------+   |              |
-        *                    |   +--|    wrapper1   |---|----+         |
-        *                    |   |  +---------------+   v    |         |
-        *                    |   |          +-------------+  |         |
-        *                    |   |     +----|   wrapper2  |--------+   |
-        *                    |   |     |    +-------------+  |     |   |
-        *                    |   |     |                     |     |   |
-        *                    |   v     v                     v     v   | wrapper
-        *                    | +---+ +---+   +---------+   +---+ +---+ | invariants
-        * perform(anyMethod) | |   | |   |   |         |   |   | |   | | maintained
-        * +----------------->|-|---|-|---|-->|anyMethod|---|---|-|---|-|-------->
-        *                    | |   | |   |   |         |   |   | |   | |
-        *                    | |   | |   |   |         |   |   | |   | |
-        *                    | |   | |   |   |         |   |   | |   | |
-        *                    | +---+ +---+   +---------+   +---+ +---+ |
-        *                    |  initialize                    close    |
-        *                    +-----------------------------------------+
-        * </pre>
-        *
-        * Use cases:
-        * - Preserving the input selection ranges before/after reconciliation.
-        *   Restoring selection even in the event of an unexpected error.
-        * - Deactivating events while rearranging the DOM, preventing blurs/focuses,
-        *   while guaranteeing that afterwards, the event system is reactivated.
-        * - Flushing a queue of collected DOM mutations to the main UI thread after a
-        *   reconciliation takes place in a worker thread.
-        * - Invoking any collected `componentDidUpdate` callbacks after rendering new
-        *   content.
-        * - (Future use case): Wrapping particular flushes of the `ReactWorker` queue
-        *   to preserve the `scrollTop` (an automatic scroll aware DOM).
-        * - (Future use case): Layout calculations before and after DOM updates.
-        *
-        * Transactional plugin API:
-        * - A module that has an `initialize` method that returns any precomputation.
-        * - and a `close` method that accepts the precomputation. `close` is invoked
-        *   when the wrapped process is completed, or has failed.
-        *
-        * @param {Array<TransactionalWrapper>} transactionWrapper Wrapper modules
-        * that implement `initialize` and `close`.
-        * @return {Transaction} Single transaction for reuse in thread.
-        *
-        * @class Transaction
+        * For IE shims
         */
-       var Mixin = {
-         /**
-          * Sets up this instance so that it is prepared for collecting metrics. Does
-          * so such that this setup method may be used on an instance that is already
-          * initialized, in a way that does not consume additional memory upon reuse.
-          * That can be useful if you decide to make your subclass of this mixin a
-          * "PooledClass".
-          */
-         reinitializeTransaction: function () {
-           this.transactionWrappers = this.getTransactionWrappers();
-           if (this.wrapperInitData) {
-             this.wrapperInitData.length = 0;
-           } else {
-             this.wrapperInitData = [];
-           }
-           this._isInTransaction = false;
-         },
-       
-         _isInTransaction: false,
+       var activeElement = null;
+       var activeElementInst = null;
+       var activeElementValue = null;
+       var activeElementValueProp = null;
        
-         /**
-          * @abstract
-          * @return {Array<TransactionWrapper>} Array of transaction wrappers.
-          */
-         getTransactionWrappers: null,
+       /**
+        * SECTION: handle `change` event
+        */
+       function shouldUseChangeEvent(elem) {
+         var nodeName = elem.nodeName && elem.nodeName.toLowerCase();
+         return nodeName === 'select' || nodeName === 'input' && elem.type === 'file';
+       }
        
-         isInTransaction: function () {
-           return !!this._isInTransaction;
-         },
+       var doesChangeEventBubble = false;
+       if (ExecutionEnvironment.canUseDOM) {
+         // See `handleChange` comment below
+         doesChangeEventBubble = isEventSupported('change') && (!('documentMode' in document) || document.documentMode > 8);
+       }
        
-         /**
-          * Executes the function within a safety window. Use this for the top level
-          * methods that result in large amounts of computation/mutations that would
-          * need to be safety checked. The optional arguments helps prevent the need
-          * to bind in many cases.
-          *
-          * @param {function} method Member of scope to call.
-          * @param {Object} scope Scope to invoke from.
-          * @param {Object?=} a Argument to pass to the method.
-          * @param {Object?=} b Argument to pass to the method.
-          * @param {Object?=} c Argument to pass to the method.
-          * @param {Object?=} d Argument to pass to the method.
-          * @param {Object?=} e Argument to pass to the method.
-          * @param {Object?=} f Argument to pass to the method.
-          *
-          * @return {*} Return value from `method`.
-          */
-         perform: function (method, scope, a, b, c, d, e, f) {
-           !!this.isInTransaction() ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Transaction.perform(...): Cannot initialize a transaction when there ' + 'is already an outstanding transaction.') : invariant(false) : undefined;
-           var errorThrown;
-           var ret;
-           try {
-             this._isInTransaction = true;
-             // Catching errors makes debugging more difficult, so we start with
-             // errorThrown set to true before setting it to false after calling
-             // close -- if it's still set to true in the finally block, it means
-             // one of these calls threw.
-             errorThrown = true;
-             this.initializeAll(0);
-             ret = method.call(scope, a, b, c, d, e, f);
-             errorThrown = false;
-           } finally {
-             try {
-               if (errorThrown) {
-                 // If `method` throws, prefer to show that stack trace over any thrown
-                 // by invoking `closeAll`.
-                 try {
-                   this.closeAll(0);
-                 } catch (err) {}
-               } else {
-                 // Since `method` didn't throw, we don't want to silence the exception
-                 // here.
-                 this.closeAll(0);
-               }
-             } finally {
-               this._isInTransaction = false;
-             }
-           }
-           return ret;
-         },
+       function manualDispatchChangeEvent(nativeEvent) {
+         var event = SyntheticEvent.getPooled(eventTypes.change, activeElementInst, nativeEvent, getEventTarget(nativeEvent));
+         EventPropagators.accumulateTwoPhaseDispatches(event);
        
-         initializeAll: function (startIndex) {
-           var transactionWrappers = this.transactionWrappers;
-           for (var i = startIndex; i < transactionWrappers.length; i++) {
-             var wrapper = transactionWrappers[i];
-             try {
-               // Catching errors makes debugging more difficult, so we start with the
-               // OBSERVED_ERROR state before overwriting it with the real return value
-               // of initialize -- if it's still set to OBSERVED_ERROR in the finally
-               // block, it means wrapper.initialize threw.
-               this.wrapperInitData[i] = Transaction.OBSERVED_ERROR;
-               this.wrapperInitData[i] = wrapper.initialize ? wrapper.initialize.call(this) : null;
-             } finally {
-               if (this.wrapperInitData[i] === Transaction.OBSERVED_ERROR) {
-                 // The initializer for wrapper i threw an error; initialize the
-                 // remaining wrappers but silence any exceptions from them to ensure
-                 // that the first error is the one to bubble up.
-                 try {
-                   this.initializeAll(i + 1);
-                 } catch (err) {}
-               }
-             }
-           }
-         },
+         // If change and propertychange bubbled, we'd just bind to it like all the
+         // other events and have it go through ReactBrowserEventEmitter. Since it
+         // doesn't, we manually listen for the events and so we have to enqueue and
+         // process the abstract event manually.
+         //
+         // Batching is necessary here in order to ensure that all event handlers run
+         // before the next rerender (including event handlers attached to ancestor
+         // elements instead of directly on the input). Without this, controlled
+         // components don't work properly in conjunction with event bubbling because
+         // the component is rerendered and the value reverted before all the event
+         // handlers can run. See https://github.com/facebook/react/issues/708.
+         ReactUpdates.batchedUpdates(runEventInBatch, event);
+       }
        
-         /**
-          * Invokes each of `this.transactionWrappers.close[i]` functions, passing into
-          * them the respective return values of `this.transactionWrappers.init[i]`
-          * (`close`rs that correspond to initializers that failed will not be
-          * invoked).
-          */
-         closeAll: function (startIndex) {
-           !this.isInTransaction() ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Transaction.closeAll(): Cannot close transaction when none are open.') : invariant(false) : undefined;
-           var transactionWrappers = this.transactionWrappers;
-           for (var i = startIndex; i < transactionWrappers.length; i++) {
-             var wrapper = transactionWrappers[i];
-             var initData = this.wrapperInitData[i];
-             var errorThrown;
-             try {
-               // Catching errors makes debugging more difficult, so we start with
-               // errorThrown set to true before setting it to false after calling
-               // close -- if it's still set to true in the finally block, it means
-               // wrapper.close threw.
-               errorThrown = true;
-               if (initData !== Transaction.OBSERVED_ERROR && wrapper.close) {
-                 wrapper.close.call(this, initData);
-               }
-               errorThrown = false;
-             } finally {
-               if (errorThrown) {
-                 // The closer for wrapper i threw an error; close the remaining
-                 // wrappers but silence any exceptions from them to ensure that the
-                 // first error is the one to bubble up.
-                 try {
-                   this.closeAll(i + 1);
-                 } catch (e) {}
-               }
-             }
-           }
-           this.wrapperInitData.length = 0;
-         }
-       };
+       function runEventInBatch(event) {
+         EventPluginHub.enqueueEvents(event);
+         EventPluginHub.processEventQueue(false);
+       }
        
-       var Transaction = {
+       function startWatchingForChangeEventIE8(target, targetInst) {
+         activeElement = target;
+         activeElementInst = targetInst;
+         activeElement.attachEvent('onchange', manualDispatchChangeEvent);
+       }
        
-         Mixin: Mixin,
+       function stopWatchingForChangeEventIE8() {
+         if (!activeElement) {
+           return;
+         }
+         activeElement.detachEvent('onchange', manualDispatchChangeEvent);
+         activeElement = null;
+         activeElementInst = null;
+       }
        
-         /**
-          * Token to look for to determine if an error occurred.
-          */
-         OBSERVED_ERROR: {}
+       function getTargetInstForChangeEvent(topLevelType, targetInst) {
+         if (topLevelType === topLevelTypes.topChange) {
+           return targetInst;
+         }
+       }
+       function handleEventsForChangeEventIE8(topLevelType, target, targetInst) {
+         if (topLevelType === topLevelTypes.topFocus) {
+           // stopWatching() should be a noop here but we call it just in case we
+           // missed a blur event somehow.
+           stopWatchingForChangeEventIE8();
+           startWatchingForChangeEventIE8(target, targetInst);
+         } else if (topLevelType === topLevelTypes.topBlur) {
+           stopWatchingForChangeEventIE8();
+         }
+       }
        
-       };
-       
-       module.exports = Transaction;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
-
-/***/ },
-/* 60 */
-/***/ function(module, exports, __webpack_require__) {
-
-       /* WEBPACK VAR INJECTION */(function(process) {/**
-        * 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.
-        *
-        * @providesModule emptyObject
+       /**
+        * SECTION: handle `input` event
         */
+       var isInputEventSupported = false;
+       if (ExecutionEnvironment.canUseDOM) {
+         // IE9 claims to support the input event but fails to trigger it when
+         // deleting text, so we ignore its input events.
+         // IE10+ fire input events to often, such when a placeholder
+         // changes or when an input with a placeholder is focused.
+         isInputEventSupported = isEventSupported('input') && (!('documentMode' in document) || document.documentMode > 11);
+       }
        
-       'use strict';
+       /**
+        * (For IE <=11) Replacement getter/setter for the `value` property that gets
+        * set on the active element.
+        */
+       var newValueProp = {
+         get: function () {
+           return activeElementValueProp.get.call(this);
+         },
+         set: function (val) {
+           // Cast to a string so we can do equality checks.
+           activeElementValue = '' + val;
+           activeElementValueProp.set.call(this, val);
+         }
+       };
        
-       var emptyObject = {};
+       /**
+        * (For IE <=11) Starts tracking propertychange events on the passed-in element
+        * and override the value property so that we can distinguish user events from
+        * value changes in JS.
+        */
+       function startWatchingForValueChange(target, targetInst) {
+         activeElement = target;
+         activeElementInst = targetInst;
+         activeElementValue = target.value;
+         activeElementValueProp = Object.getOwnPropertyDescriptor(target.constructor.prototype, 'value');
        
-       if (process.env.NODE_ENV !== 'production') {
-         Object.freeze(emptyObject);
+         // Not guarded in a canDefineProperty check: IE8 supports defineProperty only
+         // on DOM elements
+         Object.defineProperty(activeElement, 'value', newValueProp);
+         if (activeElement.attachEvent) {
+           activeElement.attachEvent('onpropertychange', handlePropertyChange);
+         } else {
+           activeElement.addEventListener('propertychange', handlePropertyChange, false);
+         }
        }
        
-       module.exports = emptyObject;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
-
-/***/ },
-/* 61 */
-/***/ 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.
-        *
-        * @providesModule containsNode
-        * @typechecks
+        * (For IE <=11) Removes the event listeners from the currently-tracked element,
+        * if any exists.
         */
+       function stopWatchingForValueChange() {
+         if (!activeElement) {
+           return;
+         }
        
-       'use strict';
+         // delete restores the original property definition
+         delete activeElement.value;
        
-       var isTextNode = __webpack_require__(62);
+         if (activeElement.detachEvent) {
+           activeElement.detachEvent('onpropertychange', handlePropertyChange);
+         } else {
+           activeElement.removeEventListener('propertychange', handlePropertyChange, false);
+         }
        
-       /*eslint-disable no-bitwise */
+         activeElement = null;
+         activeElementInst = null;
+         activeElementValue = null;
+         activeElementValueProp = null;
+       }
        
        /**
-        * Checks if a given DOM node contains or is another DOM node.
-        *
-        * @param {?DOMNode} outerNode Outer DOM node.
-        * @param {?DOMNode} innerNode Inner DOM node.
-        * @return {boolean} True if `outerNode` contains or is `innerNode`.
+        * (For IE <=11) Handles a propertychange event, sending a `change` event if
+        * the value of the active element has changed.
         */
-       function containsNode(_x, _x2) {
-         var _again = true;
-       
-         _function: while (_again) {
-           var outerNode = _x,
-               innerNode = _x2;
-           _again = false;
-       
-           if (!outerNode || !innerNode) {
-             return false;
-           } else if (outerNode === innerNode) {
-             return true;
-           } else if (isTextNode(outerNode)) {
-             return false;
-           } else if (isTextNode(innerNode)) {
-             _x = outerNode;
-             _x2 = innerNode.parentNode;
-             _again = true;
-             continue _function;
-           } else if (outerNode.contains) {
-             return outerNode.contains(innerNode);
-           } else if (outerNode.compareDocumentPosition) {
-             return !!(outerNode.compareDocumentPosition(innerNode) & 16);
-           } else {
-             return false;
-           }
+       function handlePropertyChange(nativeEvent) {
+         if (nativeEvent.propertyName !== 'value') {
+           return;
+         }
+         var value = nativeEvent.srcElement.value;
+         if (value === activeElementValue) {
+           return;
          }
+         activeElementValue = value;
+       
+         manualDispatchChangeEvent(nativeEvent);
        }
        
-       module.exports = containsNode;
-
-/***/ },
-/* 62 */
-/***/ 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.
-        *
-        * @providesModule isTextNode
-        * @typechecks
+        * If a `change` event should be fired, returns the target's ID.
         */
+       function getTargetInstForInputEvent(topLevelType, targetInst) {
+         if (topLevelType === topLevelTypes.topInput) {
+           // In modern browsers (i.e., not IE8 or IE9), the input event is exactly
+           // what we want so fall through here and trigger an abstract event
+           return targetInst;
+         }
+       }
        
-       'use strict';
+       function handleEventsForInputEventIE(topLevelType, target, targetInst) {
+         if (topLevelType === topLevelTypes.topFocus) {
+           // In IE8, we can capture almost all .value changes by adding a
+           // propertychange handler and looking for events with propertyName
+           // equal to 'value'
+           // In IE9-11, propertychange fires for most input events but is buggy and
+           // doesn't fire when text is deleted, but conveniently, selectionchange
+           // appears to fire in all of the remaining cases so we catch those and
+           // forward the event if the value has changed
+           // In either case, we don't want to call the event handler if the value
+           // is changed from JS so we redefine a setter for `.value` that updates
+           // our activeElementValue variable, allowing us to ignore those changes
+           //
+           // stopWatching() should be a noop here but we call it just in case we
+           // missed a blur event somehow.
+           stopWatchingForValueChange();
+           startWatchingForValueChange(target, targetInst);
+         } else if (topLevelType === topLevelTypes.topBlur) {
+           stopWatchingForValueChange();
+         }
+       }
        
-       var isNode = __webpack_require__(63);
+       // For IE8 and IE9.
+       function getTargetInstForInputEventIE(topLevelType, targetInst) {
+         if (topLevelType === topLevelTypes.topSelectionChange || topLevelType === topLevelTypes.topKeyUp || topLevelType === topLevelTypes.topKeyDown) {
+           // On the selectionchange event, the target is just document which isn't
+           // helpful for us so just check activeElement instead.
+           //
+           // 99% of the time, keydown and keyup aren't necessary. IE8 fails to fire
+           // propertychange on the first input event after setting `value` from a
+           // script and fires only keydown, keypress, keyup. Catching keyup usually
+           // gets it and catching keydown lets us fire an event for the first
+           // keystroke if user does a key repeat (it'll be a little delayed: right
+           // before the second keystroke). Other input methods (e.g., paste) seem to
+           // fire selectionchange normally.
+           if (activeElement && activeElement.value !== activeElementValue) {
+             activeElementValue = activeElement.value;
+             return activeElementInst;
+           }
+         }
+       }
        
        /**
-        * @param {*} object The object to check.
-        * @return {boolean} Whether or not the object is a DOM text node.
+        * SECTION: handle `click` event
         */
-       function isTextNode(object) {
-         return isNode(object) && object.nodeType == 3;
+       function shouldUseClickEvent(elem) {
+         // Use the `click` event to detect changes to checkbox and radio inputs.
+         // This approach works across all browsers, whereas `change` does not fire
+         // until `blur` in IE8.
+         return elem.nodeName && elem.nodeName.toLowerCase() === 'input' && (elem.type === 'checkbox' || elem.type === 'radio');
+       }
+       
+       function getTargetInstForClickEvent(topLevelType, targetInst) {
+         if (topLevelType === topLevelTypes.topClick) {
+           return targetInst;
+         }
        }
        
-       module.exports = isTextNode;
-
-/***/ },
-/* 63 */
-/***/ function(module, exports) {
-
        /**
-        * 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.
+        * This plugin creates an `onChange` event that normalizes change events
+        * across form elements. This event fires at a time when it's possible to
+        * change the element's value without seeing a flicker.
         *
-        * @providesModule isNode
-        * @typechecks
+        * Supported elements are:
+        * - input (see `isTextInputElement`)
+        * - textarea
+        * - select
         */
+       var ChangeEventPlugin = {
        
-       /**
-        * @param {*} object The object to check.
-        * @return {boolean} Whether or not the object is a DOM node.
-        */
-       'use strict';
+         eventTypes: eventTypes,
        
-       function isNode(object) {
-         return !!(object && (typeof Node === 'function' ? object instanceof Node : typeof object === 'object' && typeof object.nodeType === 'number' && typeof object.nodeName === 'string'));
-       }
+         extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {
+           var targetNode = targetInst ? ReactDOMComponentTree.getNodeFromInstance(targetInst) : window;
        
-       module.exports = isNode;
+           var getTargetInstFunc, handleEventFunc;
+           if (shouldUseChangeEvent(targetNode)) {
+             if (doesChangeEventBubble) {
+               getTargetInstFunc = getTargetInstForChangeEvent;
+             } else {
+               handleEventFunc = handleEventsForChangeEventIE8;
+             }
+           } else if (isTextInputElement(targetNode)) {
+             if (isInputEventSupported) {
+               getTargetInstFunc = getTargetInstForInputEvent;
+             } else {
+               getTargetInstFunc = getTargetInstForInputEventIE;
+               handleEventFunc = handleEventsForInputEventIE;
+             }
+           } else if (shouldUseClickEvent(targetNode)) {
+             getTargetInstFunc = getTargetInstForClickEvent;
+           }
+       
+           if (getTargetInstFunc) {
+             var inst = getTargetInstFunc(topLevelType, targetInst);
+             if (inst) {
+               var event = SyntheticEvent.getPooled(eventTypes.change, inst, nativeEvent, nativeEventTarget);
+               event.type = 'change';
+               EventPropagators.accumulateTwoPhaseDispatches(event);
+               return event;
+             }
+           }
+       
+           if (handleEventFunc) {
+             handleEventFunc(topLevelType, targetNode, targetInst);
+           }
+         }
+       
+       };
+       
+       module.exports = ChangeEventPlugin;
 
 /***/ },
-/* 64 */
+/* 59 */
 /***/ function(module, exports, __webpack_require__) {
 
        /* WEBPACK VAR INJECTION */(function(process) {/**
-        * Copyright 2013-2015, Facebook, Inc.
+        * Copyright 2013-present, 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.
         *
-        * @providesModule instantiateReactComponent
-        * @typechecks static-only
+        * @providesModule ReactUpdates
         */
        
        'use strict';
        
-       var ReactCompositeComponent = __webpack_require__(65);
-       var ReactEmptyComponent = __webpack_require__(70);
-       var ReactNativeComponent = __webpack_require__(71);
+       var _prodInvariant = __webpack_require__(9),
+           _assign = __webpack_require__(6);
        
-       var assign = __webpack_require__(41);
-       var invariant = __webpack_require__(15);
-       var warning = __webpack_require__(27);
+       var CallbackQueue = __webpack_require__(60);
+       var PooledClass = __webpack_require__(8);
+       var ReactFeatureFlags = __webpack_require__(61);
+       var ReactReconciler = __webpack_require__(62);
+       var Transaction = __webpack_require__(72);
        
-       // To avoid a cyclic dependency, we create the final class in this module
-       var ReactCompositeComponentWrapper = function () {};
-       assign(ReactCompositeComponentWrapper.prototype, ReactCompositeComponent.Mixin, {
-         _instantiateReactComponent: instantiateReactComponent
-       });
+       var invariant = __webpack_require__(10);
        
-       function getDeclarationErrorAddendum(owner) {
-         if (owner) {
-           var name = owner.getName();
-           if (name) {
-             return ' Check the render method of `' + name + '`.';
-           }
-         }
-         return '';
-       }
+       var dirtyComponents = [];
+       var updateBatchNumber = 0;
+       var asapCallbackQueue = CallbackQueue.getPooled();
+       var asapEnqueued = false;
        
-       /**
-        * Check if the type reference is a known internal type. I.e. not a user
-        * provided composite type.
-        *
-        * @param {function} type
-        * @return {boolean} Returns true if this is a valid internal type.
-        */
-       function isInternalComponentType(type) {
-         return typeof type === 'function' && typeof type.prototype !== 'undefined' && typeof type.prototype.mountComponent === 'function' && typeof type.prototype.receiveComponent === 'function';
+       var batchingStrategy = null;
+       
+       function ensureInjected() {
+         !(ReactUpdates.ReactReconcileTransaction && batchingStrategy) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must inject a reconcile transaction class and batching strategy') : _prodInvariant('123') : void 0;
        }
        
-       /**
-        * Given a ReactNode, create an instance that will actually be mounted.
-        *
-        * @param {ReactNode} node
-        * @return {object} A new instance of the element's constructor.
-        * @protected
+       var NESTED_UPDATES = {
+         initialize: function () {
+           this.dirtyComponentsLength = dirtyComponents.length;
+         },
+         close: function () {
+           if (this.dirtyComponentsLength !== dirtyComponents.length) {
+             // Additional updates were enqueued by componentDidUpdate handlers or
+             // similar; before our own UPDATE_QUEUEING wrapper closes, we want to run
+             // these new updates so that if A's componentDidUpdate calls setState on
+             // B, B will update before the callback A's updater provided when calling
+             // setState.
+             dirtyComponents.splice(0, this.dirtyComponentsLength);
+             flushBatchedUpdates();
+           } else {
+             dirtyComponents.length = 0;
+           }
+         }
+       };
+       
+       var UPDATE_QUEUEING = {
+         initialize: function () {
+           this.callbackQueue.reset();
+         },
+         close: function () {
+           this.callbackQueue.notifyAll();
+         }
+       };
+       
+       var TRANSACTION_WRAPPERS = [NESTED_UPDATES, UPDATE_QUEUEING];
+       
+       function ReactUpdatesFlushTransaction() {
+         this.reinitializeTransaction();
+         this.dirtyComponentsLength = null;
+         this.callbackQueue = CallbackQueue.getPooled();
+         this.reconcileTransaction = ReactUpdates.ReactReconcileTransaction.getPooled(
+         /* useCreateElement */true);
+       }
+       
+       _assign(ReactUpdatesFlushTransaction.prototype, Transaction.Mixin, {
+         getTransactionWrappers: function () {
+           return TRANSACTION_WRAPPERS;
+         },
+       
+         destructor: function () {
+           this.dirtyComponentsLength = null;
+           CallbackQueue.release(this.callbackQueue);
+           this.callbackQueue = null;
+           ReactUpdates.ReactReconcileTransaction.release(this.reconcileTransaction);
+           this.reconcileTransaction = null;
+         },
+       
+         perform: function (method, scope, a) {
+           // Essentially calls `this.reconcileTransaction.perform(method, scope, a)`
+           // with this transaction's wrappers around it.
+           return Transaction.Mixin.perform.call(this, this.reconcileTransaction.perform, this.reconcileTransaction, method, scope, a);
+         }
+       });
+       
+       PooledClass.addPoolingTo(ReactUpdatesFlushTransaction);
+       
+       function batchedUpdates(callback, a, b, c, d, e) {
+         ensureInjected();
+         batchingStrategy.batchedUpdates(callback, a, b, c, d, e);
+       }
+       
+       /**
+        * Array comparator for ReactComponents by mount ordering.
+        *
+        * @param {ReactComponent} c1 first component you're comparing
+        * @param {ReactComponent} c2 second component you're comparing
+        * @return {number} Return value usable by Array.prototype.sort().
         */
-       function instantiateReactComponent(node) {
-         var instance;
+       function mountOrderComparator(c1, c2) {
+         return c1._mountOrder - c2._mountOrder;
+       }
        
-         if (node === null || node === false) {
-           instance = new ReactEmptyComponent(instantiateReactComponent);
-         } else if (typeof node === 'object') {
-           var element = node;
-           !(element && (typeof element.type === 'function' || typeof element.type === 'string')) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Element type is invalid: expected a string (for built-in components) ' + 'or a class/function (for composite components) but got: %s.%s', element.type == null ? element.type : typeof element.type, getDeclarationErrorAddendum(element._owner)) : invariant(false) : undefined;
+       function runBatchedUpdates(transaction) {
+         var len = transaction.dirtyComponentsLength;
+         !(len === dirtyComponents.length) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected flush transaction\'s stored dirty-components length (%s) to match dirty-components array length (%s).', len, dirtyComponents.length) : _prodInvariant('124', len, dirtyComponents.length) : void 0;
        
-           // Special case string values
-           if (typeof element.type === 'string') {
-             instance = ReactNativeComponent.createInternalComponent(element);
-           } else if (isInternalComponentType(element.type)) {
-             // This is temporarily available for custom components that are not string
-             // representations. I.e. ART. Once those are updated to use the string
-             // representation, we can drop this code path.
-             instance = new element.type(element);
-           } else {
-             instance = new ReactCompositeComponentWrapper();
+         // Since reconciling a component higher in the owner hierarchy usually (not
+         // always -- see shouldComponentUpdate()) will reconcile children, reconcile
+         // them before their children by sorting the array.
+         dirtyComponents.sort(mountOrderComparator);
+       
+         // Any updates enqueued while reconciling must be performed after this entire
+         // batch. Otherwise, if dirtyComponents is [A, B] where A has children B and
+         // C, B could update twice in a single batch if C's render enqueues an update
+         // to B (since B would have already updated, we should skip it, and the only
+         // way we can know to do so is by checking the batch counter).
+         updateBatchNumber++;
+       
+         for (var i = 0; i < len; i++) {
+           // If a component is unmounted before pending changes apply, it will still
+           // be here, but we assume that it has cleared its _pendingCallbacks and
+           // that performUpdateIfNecessary is a noop.
+           var component = dirtyComponents[i];
+       
+           // If performUpdateIfNecessary happens to enqueue any new updates, we
+           // shouldn't execute the callbacks until the next render happens, so
+           // stash the callbacks first
+           var callbacks = component._pendingCallbacks;
+           component._pendingCallbacks = null;
+       
+           var markerName;
+           if (ReactFeatureFlags.logTopLevelRenders) {
+             var namedComponent = component;
+             // Duck type TopLevelWrapper. This is probably always true.
+             if (component._currentElement.props === component._renderedComponent._currentElement) {
+               namedComponent = component._renderedComponent;
+             }
+             markerName = 'React update: ' + namedComponent.getName();
+             console.time(markerName);
+           }
+       
+           ReactReconciler.performUpdateIfNecessary(component, transaction.reconcileTransaction, updateBatchNumber);
+       
+           if (markerName) {
+             console.timeEnd(markerName);
+           }
+       
+           if (callbacks) {
+             for (var j = 0; j < callbacks.length; j++) {
+               transaction.callbackQueue.enqueue(callbacks[j], component.getPublicInstance());
+             }
            }
-         } else if (typeof node === 'string' || typeof node === 'number') {
-           instance = ReactNativeComponent.createInstanceForText(node);
-         } else {
-            true ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Encountered invalid React node of type %s', typeof node) : invariant(false) : undefined;
          }
+       }
        
-         if (process.env.NODE_ENV !== 'production') {
-           process.env.NODE_ENV !== 'production' ? warning(typeof instance.construct === 'function' && typeof instance.mountComponent === 'function' && typeof instance.receiveComponent === 'function' && typeof instance.unmountComponent === 'function', 'Only React Components can be mounted.') : undefined;
+       var flushBatchedUpdates = function () {
+         // ReactUpdatesFlushTransaction's wrappers will clear the dirtyComponents
+         // array and perform any updates enqueued by mount-ready handlers (i.e.,
+         // componentDidUpdate) but we need to check here too in order to catch
+         // updates enqueued by setState callbacks and asap calls.
+         while (dirtyComponents.length || asapEnqueued) {
+           if (dirtyComponents.length) {
+             var transaction = ReactUpdatesFlushTransaction.getPooled();
+             transaction.perform(runBatchedUpdates, null, transaction);
+             ReactUpdatesFlushTransaction.release(transaction);
+           }
+       
+           if (asapEnqueued) {
+             asapEnqueued = false;
+             var queue = asapCallbackQueue;
+             asapCallbackQueue = CallbackQueue.getPooled();
+             queue.notifyAll();
+             CallbackQueue.release(queue);
+           }
          }
+       };
        
-         // Sets up the instance. This can probably just move into the constructor now.
-         instance.construct(node);
+       /**
+        * Mark a component as needing a rerender, adding an optional callback to a
+        * list of functions which will be executed once the rerender occurs.
+        */
+       function enqueueUpdate(component) {
+         ensureInjected();
        
-         // These two fields are used by the DOM and ART diffing algorithms
-         // respectively. Instead of using expandos on components, we should be
-         // storing the state needed by the diffing algorithms elsewhere.
-         instance._mountIndex = 0;
-         instance._mountImage = null;
+         // Various parts of our code (such as ReactCompositeComponent's
+         // _renderValidatedComponent) assume that calls to render aren't nested;
+         // verify that that's the case. (This is called by each top-level update
+         // function, like setState, forceUpdate, etc.; creation and
+         // destruction of top-level components is guarded in ReactMount.)
        
-         if (process.env.NODE_ENV !== 'production') {
-           instance._isOwnerNecessary = false;
-           instance._warnedAboutRefsInRender = false;
+         if (!batchingStrategy.isBatchingUpdates) {
+           batchingStrategy.batchedUpdates(enqueueUpdate, component);
+           return;
          }
        
-         // Internal instances should fully constructed at this point, so they should
-         // not get any new fields added to them at this point.
-         if (process.env.NODE_ENV !== 'production') {
-           if (Object.preventExtensions) {
-             Object.preventExtensions(instance);
-           }
+         dirtyComponents.push(component);
+         if (component._updateBatchNumber == null) {
+           component._updateBatchNumber = updateBatchNumber + 1;
          }
+       }
        
-         return instance;
+       /**
+        * Enqueue a callback to be run at the end of the current batching cycle. Throws
+        * if no updates are currently being performed.
+        */
+       function asap(callback, context) {
+         !batchingStrategy.isBatchingUpdates ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates.asap: Can\'t enqueue an asap callback in a context whereupdates are not being batched.') : _prodInvariant('125') : void 0;
+         asapCallbackQueue.enqueue(callback, context);
+         asapEnqueued = true;
        }
        
-       module.exports = instantiateReactComponent;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
+       var ReactUpdatesInjection = {
+         injectReconcileTransaction: function (ReconcileTransaction) {
+           !ReconcileTransaction ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must provide a reconcile transaction class') : _prodInvariant('126') : void 0;
+           ReactUpdates.ReactReconcileTransaction = ReconcileTransaction;
+         },
+       
+         injectBatchingStrategy: function (_batchingStrategy) {
+           !_batchingStrategy ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must provide a batching strategy') : _prodInvariant('127') : void 0;
+           !(typeof _batchingStrategy.batchedUpdates === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must provide a batchedUpdates() function') : _prodInvariant('128') : void 0;
+           !(typeof _batchingStrategy.isBatchingUpdates === 'boolean') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must provide an isBatchingUpdates boolean attribute') : _prodInvariant('129') : void 0;
+           batchingStrategy = _batchingStrategy;
+         }
+       };
+       
+       var ReactUpdates = {
+         /**
+          * React references `ReactReconcileTransaction` using this property in order
+          * to allow dependency injection.
+          *
+          * @internal
+          */
+         ReactReconcileTransaction: null,
+       
+         batchedUpdates: batchedUpdates,
+         enqueueUpdate: enqueueUpdate,
+         flushBatchedUpdates: flushBatchedUpdates,
+         injection: ReactUpdatesInjection,
+         asap: asap
+       };
+       
+       module.exports = ReactUpdates;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
 
 /***/ },
-/* 65 */
+/* 60 */
 /***/ function(module, exports, __webpack_require__) {
 
        /* WEBPACK VAR INJECTION */(function(process) {/**
-        * Copyright 2013-2015, Facebook, Inc.
+        * Copyright 2013-present, 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.
         *
-        * @providesModule ReactCompositeComponent
+        * @providesModule CallbackQueue
         */
        
        'use strict';
        
-       var ReactComponentEnvironment = __webpack_require__(66);
-       var ReactCurrentOwner = __webpack_require__(7);
-       var ReactElement = __webpack_require__(44);
-       var ReactInstanceMap = __webpack_require__(49);
-       var ReactPerf = __webpack_require__(20);
-       var ReactPropTypeLocations = __webpack_require__(67);
-       var ReactPropTypeLocationNames = __webpack_require__(68);
-       var ReactReconciler = __webpack_require__(52);
-       var ReactUpdateQueue = __webpack_require__(55);
-       
-       var assign = __webpack_require__(41);
-       var emptyObject = __webpack_require__(60);
-       var invariant = __webpack_require__(15);
-       var shouldUpdateReactComponent = __webpack_require__(69);
-       var warning = __webpack_require__(27);
-       
-       function getDeclarationErrorAddendum(component) {
-         var owner = component._currentElement._owner || null;
-         if (owner) {
-           var name = owner.getName();
-           if (name) {
-             return ' Check the render method of `' + name + '`.';
-           }
-         }
-         return '';
-       }
+       var _prodInvariant = __webpack_require__(9),
+           _assign = __webpack_require__(6);
        
-       function StatelessComponent(Component) {}
-       StatelessComponent.prototype.render = function () {
-         var Component = ReactInstanceMap.get(this)._currentElement.type;
-         return Component(this.props, this.context, this.updater);
-       };
+       var PooledClass = __webpack_require__(8);
+       
+       var invariant = __webpack_require__(10);
        
        /**
-        * ------------------ The Life-Cycle of a Composite Component ------------------
-        *
-        * - constructor: Initialization of state. The instance is now retained.
-        *   - componentWillMount
-        *   - render
-        *   - [children's constructors]
-        *     - [children's componentWillMount and render]
-        *     - [children's componentDidMount]
-        *     - componentDidMount
-        *
-        *       Update Phases:
-        *       - componentWillReceiveProps (only called if parent updated)
-        *       - shouldComponentUpdate
-        *         - componentWillUpdate
-        *           - render
-        *           - [children's constructors or receive props phases]
-        *         - componentDidUpdate
+        * A specialized pseudo-event module to help keep track of components waiting to
+        * be notified when their DOM representations are available for use.
         *
-        *     - componentWillUnmount
-        *     - [children's componentWillUnmount]
-        *   - [children destroyed]
-        * - (destroyed): The instance is now blank, released by React and ready for GC.
+        * This implements `PooledClass`, so you should never need to instantiate this.
+        * Instead, use `CallbackQueue.getPooled()`.
         *
-        * -----------------------------------------------------------------------------
+        * @class ReactMountReady
+        * @implements PooledClass
+        * @internal
         */
+       function CallbackQueue() {
+         this._callbacks = null;
+         this._contexts = null;
+       }
        
-       /**
-        * An incrementing ID assigned to each component when it is mounted. This is
-        * used to enforce the order in which `ReactUpdates` updates dirty components.
-        *
-        * @private
-        */
-       var nextMountID = 1;
-       
-       /**
-        * @lends {ReactCompositeComponent.prototype}
-        */
-       var ReactCompositeComponentMixin = {
+       _assign(CallbackQueue.prototype, {
        
          /**
-          * Base constructor for all composite component.
+          * Enqueues a callback to be invoked when `notifyAll` is invoked.
           *
-          * @param {ReactElement} element
-          * @final
+          * @param {function} callback Invoked when `notifyAll` is invoked.
+          * @param {?object} context Context to call `callback` with.
           * @internal
           */
-         construct: function (element) {
-           this._currentElement = element;
-           this._rootNodeID = null;
-           this._instance = null;
-       
-           // See ReactUpdateQueue
-           this._pendingElement = null;
-           this._pendingStateQueue = null;
-           this._pendingReplaceState = false;
-           this._pendingForceUpdate = false;
-       
-           this._renderedComponent = null;
-       
-           this._context = null;
-           this._mountOrder = 0;
-           this._topLevelWrapper = null;
-       
-           // See ReactUpdates and ReactUpdateQueue.
-           this._pendingCallbacks = null;
+         enqueue: function (callback, context) {
+           this._callbacks = this._callbacks || [];
+           this._contexts = this._contexts || [];
+           this._callbacks.push(callback);
+           this._contexts.push(context);
          },
        
          /**
-          * Initializes the component, renders markup, and registers event listeners.
+          * Invokes all enqueued callbacks and clears the queue. This is invoked after
+          * the DOM representation of a component has been created or updated.
           *
-          * @param {string} rootID DOM ID of the root node.
-          * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction
-          * @return {?string} Rendered markup to be inserted into the DOM.
-          * @final
           * @internal
           */
-         mountComponent: function (rootID, transaction, context) {
-           this._context = context;
-           this._mountOrder = nextMountID++;
-           this._rootNodeID = rootID;
-       
-           var publicProps = this._processProps(this._currentElement.props);
-           var publicContext = this._processContext(context);
-       
-           var Component = this._currentElement.type;
-       
-           // Initialize the public class
-           var inst;
-           var renderedElement;
-       
-           // This is a way to detect if Component is a stateless arrow function
-           // component, which is not newable. It might not be 100% reliable but is
-           // something we can do until we start detecting that Component extends
-           // React.Component. We already assume that typeof Component === 'function'.
-           var canInstantiate = ('prototype' in Component);
-       
-           if (canInstantiate) {
-             if (process.env.NODE_ENV !== 'production') {
-               ReactCurrentOwner.current = this;
-               try {
-                 inst = new Component(publicProps, publicContext, ReactUpdateQueue);
-               } finally {
-                 ReactCurrentOwner.current = null;
-               }
-             } else {
-               inst = new Component(publicProps, publicContext, ReactUpdateQueue);
+         notifyAll: function () {
+           var callbacks = this._callbacks;
+           var contexts = this._contexts;
+           if (callbacks) {
+             !(callbacks.length === contexts.length) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Mismatched list of contexts in callback queue') : _prodInvariant('24') : void 0;
+             this._callbacks = null;
+             this._contexts = null;
+             for (var i = 0; i < callbacks.length; i++) {
+               callbacks[i].call(contexts[i]);
              }
+             callbacks.length = 0;
+             contexts.length = 0;
            }
+         },
        
-           if (!canInstantiate || inst === null || inst === false || ReactElement.isValidElement(inst)) {
-             renderedElement = inst;
-             inst = new StatelessComponent(Component);
-           }
+         checkpoint: function () {
+           return this._callbacks ? this._callbacks.length : 0;
+         },
        
-           if (process.env.NODE_ENV !== 'production') {
-             // This will throw later in _renderValidatedComponent, but add an early
-             // warning now to help debugging
-             if (inst.render == null) {
-               process.env.NODE_ENV !== 'production' ? warning(false, '%s(...): No `render` method found on the returned component ' + 'instance: you may have forgotten to define `render`, returned ' + 'null/false from a stateless component, or tried to render an ' + 'element whose type is a function that isn\'t a React component.', Component.displayName || Component.name || 'Component') : undefined;
-             } else {
-               // We support ES6 inheriting from React.Component, the module pattern,
-               // and stateless components, but not ES6 classes that don't extend
-               process.env.NODE_ENV !== 'production' ? warning(Component.prototype && Component.prototype.isReactComponent || !canInstantiate || !(inst instanceof Component), '%s(...): React component classes must extend React.Component.', Component.displayName || Component.name || 'Component') : undefined;
-             }
+         rollback: function (len) {
+           if (this._callbacks) {
+             this._callbacks.length = len;
+             this._contexts.length = len;
            }
+         },
        
-           // These should be set up in the constructor, but as a convenience for
-           // simpler class abstractions, we set them up after the fact.
-           inst.props = publicProps;
-           inst.context = publicContext;
-           inst.refs = emptyObject;
-           inst.updater = ReactUpdateQueue;
+         /**
+          * Resets the internal queue.
+          *
+          * @internal
+          */
+         reset: function () {
+           this._callbacks = null;
+           this._contexts = null;
+         },
        
-           this._instance = inst;
+         /**
+          * `PooledClass` looks for this.
+          */
+         destructor: function () {
+           this.reset();
+         }
        
-           // Store a reference from the instance back to the internal representation
-           ReactInstanceMap.set(inst, this);
+       });
        
-           if (process.env.NODE_ENV !== 'production') {
-             // Since plain JS classes are defined without any special initialization
-             // logic, we can not catch common errors early. Therefore, we have to
-             // catch them here, at initialization time, instead.
-             process.env.NODE_ENV !== 'production' ? warning(!inst.getInitialState || inst.getInitialState.isReactClassApproved, 'getInitialState was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Did you mean to define a state property instead?', this.getName() || 'a component') : undefined;
-             process.env.NODE_ENV !== 'production' ? warning(!inst.getDefaultProps || inst.getDefaultProps.isReactClassApproved, 'getDefaultProps was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Use a static property to define defaultProps instead.', this.getName() || 'a component') : undefined;
-             process.env.NODE_ENV !== 'production' ? warning(!inst.propTypes, 'propTypes was defined as an instance property on %s. Use a static ' + 'property to define propTypes instead.', this.getName() || 'a component') : undefined;
-             process.env.NODE_ENV !== 'production' ? warning(!inst.contextTypes, 'contextTypes was defined as an instance property on %s. Use a ' + 'static property to define contextTypes instead.', this.getName() || 'a component') : undefined;
-             process.env.NODE_ENV !== 'production' ? warning(typeof inst.componentShouldUpdate !== 'function', '%s has a method called ' + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 'The name is phrased as a question because the function is ' + 'expected to return a value.', this.getName() || 'A component') : undefined;
-             process.env.NODE_ENV !== 'production' ? warning(typeof inst.componentDidUnmount !== 'function', '%s has a method called ' + 'componentDidUnmount(). But there is no such lifecycle method. ' + 'Did you mean componentWillUnmount()?', this.getName() || 'A component') : undefined;
-             process.env.NODE_ENV !== 'production' ? warning(typeof inst.componentWillRecieveProps !== 'function', '%s has a method called ' + 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?', this.getName() || 'A component') : undefined;
-           }
+       PooledClass.addPoolingTo(CallbackQueue);
        
-           var initialState = inst.state;
-           if (initialState === undefined) {
-             inst.state = initialState = null;
-           }
-           !(typeof initialState === 'object' && !Array.isArray(initialState)) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.state: must be set to an object or null', this.getName() || 'ReactCompositeComponent') : invariant(false) : undefined;
+       module.exports = CallbackQueue;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
+
+/***/ },
+/* 61 */
+/***/ function(module, exports) {
+
+       /**
+        * Copyright 2013-present, 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.
+        *
+        * @providesModule ReactFeatureFlags
+        * 
+        */
        
-           this._pendingStateQueue = null;
-           this._pendingReplaceState = false;
-           this._pendingForceUpdate = false;
+       'use strict';
        
-           if (inst.componentWillMount) {
-             inst.componentWillMount();
-             // When mounting, calls to `setState` by `componentWillMount` will set
-             // `this._pendingStateQueue` without triggering a re-render.
-             if (this._pendingStateQueue) {
-               inst.state = this._processPendingState(inst.props, inst.context);
-             }
-           }
+       var ReactFeatureFlags = {
+         // When true, call console.time() before and .timeEnd() after each top-level
+         // render (both initial renders and updates). Useful when looking at prod-mode
+         // timeline profiles in Chrome, for example.
+         logTopLevelRenders: false
+       };
        
-           // If not a stateless component, we now render
-           if (renderedElement === undefined) {
-             renderedElement = this._renderValidatedComponent();
-           }
+       module.exports = ReactFeatureFlags;
+
+/***/ },
+/* 62 */
+/***/ function(module, exports, __webpack_require__) {
+
+       /* WEBPACK VAR INJECTION */(function(process) {/**
+        * Copyright 2013-present, 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.
+        *
+        * @providesModule ReactReconciler
+        */
        
-           this._renderedComponent = this._instantiateReactComponent(renderedElement);
+       'use strict';
        
-           var markup = ReactReconciler.mountComponent(this._renderedComponent, rootID, transaction, this._processChildContext(context));
-           if (inst.componentDidMount) {
-             transaction.getReactMountReady().enqueue(inst.componentDidMount, inst);
-           }
+       var ReactRef = __webpack_require__(63);
+       var ReactInstrumentation = __webpack_require__(65);
        
-           return markup;
-         },
+       var warning = __webpack_require__(13);
+       
+       /**
+        * Helper to call ReactRef.attachRefs with this composite component, split out
+        * to avoid allocations in the transaction mount-ready queue.
+        */
+       function attachRefs() {
+         ReactRef.attachRefs(this, this._currentElement);
+       }
+       
+       var ReactReconciler = {
        
          /**
-          * Releases any resources allocated by `mountComponent`.
+          * Initializes the component, renders markup, and registers event listeners.
           *
+          * @param {ReactComponent} internalInstance
+          * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction
+          * @param {?object} the containing host component instance
+          * @param {?object} info about the host container
+          * @return {?string} Rendered markup to be inserted into the DOM.
           * @final
           * @internal
           */
-         unmountComponent: function () {
-           var inst = this._instance;
-       
-           if (inst.componentWillUnmount) {
-             inst.componentWillUnmount();
+         mountComponent: function (internalInstance, transaction, hostParent, hostContainerInfo, context) {
+           if (process.env.NODE_ENV !== 'production') {
+             if (internalInstance._debugID !== 0) {
+               ReactInstrumentation.debugTool.onBeforeMountComponent(internalInstance._debugID, internalInstance._currentElement);
+               ReactInstrumentation.debugTool.onBeginReconcilerTimer(internalInstance._debugID, 'mountComponent');
+             }
            }
-       
-           ReactReconciler.unmountComponent(this._renderedComponent);
-           this._renderedComponent = null;
-           this._instance = null;
-       
-           // Reset pending fields
-           // Even if this component is scheduled for another update in ReactUpdates,
-           // it would still be ignored because these fields are reset.
-           this._pendingStateQueue = null;
-           this._pendingReplaceState = false;
-           this._pendingForceUpdate = false;
-           this._pendingCallbacks = null;
-           this._pendingElement = null;
-       
-           // These fields do not really need to be reset since this object is no
-           // longer accessible.
-           this._context = null;
-           this._rootNodeID = null;
-           this._topLevelWrapper = null;
-       
-           // Delete the reference from the instance to this internal representation
-           // which allow the internals to be properly cleaned up even if the user
-           // leaks a reference to the public instance.
-           ReactInstanceMap.remove(inst);
-       
-           // Some existing components rely on inst.props even after they've been
-           // destroyed (in event handlers).
-           // TODO: inst.props = null;
-           // TODO: inst.state = null;
-           // TODO: inst.context = null;
+           var markup = internalInstance.mountComponent(transaction, hostParent, hostContainerInfo, context);
+           if (internalInstance._currentElement && internalInstance._currentElement.ref != null) {
+             transaction.getReactMountReady().enqueue(attachRefs, internalInstance);
+           }
+           if (process.env.NODE_ENV !== 'production') {
+             if (internalInstance._debugID !== 0) {
+               ReactInstrumentation.debugTool.onEndReconcilerTimer(internalInstance._debugID, 'mountComponent');
+               ReactInstrumentation.debugTool.onMountComponent(internalInstance._debugID);
+             }
+           }
+           return markup;
          },
        
          /**
-          * Filters the context object to only contain keys specified in
-          * `contextTypes`
-          *
-          * @param {object} context
-          * @return {?object}
-          * @private
+          * Returns a value that can be passed to
+          * ReactComponentEnvironment.replaceNodeWithMarkup.
           */
-         _maskContext: function (context) {
-           var maskedContext = null;
-           var Component = this._currentElement.type;
-           var contextTypes = Component.contextTypes;
-           if (!contextTypes) {
-             return emptyObject;
-           }
-           maskedContext = {};
-           for (var contextName in contextTypes) {
-             maskedContext[contextName] = context[contextName];
-           }
-           return maskedContext;
+         getHostNode: function (internalInstance) {
+           return internalInstance.getHostNode();
          },
        
          /**
-          * Filters the context object to only contain keys specified in
-          * `contextTypes`, and asserts that they are valid.
+          * Releases any resources allocated by `mountComponent`.
           *
-          * @param {object} context
-          * @return {?object}
-          * @private
+          * @final
+          * @internal
           */
-         _processContext: function (context) {
-           var maskedContext = this._maskContext(context);
+         unmountComponent: function (internalInstance, safely) {
            if (process.env.NODE_ENV !== 'production') {
-             var Component = this._currentElement.type;
-             if (Component.contextTypes) {
-               this._checkPropTypes(Component.contextTypes, maskedContext, ReactPropTypeLocations.context);
+             if (internalInstance._debugID !== 0) {
+               ReactInstrumentation.debugTool.onBeginReconcilerTimer(internalInstance._debugID, 'unmountComponent');
+             }
+           }
+           ReactRef.detachRefs(internalInstance, internalInstance._currentElement);
+           internalInstance.unmountComponent(safely);
+           if (process.env.NODE_ENV !== 'production') {
+             if (internalInstance._debugID !== 0) {
+               ReactInstrumentation.debugTool.onEndReconcilerTimer(internalInstance._debugID, 'unmountComponent');
+               ReactInstrumentation.debugTool.onUnmountComponent(internalInstance._debugID);
              }
            }
-           return maskedContext;
          },
        
          /**
-          * @param {object} currentContext
-          * @return {object}
-          * @private
-          */
-         _processChildContext: function (currentContext) {
-           var Component = this._currentElement.type;
-           var inst = this._instance;
-           var childContext = inst.getChildContext && inst.getChildContext();
-           if (childContext) {
-             !(typeof Component.childContextTypes === 'object') ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.getChildContext(): childContextTypes must be defined in order to ' + 'use getChildContext().', this.getName() || 'ReactCompositeComponent') : invariant(false) : undefined;
-             if (process.env.NODE_ENV !== 'production') {
-               this._checkPropTypes(Component.childContextTypes, childContext, ReactPropTypeLocations.childContext);
-             }
-             for (var name in childContext) {
-               !(name in Component.childContextTypes) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.getChildContext(): key "%s" is not defined in childContextTypes.', this.getName() || 'ReactCompositeComponent', name) : invariant(false) : undefined;
-             }
-             return assign({}, currentContext, childContext);
-           }
-           return currentContext;
-         },
-       
-         /**
-          * Processes props by setting default values for unspecified props and
-          * asserting that the props are valid. Does not mutate its argument; returns
-          * a new props object with defaults merged in.
+          * Update a component using a new element.
           *
-          * @param {object} newProps
-          * @return {object}
-          * @private
+          * @param {ReactComponent} internalInstance
+          * @param {ReactElement} nextElement
+          * @param {ReactReconcileTransaction} transaction
+          * @param {object} context
+          * @internal
           */
-         _processProps: function (newProps) {
-           if (process.env.NODE_ENV !== 'production') {
-             var Component = this._currentElement.type;
-             if (Component.propTypes) {
-               this._checkPropTypes(Component.propTypes, newProps, ReactPropTypeLocations.prop);
-             }
+         receiveComponent: function (internalInstance, nextElement, transaction, context) {
+           var prevElement = internalInstance._currentElement;
+       
+           if (nextElement === prevElement && context === internalInstance._context) {
+             // Since elements are immutable after the owner is rendered,
+             // we can do a cheap identity compare here to determine if this is a
+             // superfluous reconcile. It's possible for state to be mutable but such
+             // change should trigger an update of the owner which would recreate
+             // the element. We explicitly check for the existence of an owner since
+             // it's possible for an element created outside a composite to be
+             // deeply mutated and reused.
+       
+             // TODO: Bailing out early is just a perf optimization right?
+             // TODO: Removing the return statement should affect correctness?
+             return;
            }
-           return newProps;
-         },
        
-         /**
-          * Assert that the props are valid
-          *
-          * @param {object} propTypes Map of prop name to a ReactPropType
-          * @param {object} props
-          * @param {string} location e.g. "prop", "context", "child context"
-          * @private
-          */
-         _checkPropTypes: function (propTypes, props, location) {
-           // TODO: Stop validating prop types here and only use the element
-           // validation.
-           var componentName = this.getName();
-           for (var propName in propTypes) {
-             if (propTypes.hasOwnProperty(propName)) {
-               var error;
-               try {
-                 // This is intentionally an invariant that gets caught. It's the same
-                 // behavior as without this statement except with a better message.
-                 !(typeof propTypes[propName] === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s: %s type `%s` is invalid; it must be a function, usually ' + 'from React.PropTypes.', componentName || 'React class', ReactPropTypeLocationNames[location], propName) : invariant(false) : undefined;
-                 error = propTypes[propName](props, propName, componentName, location);
-               } catch (ex) {
-                 error = ex;
-               }
-               if (error instanceof Error) {
-                 // We may want to extend this logic for similar errors in
-                 // top-level render calls, so I'm abstracting it away into
-                 // a function to minimize refactoring in the future
-                 var addendum = getDeclarationErrorAddendum(this);
-       
-                 if (location === ReactPropTypeLocations.prop) {
-                   // Preface gives us something to blacklist in warning module
-                   process.env.NODE_ENV !== 'production' ? warning(false, 'Failed Composite propType: %s%s', error.message, addendum) : undefined;
-                 } else {
-                   process.env.NODE_ENV !== 'production' ? warning(false, 'Failed Context Types: %s%s', error.message, addendum) : undefined;
-                 }
-               }
+           if (process.env.NODE_ENV !== 'production') {
+             if (internalInstance._debugID !== 0) {
+               ReactInstrumentation.debugTool.onBeforeUpdateComponent(internalInstance._debugID, nextElement);
+               ReactInstrumentation.debugTool.onBeginReconcilerTimer(internalInstance._debugID, 'receiveComponent');
              }
            }
-         },
        
-         receiveComponent: function (nextElement, transaction, nextContext) {
-           var prevElement = this._currentElement;
-           var prevContext = this._context;
+           var refsChanged = ReactRef.shouldUpdateRefs(prevElement, nextElement);
        
-           this._pendingElement = null;
+           if (refsChanged) {
+             ReactRef.detachRefs(internalInstance, prevElement);
+           }
        
-           this.updateComponent(transaction, prevElement, nextElement, prevContext, nextContext);
-         },
+           internalInstance.receiveComponent(nextElement, transaction, context);
        
-         /**
-          * If any of `_pendingElement`, `_pendingStateQueue`, or `_pendingForceUpdate`
-          * is set, update the component.
-          *
-          * @param {ReactReconcileTransaction} transaction
-          * @internal
-          */
-         performUpdateIfNecessary: function (transaction) {
-           if (this._pendingElement != null) {
-             ReactReconciler.receiveComponent(this, this._pendingElement || this._currentElement, transaction, this._context);
+           if (refsChanged && internalInstance._currentElement && internalInstance._currentElement.ref != null) {
+             transaction.getReactMountReady().enqueue(attachRefs, internalInstance);
            }
        
-           if (this._pendingStateQueue !== null || this._pendingForceUpdate) {
-             this.updateComponent(transaction, this._currentElement, this._currentElement, this._context, this._context);
+           if (process.env.NODE_ENV !== 'production') {
+             if (internalInstance._debugID !== 0) {
+               ReactInstrumentation.debugTool.onEndReconcilerTimer(internalInstance._debugID, 'receiveComponent');
+               ReactInstrumentation.debugTool.onUpdateComponent(internalInstance._debugID);
+             }
            }
          },
        
          /**
-          * Perform an update to a mounted component. The componentWillReceiveProps and
-          * shouldComponentUpdate methods are called, then (assuming the update isn't
-          * skipped) the remaining update lifecycle methods are called and the DOM
-          * representation is updated.
-          *
-          * By default, this implements React's rendering and reconciliation algorithm.
-          * Sophisticated clients may wish to override this.
+          * Flush any dirty changes in a component.
           *
+          * @param {ReactComponent} internalInstance
           * @param {ReactReconcileTransaction} transaction
-          * @param {ReactElement} prevParentElement
-          * @param {ReactElement} nextParentElement
           * @internal
-          * @overridable
           */
-         updateComponent: function (transaction, prevParentElement, nextParentElement, prevUnmaskedContext, nextUnmaskedContext) {
-           var inst = this._instance;
-       
-           var nextContext = this._context === nextUnmaskedContext ? inst.context : this._processContext(nextUnmaskedContext);
-           var nextProps;
-       
-           // Distinguish between a props update versus a simple state update
-           if (prevParentElement === nextParentElement) {
-             // Skip checking prop types again -- we don't read inst.props to avoid
-             // warning for DOM component props in this upgrade
-             nextProps = nextParentElement.props;
-           } else {
-             nextProps = this._processProps(nextParentElement.props);
-             // An update here will schedule an update but immediately set
-             // _pendingStateQueue which will ensure that any state updates gets
-             // immediately reconciled instead of waiting for the next batch.
-       
-             if (inst.componentWillReceiveProps) {
-               inst.componentWillReceiveProps(nextProps, nextContext);
-             }
+         performUpdateIfNecessary: function (internalInstance, transaction, updateBatchNumber) {
+           if (internalInstance._updateBatchNumber !== updateBatchNumber) {
+             // The component's enqueued batch number should always be the current
+             // batch or the following one.
+             process.env.NODE_ENV !== 'production' ? warning(internalInstance._updateBatchNumber == null || internalInstance._updateBatchNumber === updateBatchNumber + 1, 'performUpdateIfNecessary: Unexpected batch number (current %s, ' + 'pending %s)', updateBatchNumber, internalInstance._updateBatchNumber) : void 0;
+             return;
            }
-       
-           var nextState = this._processPendingState(nextProps, nextContext);
-       
-           var shouldUpdate = this._pendingForceUpdate || !inst.shouldComponentUpdate || inst.shouldComponentUpdate(nextProps, nextState, nextContext);
-       
            if (process.env.NODE_ENV !== 'production') {
-             process.env.NODE_ENV !== 'production' ? warning(typeof shouldUpdate !== 'undefined', '%s.shouldComponentUpdate(): Returned undefined instead of a ' + 'boolean value. Make sure to return true or false.', this.getName() || 'ReactCompositeComponent') : undefined;
+             if (internalInstance._debugID !== 0) {
+               ReactInstrumentation.debugTool.onBeginReconcilerTimer(internalInstance._debugID, 'performUpdateIfNecessary');
+               ReactInstrumentation.debugTool.onBeforeUpdateComponent(internalInstance._debugID, internalInstance._currentElement);
+             }
            }
-       
-           if (shouldUpdate) {
-             this._pendingForceUpdate = false;
-             // Will set `this.props`, `this.state` and `this.context`.
-             this._performComponentUpdate(nextParentElement, nextProps, nextState, nextContext, transaction, nextUnmaskedContext);
-           } else {
-             // If it's determined that a component should not update, we still want
-             // to set props and state but we shortcut the rest of the update.
-             this._currentElement = nextParentElement;
-             this._context = nextUnmaskedContext;
-             inst.props = nextProps;
-             inst.state = nextState;
-             inst.context = nextContext;
+           internalInstance.performUpdateIfNecessary(transaction);
+           if (process.env.NODE_ENV !== 'production') {
+             if (internalInstance._debugID !== 0) {
+               ReactInstrumentation.debugTool.onEndReconcilerTimer(internalInstance._debugID, 'performUpdateIfNecessary');
+               ReactInstrumentation.debugTool.onUpdateComponent(internalInstance._debugID);
+             }
            }
-         },
-       
-         _processPendingState: function (props, context) {
-           var inst = this._instance;
-           var queue = this._pendingStateQueue;
-           var replace = this._pendingReplaceState;
-           this._pendingReplaceState = false;
-           this._pendingStateQueue = null;
+         }
        
-           if (!queue) {
-             return inst.state;
-           }
+       };
        
-           if (replace && queue.length === 1) {
-             return queue[0];
-           }
+       module.exports = ReactReconciler;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
+
+/***/ },
+/* 63 */
+/***/ function(module, exports, __webpack_require__) {
+
+       /**
+        * Copyright 2013-present, 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.
+        *
+        * @providesModule ReactRef
+        */
        
-           var nextState = assign({}, replace ? queue[0] : inst.state);
-           for (var i = replace ? 1 : 0; i < queue.length; i++) {
-             var partial = queue[i];
-             assign(nextState, typeof partial === 'function' ? partial.call(inst, nextState, props, context) : partial);
-           }
+       'use strict';
        
-           return nextState;
-         },
+       var ReactOwner = __webpack_require__(64);
        
-         /**
-          * Merges new props and state, notifies delegate methods of update and
-          * performs update.
-          *
-          * @param {ReactElement} nextElement Next element
-          * @param {object} nextProps Next public object to set as properties.
-          * @param {?object} nextState Next object to set as state.
-          * @param {?object} nextContext Next public object to set as context.
-          * @param {ReactReconcileTransaction} transaction
-          * @param {?object} unmaskedContext
-          * @private
-          */
-         _performComponentUpdate: function (nextElement, nextProps, nextState, nextContext, transaction, unmaskedContext) {
-           var inst = this._instance;
+       var ReactRef = {};
        
-           var hasComponentDidUpdate = Boolean(inst.componentDidUpdate);
-           var prevProps;
-           var prevState;
-           var prevContext;
-           if (hasComponentDidUpdate) {
-             prevProps = inst.props;
-             prevState = inst.state;
-             prevContext = inst.context;
-           }
+       function attachRef(ref, component, owner) {
+         if (typeof ref === 'function') {
+           ref(component.getPublicInstance());
+         } else {
+           // Legacy ref
+           ReactOwner.addComponentAsRefTo(component, ref, owner);
+         }
+       }
        
-           if (inst.componentWillUpdate) {
-             inst.componentWillUpdate(nextProps, nextState, nextContext);
-           }
+       function detachRef(ref, component, owner) {
+         if (typeof ref === 'function') {
+           ref(null);
+         } else {
+           // Legacy ref
+           ReactOwner.removeComponentAsRefFrom(component, ref, owner);
+         }
+       }
        
-           this._currentElement = nextElement;
-           this._context = unmaskedContext;
-           inst.props = nextProps;
-           inst.state = nextState;
-           inst.context = nextContext;
+       ReactRef.attachRefs = function (instance, element) {
+         if (element === null || element === false) {
+           return;
+         }
+         var ref = element.ref;
+         if (ref != null) {
+           attachRef(ref, instance, element._owner);
+         }
+       };
        
-           this._updateRenderedComponent(transaction, unmaskedContext);
+       ReactRef.shouldUpdateRefs = function (prevElement, nextElement) {
+         // If either the owner or a `ref` has changed, make sure the newest owner
+         // has stored a reference to `this`, and the previous owner (if different)
+         // has forgotten the reference to `this`. We use the element instead
+         // of the public this.props because the post processing cannot determine
+         // a ref. The ref conceptually lives on the element.
        
-           if (hasComponentDidUpdate) {
-             transaction.getReactMountReady().enqueue(inst.componentDidUpdate.bind(inst, prevProps, prevState, prevContext), inst);
-           }
-         },
+         // TODO: Should this even be possible? The owner cannot change because
+         // it's forbidden by shouldUpdateReactComponent. The ref can change
+         // if you swap the keys of but not the refs. Reconsider where this check
+         // is made. It probably belongs where the key checking and
+         // instantiateReactComponent is done.
        
-         /**
-          * Call the component's `render` method and update the DOM accordingly.
-          *
-          * @param {ReactReconcileTransaction} transaction
-          * @internal
-          */
-         _updateRenderedComponent: function (transaction, context) {
-           var prevComponentInstance = this._renderedComponent;
-           var prevRenderedElement = prevComponentInstance._currentElement;
-           var nextRenderedElement = this._renderValidatedComponent();
-           if (shouldUpdateReactComponent(prevRenderedElement, nextRenderedElement)) {
-             ReactReconciler.receiveComponent(prevComponentInstance, nextRenderedElement, transaction, this._processChildContext(context));
-           } else {
-             // These two IDs are actually the same! But nothing should rely on that.
-             var thisID = this._rootNodeID;
-             var prevComponentID = prevComponentInstance._rootNodeID;
-             ReactReconciler.unmountComponent(prevComponentInstance);
+         var prevEmpty = prevElement === null || prevElement === false;
+         var nextEmpty = nextElement === null || nextElement === false;
        
-             this._renderedComponent = this._instantiateReactComponent(nextRenderedElement);
-             var nextMarkup = ReactReconciler.mountComponent(this._renderedComponent, thisID, transaction, this._processChildContext(context));
-             this._replaceNodeWithMarkupByID(prevComponentID, nextMarkup);
-           }
-         },
-       
-         /**
-          * @protected
-          */
-         _replaceNodeWithMarkupByID: function (prevComponentID, nextMarkup) {
-           ReactComponentEnvironment.replaceNodeWithMarkupByID(prevComponentID, nextMarkup);
-         },
-       
-         /**
-          * @protected
-          */
-         _renderValidatedComponentWithoutOwnerOrContext: function () {
-           var inst = this._instance;
-           var renderedComponent = inst.render();
-           if (process.env.NODE_ENV !== 'production') {
-             // We allow auto-mocks to proceed as if they're returning null.
-             if (typeof renderedComponent === 'undefined' && inst.render._isMockFunction) {
-               // This is probably bad practice. Consider warning here and
-               // deprecating this convenience.
-               renderedComponent = null;
-             }
-           }
-       
-           return renderedComponent;
-         },
-       
-         /**
-          * @private
-          */
-         _renderValidatedComponent: function () {
-           var renderedComponent;
-           ReactCurrentOwner.current = this;
-           try {
-             renderedComponent = this._renderValidatedComponentWithoutOwnerOrContext();
-           } finally {
-             ReactCurrentOwner.current = null;
-           }
-           !(
-           // TODO: An `isValidNode` function would probably be more appropriate
-           renderedComponent === null || renderedComponent === false || ReactElement.isValidElement(renderedComponent)) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.render(): A valid ReactComponent must be returned. You may have ' + 'returned undefined, an array or some other invalid object.', this.getName() || 'ReactCompositeComponent') : invariant(false) : undefined;
-           return renderedComponent;
-         },
-       
-         /**
-          * Lazily allocates the refs object and stores `component` as `ref`.
-          *
-          * @param {string} ref Reference name.
-          * @param {component} component Component to store as `ref`.
-          * @final
-          * @private
-          */
-         attachRef: function (ref, component) {
-           var inst = this.getPublicInstance();
-           !(inst != null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Stateless function components cannot have refs.') : invariant(false) : undefined;
-           var publicComponentInstance = component.getPublicInstance();
-           if (process.env.NODE_ENV !== 'production') {
-             var componentName = component && component.getName ? component.getName() : 'a component';
-             process.env.NODE_ENV !== 'production' ? warning(publicComponentInstance != null, 'Stateless function components cannot be given refs ' + '(See ref "%s" in %s created by %s). ' + 'Attempts to access this ref will fail.', ref, componentName, this.getName()) : undefined;
-           }
-           var refs = inst.refs === emptyObject ? inst.refs = {} : inst.refs;
-           refs[ref] = publicComponentInstance;
-         },
-       
-         /**
-          * Detaches a reference name.
-          *
-          * @param {string} ref Name to dereference.
-          * @final
-          * @private
-          */
-         detachRef: function (ref) {
-           var refs = this.getPublicInstance().refs;
-           delete refs[ref];
-         },
-       
-         /**
-          * Get a text description of the component that can be used to identify it
-          * in error messages.
-          * @return {string} The name or null.
-          * @internal
-          */
-         getName: function () {
-           var type = this._currentElement.type;
-           var constructor = this._instance && this._instance.constructor;
-           return type.displayName || constructor && constructor.displayName || type.name || constructor && constructor.name || null;
-         },
-       
-         /**
-          * Get the publicly accessible representation of this component - i.e. what
-          * is exposed by refs and returned by render. Can be null for stateless
-          * components.
-          *
-          * @return {ReactComponent} the public component instance.
-          * @internal
-          */
-         getPublicInstance: function () {
-           var inst = this._instance;
-           if (inst instanceof StatelessComponent) {
-             return null;
-           }
-           return inst;
-         },
-       
-         // Stub
-         _instantiateReactComponent: null
-       
-       };
-       
-       ReactPerf.measureMethods(ReactCompositeComponentMixin, 'ReactCompositeComponent', {
-         mountComponent: 'mountComponent',
-         updateComponent: 'updateComponent',
-         _renderValidatedComponent: '_renderValidatedComponent'
-       });
-       
-       var ReactCompositeComponent = {
-       
-         Mixin: ReactCompositeComponentMixin
+         return(
+           // This has a few false positives w/r/t empty components.
+           prevEmpty || nextEmpty || nextElement.ref !== prevElement.ref ||
+           // If owner changes but we have an unchanged function ref, don't update refs
+           typeof nextElement.ref === 'string' && nextElement._owner !== prevElement._owner
+         );
+       };
        
+       ReactRef.detachRefs = function (instance, element) {
+         if (element === null || element === false) {
+           return;
+         }
+         var ref = element.ref;
+         if (ref != null) {
+           detachRef(ref, instance, element._owner);
+         }
        };
        
-       module.exports = ReactCompositeComponent;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
+       module.exports = ReactRef;
 
 /***/ },
-/* 66 */
+/* 64 */
 /***/ function(module, exports, __webpack_require__) {
 
        /* WEBPACK VAR INJECTION */(function(process) {/**
-        * Copyright 2014-2015, Facebook, Inc.
+        * Copyright 2013-present, 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.
         *
-        * @providesModule ReactComponentEnvironment
+        * @providesModule ReactOwner
         */
        
        'use strict';
        
-       var invariant = __webpack_require__(15);
+       var _prodInvariant = __webpack_require__(9);
        
-       var injected = false;
+       var invariant = __webpack_require__(10);
        
-       var ReactComponentEnvironment = {
+       /**
+        * ReactOwners are capable of storing references to owned components.
+        *
+        * All components are capable of //being// referenced by owner components, but
+        * only ReactOwner components are capable of //referencing// owned components.
+        * The named reference is known as a "ref".
+        *
+        * Refs are available when mounted and updated during reconciliation.
+        *
+        *   var MyComponent = React.createClass({
+        *     render: function() {
+        *       return (
+        *         <div onClick={this.handleClick}>
+        *           <CustomComponent ref="custom" />
+        *         </div>
+        *       );
+        *     },
+        *     handleClick: function() {
+        *       this.refs.custom.handleClick();
+        *     },
+        *     componentDidMount: function() {
+        *       this.refs.custom.initialize();
+        *     }
+        *   });
+        *
+        * Refs should rarely be used. When refs are used, they should only be done to
+        * control data that is not handled by React's data flow.
+        *
+        * @class ReactOwner
+        */
+       var ReactOwner = {
        
          /**
-          * Optionally injectable environment dependent cleanup hook. (server vs.
-          * browser etc). Example: A browser system caches DOM nodes based on component
-          * ID and must remove that cache entry when this instance is unmounted.
+          * @param {?object} object
+          * @return {boolean} True if `object` is a valid owner.
+          * @final
           */
-         unmountIDFromEnvironment: null,
+         isValidOwner: function (object) {
+           return !!(object && typeof object.attachRef === 'function' && typeof object.detachRef === 'function');
+         },
        
          /**
-          * Optionally injectable hook for swapping out mount images in the middle of
-          * the tree.
+          * Adds a component by ref to an owner component.
+          *
+          * @param {ReactComponent} component Component to reference.
+          * @param {string} ref Name by which to refer to the component.
+          * @param {ReactOwner} owner Component on which to record the ref.
+          * @final
+          * @internal
           */
-         replaceNodeWithMarkupByID: null,
+         addComponentAsRefTo: function (component, ref, owner) {
+           !ReactOwner.isValidOwner(owner) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'addComponentAsRefTo(...): Only a ReactOwner can have refs. You might be adding a ref to a component that was not created inside a component\'s `render` method, or you have multiple copies of React loaded (details: https://fb.me/react-refs-must-have-owner).') : _prodInvariant('119') : void 0;
+           owner.attachRef(ref, component);
+         },
        
          /**
-          * Optionally injectable hook for processing a queue of child updates. Will
-          * later move into MultiChildComponents.
+          * Removes a component by ref from an owner component.
+          *
+          * @param {ReactComponent} component Component to dereference.
+          * @param {string} ref Name of the ref to remove.
+          * @param {ReactOwner} owner Component on which the ref is recorded.
+          * @final
+          * @internal
           */
-         processChildrenUpdates: null,
-       
-         injection: {
-           injectEnvironment: function (environment) {
-             !!injected ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactCompositeComponent: injectEnvironment() can only be called once.') : invariant(false) : undefined;
-             ReactComponentEnvironment.unmountIDFromEnvironment = environment.unmountIDFromEnvironment;
-             ReactComponentEnvironment.replaceNodeWithMarkupByID = environment.replaceNodeWithMarkupByID;
-             ReactComponentEnvironment.processChildrenUpdates = environment.processChildrenUpdates;
-             injected = true;
+         removeComponentAsRefFrom: function (component, ref, owner) {
+           !ReactOwner.isValidOwner(owner) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'removeComponentAsRefFrom(...): Only a ReactOwner can have refs. You might be removing a ref to a component that was not created inside a component\'s `render` method, or you have multiple copies of React loaded (details: https://fb.me/react-refs-must-have-owner).') : _prodInvariant('120') : void 0;
+           var ownerPublicInstance = owner.getPublicInstance();
+           // Check that `component`'s owner is still alive and that `component` is still the current ref
+           // because we do not want to detach the ref if another component stole it.
+           if (ownerPublicInstance && ownerPublicInstance.refs[ref] === component.getPublicInstance()) {
+             owner.detachRef(ref);
            }
          }
        
        };
        
-       module.exports = ReactComponentEnvironment;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
+       module.exports = ReactOwner;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
 
 /***/ },
-/* 67 */
+/* 65 */
 /***/ function(module, exports, __webpack_require__) {
 
-       /**
-        * Copyright 2013-2015, Facebook, Inc.
+       /* WEBPACK VAR INJECTION */(function(process) {/**
+        * Copyright 2016-present, 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.
         *
-        * @providesModule ReactPropTypeLocations
+        * @providesModule ReactInstrumentation
         */
        
        'use strict';
        
-       var keyMirror = __webpack_require__(19);
+       var debugTool = null;
        
-       var ReactPropTypeLocations = keyMirror({
-         prop: null,
-         context: null,
-         childContext: null
-       });
+       if (process.env.NODE_ENV !== 'production') {
+         var ReactDebugTool = __webpack_require__(66);
+         debugTool = ReactDebugTool;
+       }
        
-       module.exports = ReactPropTypeLocations;
+       module.exports = { debugTool: debugTool };
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
 
 /***/ },
-/* 68 */
+/* 66 */
 /***/ function(module, exports, __webpack_require__) {
 
        /* WEBPACK VAR INJECTION */(function(process) {/**
-        * Copyright 2013-2015, Facebook, Inc.
+        * Copyright 2016-present, 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.
         *
-        * @providesModule ReactPropTypeLocationNames
+        * @providesModule ReactDebugTool
         */
        
        'use strict';
        
-       var ReactPropTypeLocationNames = {};
+       var ReactInvalidSetStateWarningDevTool = __webpack_require__(67);
+       var ReactHostOperationHistoryDevtool = __webpack_require__(68);
+       var ReactComponentTreeDevtool = __webpack_require__(31);
+       var ReactChildrenMutationWarningDevtool = __webpack_require__(69);
+       var ExecutionEnvironment = __webpack_require__(52);
        
-       if (process.env.NODE_ENV !== 'production') {
-         ReactPropTypeLocationNames = {
-           prop: 'prop',
-           context: 'context',
-           childContext: 'child context'
-         };
+       var performanceNow = __webpack_require__(70);
+       var warning = __webpack_require__(13);
+       
+       var eventHandlers = [];
+       var handlerDoesThrowForEvent = {};
+       
+       function emitEvent(handlerFunctionName, arg1, arg2, arg3, arg4, arg5) {
+         eventHandlers.forEach(function (handler) {
+           try {
+             if (handler[handlerFunctionName]) {
+               handler[handlerFunctionName](arg1, arg2, arg3, arg4, arg5);
+             }
+           } catch (e) {
+             process.env.NODE_ENV !== 'production' ? warning(handlerDoesThrowForEvent[handlerFunctionName], 'exception thrown by devtool while handling %s: %s', handlerFunctionName, e + '\n' + e.stack) : void 0;
+             handlerDoesThrowForEvent[handlerFunctionName] = true;
+           }
+         });
        }
        
-       module.exports = ReactPropTypeLocationNames;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
-
-/***/ },
-/* 69 */
-/***/ function(module, exports) {
-
-       /**
-        * 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.
-        *
-        * @providesModule shouldUpdateReactComponent
-        * @typechecks static-only
-        */
+       var isProfiling = false;
+       var flushHistory = [];
+       var lifeCycleTimerStack = [];
+       var currentFlushNesting = 0;
+       var currentFlushMeasurements = null;
+       var currentFlushStartTime = null;
+       var currentTimerDebugID = null;
+       var currentTimerStartTime = null;
+       var currentTimerNestedFlushDuration = null;
+       var currentTimerType = null;
+       
+       var lifeCycleTimerHasWarned = false;
+       
+       function clearHistory() {
+         ReactComponentTreeDevtool.purgeUnmountedComponents();
+         ReactHostOperationHistoryDevtool.clearHistory();
+       }
+       
+       function getTreeSnapshot(registeredIDs) {
+         return registeredIDs.reduce(function (tree, id) {
+           var ownerID = ReactComponentTreeDevtool.getOwnerID(id);
+           var parentID = ReactComponentTreeDevtool.getParentID(id);
+           tree[id] = {
+             displayName: ReactComponentTreeDevtool.getDisplayName(id),
+             text: ReactComponentTreeDevtool.getText(id),
+             updateCount: ReactComponentTreeDevtool.getUpdateCount(id),
+             childIDs: ReactComponentTreeDevtool.getChildIDs(id),
+             // Text nodes don't have owners but this is close enough.
+             ownerID: ownerID || ReactComponentTreeDevtool.getOwnerID(parentID),
+             parentID: parentID
+           };
+           return tree;
+         }, {});
+       }
        
-       'use strict';
+       function resetMeasurements() {
+         var previousStartTime = currentFlushStartTime;
+         var previousMeasurements = currentFlushMeasurements || [];
+         var previousOperations = ReactHostOperationHistoryDevtool.getHistory();
        
-       /**
-        * Given a `prevElement` and `nextElement`, determines if the existing
-        * instance should be updated as opposed to being destroyed or replaced by a new
-        * instance. Both arguments are elements. This ensures that this logic can
-        * operate on stateless trees without any backing instance.
-        *
-        * @param {?object} prevElement
-        * @param {?object} nextElement
-        * @return {boolean} True if the existing instance should be updated.
-        * @protected
-        */
-       function shouldUpdateReactComponent(prevElement, nextElement) {
-         var prevEmpty = prevElement === null || prevElement === false;
-         var nextEmpty = nextElement === null || nextElement === false;
-         if (prevEmpty || nextEmpty) {
-           return prevEmpty === nextEmpty;
+         if (currentFlushNesting === 0) {
+           currentFlushStartTime = null;
+           currentFlushMeasurements = null;
+           clearHistory();
+           return;
          }
        
-         var prevType = typeof prevElement;
-         var nextType = typeof nextElement;
-         if (prevType === 'string' || prevType === 'number') {
-           return nextType === 'string' || nextType === 'number';
-         } else {
-           return nextType === 'object' && prevElement.type === nextElement.type && prevElement.key === nextElement.key;
+         if (previousMeasurements.length || previousOperations.length) {
+           var registeredIDs = ReactComponentTreeDevtool.getRegisteredIDs();
+           flushHistory.push({
+             duration: performanceNow() - previousStartTime,
+             measurements: previousMeasurements || [],
+             operations: previousOperations || [],
+             treeSnapshot: getTreeSnapshot(registeredIDs)
+           });
          }
-         return false;
+       
+         clearHistory();
+         currentFlushStartTime = performanceNow();
+         currentFlushMeasurements = [];
        }
        
-       module.exports = shouldUpdateReactComponent;
+       function checkDebugID(debugID) {
+         process.env.NODE_ENV !== 'production' ? warning(debugID, 'ReactDebugTool: debugID may not be empty.') : void 0;
+       }
+       
+       function beginLifeCycleTimer(debugID, timerType) {
+         if (currentFlushNesting === 0) {
+           return;
+         }
+         if (currentTimerType && !lifeCycleTimerHasWarned) {
+           process.env.NODE_ENV !== 'production' ? warning(false, 'There is an internal error in the React performance measurement code. ' + 'Did not expect %s timer to start while %s timer is still in ' + 'progress for %s instance.', timerType, currentTimerType || 'no', debugID === currentTimerDebugID ? 'the same' : 'another') : void 0;
+           lifeCycleTimerHasWarned = true;
+         }
+         currentTimerStartTime = performanceNow();
+         currentTimerNestedFlushDuration = 0;
+         currentTimerDebugID = debugID;
+         currentTimerType = timerType;
+       }
+       
+       function endLifeCycleTimer(debugID, timerType) {
+         if (currentFlushNesting === 0) {
+           return;
+         }
+         if (currentTimerType !== timerType && !lifeCycleTimerHasWarned) {
+           process.env.NODE_ENV !== 'production' ? warning(false, 'There is an internal error in the React performance measurement code. ' + 'We did not expect %s timer to stop while %s timer is still in ' + 'progress for %s instance. Please report this as a bug in React.', timerType, currentTimerType || 'no', debugID === currentTimerDebugID ? 'the same' : 'another') : void 0;
+           lifeCycleTimerHasWarned = true;
+         }
+         if (isProfiling) {
+           currentFlushMeasurements.push({
+             timerType: timerType,
+             instanceID: debugID,
+             duration: performanceNow() - currentTimerStartTime - currentTimerNestedFlushDuration
+           });
+         }
+         currentTimerStartTime = null;
+         currentTimerNestedFlushDuration = null;
+         currentTimerDebugID = null;
+         currentTimerType = null;
+       }
+       
+       function pauseCurrentLifeCycleTimer() {
+         var currentTimer = {
+           startTime: currentTimerStartTime,
+           nestedFlushStartTime: performanceNow(),
+           debugID: currentTimerDebugID,
+           timerType: currentTimerType
+         };
+         lifeCycleTimerStack.push(currentTimer);
+         currentTimerStartTime = null;
+         currentTimerNestedFlushDuration = null;
+         currentTimerDebugID = null;
+         currentTimerType = null;
+       }
+       
+       function resumeCurrentLifeCycleTimer() {
+         var _lifeCycleTimerStack$ = lifeCycleTimerStack.pop();
+       
+         var startTime = _lifeCycleTimerStack$.startTime;
+         var nestedFlushStartTime = _lifeCycleTimerStack$.nestedFlushStartTime;
+         var debugID = _lifeCycleTimerStack$.debugID;
+         var timerType = _lifeCycleTimerStack$.timerType;
+       
+         var nestedFlushDuration = performanceNow() - nestedFlushStartTime;
+         currentTimerStartTime = startTime;
+         currentTimerNestedFlushDuration += nestedFlushDuration;
+         currentTimerDebugID = debugID;
+         currentTimerType = timerType;
+       }
+       
+       var ReactDebugTool = {
+         addDevtool: function (devtool) {
+           eventHandlers.push(devtool);
+         },
+         removeDevtool: function (devtool) {
+           for (var i = 0; i < eventHandlers.length; i++) {
+             if (eventHandlers[i] === devtool) {
+               eventHandlers.splice(i, 1);
+               i--;
+             }
+           }
+         },
+         isProfiling: function () {
+           return isProfiling;
+         },
+         beginProfiling: function () {
+           if (isProfiling) {
+             return;
+           }
+       
+           isProfiling = true;
+           flushHistory.length = 0;
+           resetMeasurements();
+           ReactDebugTool.addDevtool(ReactHostOperationHistoryDevtool);
+         },
+         endProfiling: function () {
+           if (!isProfiling) {
+             return;
+           }
+       
+           isProfiling = false;
+           resetMeasurements();
+           ReactDebugTool.removeDevtool(ReactHostOperationHistoryDevtool);
+         },
+         getFlushHistory: function () {
+           return flushHistory;
+         },
+         onBeginFlush: function () {
+           currentFlushNesting++;
+           resetMeasurements();
+           pauseCurrentLifeCycleTimer();
+           emitEvent('onBeginFlush');
+         },
+         onEndFlush: function () {
+           resetMeasurements();
+           currentFlushNesting--;
+           resumeCurrentLifeCycleTimer();
+           emitEvent('onEndFlush');
+         },
+         onBeginLifeCycleTimer: function (debugID, timerType) {
+           checkDebugID(debugID);
+           emitEvent('onBeginLifeCycleTimer', debugID, timerType);
+           beginLifeCycleTimer(debugID, timerType);
+         },
+         onEndLifeCycleTimer: function (debugID, timerType) {
+           checkDebugID(debugID);
+           endLifeCycleTimer(debugID, timerType);
+           emitEvent('onEndLifeCycleTimer', debugID, timerType);
+         },
+         onBeginReconcilerTimer: function (debugID, timerType) {
+           checkDebugID(debugID);
+           emitEvent('onBeginReconcilerTimer', debugID, timerType);
+         },
+         onEndReconcilerTimer: function (debugID, timerType) {
+           checkDebugID(debugID);
+           emitEvent('onEndReconcilerTimer', debugID, timerType);
+         },
+         onError: function (debugID) {
+           if (currentTimerDebugID != null) {
+             endLifeCycleTimer(currentTimerDebugID, currentTimerType);
+           }
+           emitEvent('onError', debugID);
+         },
+         onBeginProcessingChildContext: function () {
+           emitEvent('onBeginProcessingChildContext');
+         },
+         onEndProcessingChildContext: function () {
+           emitEvent('onEndProcessingChildContext');
+         },
+         onHostOperation: function (debugID, type, payload) {
+           checkDebugID(debugID);
+           emitEvent('onHostOperation', debugID, type, payload);
+         },
+         onComponentHasMounted: function (debugID) {
+           checkDebugID(debugID);
+           emitEvent('onComponentHasMounted', debugID);
+         },
+         onComponentHasUpdated: function (debugID) {
+           checkDebugID(debugID);
+           emitEvent('onComponentHasUpdated', debugID);
+         },
+         onSetState: function () {
+           emitEvent('onSetState');
+         },
+         onSetDisplayName: function (debugID, displayName) {
+           checkDebugID(debugID);
+           emitEvent('onSetDisplayName', debugID, displayName);
+         },
+         onSetChildren: function (debugID, childDebugIDs) {
+           checkDebugID(debugID);
+           childDebugIDs.forEach(checkDebugID);
+           emitEvent('onSetChildren', debugID, childDebugIDs);
+         },
+         onSetOwner: function (debugID, ownerDebugID) {
+           checkDebugID(debugID);
+           emitEvent('onSetOwner', debugID, ownerDebugID);
+         },
+         onSetParent: function (debugID, parentDebugID) {
+           checkDebugID(debugID);
+           emitEvent('onSetParent', debugID, parentDebugID);
+         },
+         onSetText: function (debugID, text) {
+           checkDebugID(debugID);
+           emitEvent('onSetText', debugID, text);
+         },
+         onMountRootComponent: function (debugID) {
+           checkDebugID(debugID);
+           emitEvent('onMountRootComponent', debugID);
+         },
+         onBeforeMountComponent: function (debugID, element) {
+           checkDebugID(debugID);
+           emitEvent('onBeforeMountComponent', debugID, element);
+         },
+         onMountComponent: function (debugID) {
+           checkDebugID(debugID);
+           emitEvent('onMountComponent', debugID);
+         },
+         onBeforeUpdateComponent: function (debugID, element) {
+           checkDebugID(debugID);
+           emitEvent('onBeforeUpdateComponent', debugID, element);
+         },
+         onUpdateComponent: function (debugID) {
+           checkDebugID(debugID);
+           emitEvent('onUpdateComponent', debugID);
+         },
+         onUnmountComponent: function (debugID) {
+           checkDebugID(debugID);
+           emitEvent('onUnmountComponent', debugID);
+         },
+         onTestEvent: function () {
+           emitEvent('onTestEvent');
+         }
+       };
+       
+       ReactDebugTool.addDevtool(ReactInvalidSetStateWarningDevTool);
+       ReactDebugTool.addDevtool(ReactComponentTreeDevtool);
+       ReactDebugTool.addDevtool(ReactChildrenMutationWarningDevtool);
+       var url = ExecutionEnvironment.canUseDOM && window.location.href || '';
+       if (/[?&]react_perf\b/.test(url)) {
+         ReactDebugTool.beginProfiling();
+       }
+       
+       module.exports = ReactDebugTool;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
 
 /***/ },
-/* 70 */
+/* 67 */
 /***/ function(module, exports, __webpack_require__) {
 
-       /**
-        * Copyright 2014-2015, Facebook, Inc.
+       /* WEBPACK VAR INJECTION */(function(process) {/**
+        * Copyright 2016-present, 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.
         *
-        * @providesModule ReactEmptyComponent
+        * @providesModule ReactInvalidSetStateWarningDevTool
         */
        
        'use strict';
        
-       var ReactElement = __webpack_require__(44);
-       var ReactEmptyComponentRegistry = __webpack_require__(46);
-       var ReactReconciler = __webpack_require__(52);
+       var warning = __webpack_require__(13);
        
-       var assign = __webpack_require__(41);
+       if (process.env.NODE_ENV !== 'production') {
+         var processingChildContext = false;
        
-       var placeholderElement;
+         var warnInvalidSetState = function () {
+           process.env.NODE_ENV !== 'production' ? warning(!processingChildContext, 'setState(...): Cannot call setState() inside getChildContext()') : void 0;
+         };
+       }
        
-       var ReactEmptyComponentInjection = {
-         injectEmptyComponent: function (component) {
-           placeholderElement = ReactElement.createElement(component);
+       var ReactInvalidSetStateWarningDevTool = {
+         onBeginProcessingChildContext: function () {
+           processingChildContext = true;
+         },
+         onEndProcessingChildContext: function () {
+           processingChildContext = false;
+         },
+         onSetState: function () {
+           warnInvalidSetState();
          }
        };
        
-       var ReactEmptyComponent = function (instantiate) {
-         this._currentElement = null;
-         this._rootNodeID = null;
-         this._renderedComponent = instantiate(placeholderElement);
-       };
-       assign(ReactEmptyComponent.prototype, {
-         construct: function (element) {},
-         mountComponent: function (rootID, transaction, context) {
-           ReactEmptyComponentRegistry.registerNullComponentID(rootID);
-           this._rootNodeID = rootID;
-           return ReactReconciler.mountComponent(this._renderedComponent, rootID, transaction, context);
+       module.exports = ReactInvalidSetStateWarningDevTool;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
+
+/***/ },
+/* 68 */
+/***/ function(module, exports) {
+
+       /**
+        * Copyright 2016-present, 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.
+        *
+        * @providesModule ReactHostOperationHistoryDevtool
+        */
+       
+       'use strict';
+       
+       var history = [];
+       
+       var ReactHostOperationHistoryDevtool = {
+         onHostOperation: function (debugID, type, payload) {
+           history.push({
+             instanceID: debugID,
+             type: type,
+             payload: payload
+           });
          },
-         receiveComponent: function () {},
-         unmountComponent: function (rootID, transaction, context) {
-           ReactReconciler.unmountComponent(this._renderedComponent);
-           ReactEmptyComponentRegistry.deregisterNullComponentID(this._rootNodeID);
-           this._rootNodeID = null;
-           this._renderedComponent = null;
-         }
-       });
+         clearHistory: function () {
+           if (ReactHostOperationHistoryDevtool._preventClearing) {
+             // Should only be used for tests.
+             return;
+           }
        
-       ReactEmptyComponent.injection = ReactEmptyComponentInjection;
+           history = [];
+         },
+         getHistory: function () {
+           return history;
+         }
+       };
        
-       module.exports = ReactEmptyComponent;
+       module.exports = ReactHostOperationHistoryDevtool;
 
 /***/ },
-/* 71 */
+/* 69 */
 /***/ function(module, exports, __webpack_require__) {
 
        /* WEBPACK VAR INJECTION */(function(process) {/**
-        * Copyright 2014-2015, Facebook, Inc.
+        * Copyright 2013-present, 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.
         *
-        * @providesModule ReactNativeComponent
+        * @providesModule ReactChildrenMutationWarningDevtool
         */
        
        'use strict';
        
-       var assign = __webpack_require__(41);
-       var invariant = __webpack_require__(15);
+       var ReactComponentTreeDevtool = __webpack_require__(31);
        
-       var autoGenerateWrapperClass = null;
-       var genericComponentClass = null;
-       // This registry keeps track of wrapper classes around native tags.
-       var tagToComponentClass = {};
-       var textComponentClass = null;
+       var warning = __webpack_require__(13);
        
-       var ReactNativeComponentInjection = {
-         // This accepts a class that receives the tag string. This is a catch all
-         // that can render any kind of tag.
-         injectGenericComponentClass: function (componentClass) {
-           genericComponentClass = componentClass;
+       var elements = {};
+       
+       function handleElement(debugID, element) {
+         if (element == null) {
+           return;
+         }
+         if (element._shadowChildren === undefined) {
+           return;
+         }
+         if (element._shadowChildren === element.props.children) {
+           return;
+         }
+         var isMutated = false;
+         if (Array.isArray(element._shadowChildren)) {
+           if (element._shadowChildren.length === element.props.children.length) {
+             for (var i = 0; i < element._shadowChildren.length; i++) {
+               if (element._shadowChildren[i] !== element.props.children[i]) {
+                 isMutated = true;
+               }
+             }
+           } else {
+             isMutated = true;
+           }
+         }
+         process.env.NODE_ENV !== 'production' ? warning(Array.isArray(element._shadowChildren) && !isMutated, 'Component\'s children should not be mutated.%s', ReactComponentTreeDevtool.getStackAddendumByID(debugID)) : void 0;
+       }
+       
+       var ReactDOMUnknownPropertyDevtool = {
+         onBeforeMountComponent: function (debugID, element) {
+           elements[debugID] = element;
          },
-         // This accepts a text component class that takes the text string to be
-         // rendered as props.
-         injectTextComponentClass: function (componentClass) {
-           textComponentClass = componentClass;
+         onBeforeUpdateComponent: function (debugID, element) {
+           elements[debugID] = element;
          },
-         // This accepts a keyed object with classes as values. Each key represents a
-         // tag. That particular tag will use this class instead of the generic one.
-         injectComponentClasses: function (componentClasses) {
-           assign(tagToComponentClass, componentClasses);
+         onComponentHasMounted: function (debugID) {
+           handleElement(debugID, elements[debugID]);
+           delete elements[debugID];
+         },
+         onComponentHasUpdated: function (debugID) {
+           handleElement(debugID, elements[debugID]);
+           delete elements[debugID];
          }
        };
        
-       /**
-        * Get a composite component wrapper class for a specific tag.
-        *
-        * @param {ReactElement} element The tag for which to get the class.
-        * @return {function} The React class constructor function.
-        */
-       function getComponentClassForElement(element) {
-         if (typeof element.type === 'function') {
-           return element.type;
-         }
-         var tag = element.type;
-         var componentClass = tagToComponentClass[tag];
-         if (componentClass == null) {
-           tagToComponentClass[tag] = componentClass = autoGenerateWrapperClass(tag);
-         }
-         return componentClass;
-       }
+       module.exports = ReactDOMUnknownPropertyDevtool;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
+
+/***/ },
+/* 70 */
+/***/ function(module, exports, __webpack_require__) {
+
+       'use strict';
        
        /**
-        * Get a native internal component class for a specific tag.
+        * Copyright (c) 2013-present, Facebook, Inc.
+        * All rights reserved.
         *
-        * @param {ReactElement} element The element to create.
-        * @return {function} The internal class constructor function.
+        * 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.
+        *
+        * @typechecks
         */
-       function createInternalComponent(element) {
-         !genericComponentClass ? process.env.NODE_ENV !== 'production' ? invariant(false, 'There is no registered component for the tag %s', element.type) : invariant(false) : undefined;
-         return new genericComponentClass(element.type, element.props);
-       }
        
-       /**
-        * @param {ReactText} text
-        * @return {ReactComponent}
-        */
-       function createInstanceForText(text) {
-         return new textComponentClass(text);
-       }
+       var performance = __webpack_require__(71);
+       
+       var performanceNow;
        
        /**
-        * @param {ReactComponent} component
-        * @return {boolean}
+        * Detect if we can use `window.performance.now()` and gracefully fallback to
+        * `Date.now()` if it doesn't exist. We need to support Firefox < 15 for now
+        * because of Facebook's testing infrastructure.
         */
-       function isTextComponent(component) {
-         return component instanceof textComponentClass;
+       if (performance.now) {
+         performanceNow = function performanceNow() {
+           return performance.now();
+         };
+       } else {
+         performanceNow = function performanceNow() {
+           return Date.now();
+         };
        }
        
-       var ReactNativeComponent = {
-         getComponentClassForElement: getComponentClassForElement,
-         createInternalComponent: createInternalComponent,
-         createInstanceForText: createInstanceForText,
-         isTextComponent: isTextComponent,
-         injection: ReactNativeComponentInjection
-       };
-       
-       module.exports = ReactNativeComponent;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
+       module.exports = performanceNow;
 
 /***/ },
-/* 72 */
+/* 71 */
 /***/ function(module, exports, __webpack_require__) {
 
-       /* WEBPACK VAR INJECTION */(function(process) {/**
-        * Copyright 2015, Facebook, Inc.
+       /**
+        * Copyright (c) 2013-present, 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.
         *
-        * @providesModule validateDOMNesting
+        * @typechecks
         */
        
        'use strict';
        
-       var assign = __webpack_require__(41);
-       var emptyFunction = __webpack_require__(17);
-       var warning = __webpack_require__(27);
+       var ExecutionEnvironment = __webpack_require__(52);
        
-       var validateDOMNesting = emptyFunction;
-       
-       if (process.env.NODE_ENV !== 'production') {
-         // This validation code was written based on the HTML5 parsing spec:
-         // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope
-         //
-         // Note: this does not catch all invalid nesting, nor does it try to (as it's
-         // not clear what practical benefit doing so provides); instead, we warn only
-         // for cases where the parser will give a parse tree differing from what React
-         // intended. For example, <b><div></div></b> is invalid but we don't warn
-         // because it still parses correctly; we do warn for other cases like nested
-         // <p> tags where the beginning of the second element implicitly closes the
-         // first, causing a confusing mess.
-       
-         // https://html.spec.whatwg.org/multipage/syntax.html#special
-         var specialTags = ['address', 'applet', 'area', 'article', 'aside', 'base', 'basefont', 'bgsound', 'blockquote', 'body', 'br', 'button', 'caption', 'center', 'col', 'colgroup', 'dd', 'details', 'dir', 'div', 'dl', 'dt', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'frame', 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'iframe', 'img', 'input', 'isindex', 'li', 'link', 'listing', 'main', 'marquee', 'menu', 'menuitem', 'meta', 'nav', 'noembed', 'noframes', 'noscript', 'object', 'ol', 'p', 'param', 'plaintext', 'pre', 'script', 'section', 'select', 'source', 'style', 'summary', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'title', 'tr', 'track', 'ul', 'wbr', 'xmp'];
+       var performance;
        
-         // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope
-         var inScopeTags = ['applet', 'caption', 'html', 'table', 'td', 'th', 'marquee', 'object', 'template',
+       if (ExecutionEnvironment.canUseDOM) {
+         performance = window.performance || window.msPerformance || window.webkitPerformance;
+       }
        
-         // https://html.spec.whatwg.org/multipage/syntax.html#html-integration-point
-         // TODO: Distinguish by namespace here -- for <title>, including it here
-         // errs on the side of fewer warnings
-         'foreignObject', 'desc', 'title'];
+       module.exports = performance || {};
+
+/***/ },
+/* 72 */
+/***/ function(module, exports, __webpack_require__) {
+
+       /* WEBPACK VAR INJECTION */(function(process) {/**
+        * Copyright 2013-present, 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.
+        *
+        * @providesModule Transaction
+        */
        
-         // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-button-scope
-         var buttonScopeTags = inScopeTags.concat(['button']);
+       'use strict';
        
-         // https://html.spec.whatwg.org/multipage/syntax.html#generate-implied-end-tags
-         var impliedEndTags = ['dd', 'dt', 'li', 'option', 'optgroup', 'p', 'rp', 'rt'];
+       var _prodInvariant = __webpack_require__(9);
        
-         var emptyAncestorInfo = {
-           parentTag: null,
+       var invariant = __webpack_require__(10);
        
-           formTag: null,
-           aTagInScope: null,
-           buttonTagInScope: null,
-           nobrTagInScope: null,
-           pTagInButtonScope: null,
+       /**
+        * `Transaction` creates a black box that is able to wrap any method such that
+        * certain invariants are maintained before and after the method is invoked
+        * (Even if an exception is thrown while invoking the wrapped method). Whoever
+        * instantiates a transaction can provide enforcers of the invariants at
+        * creation time. The `Transaction` class itself will supply one additional
+        * automatic invariant for you - the invariant that any transaction instance
+        * should not be run while it is already being run. You would typically create a
+        * single instance of a `Transaction` for reuse multiple times, that potentially
+        * is used to wrap several different methods. Wrappers are extremely simple -
+        * they only require implementing two methods.
+        *
+        * <pre>
+        *                       wrappers (injected at creation time)
+        *                                      +        +
+        *                                      |        |
+        *                    +-----------------|--------|--------------+
+        *                    |                 v        |              |
+        *                    |      +---------------+   |              |
+        *                    |   +--|    wrapper1   |---|----+         |
+        *                    |   |  +---------------+   v    |         |
+        *                    |   |          +-------------+  |         |
+        *                    |   |     +----|   wrapper2  |--------+   |
+        *                    |   |     |    +-------------+  |     |   |
+        *                    |   |     |                     |     |   |
+        *                    |   v     v                     v     v   | wrapper
+        *                    | +---+ +---+   +---------+   +---+ +---+ | invariants
+        * perform(anyMethod) | |   | |   |   |         |   |   | |   | | maintained
+        * +----------------->|-|---|-|---|-->|anyMethod|---|---|-|---|-|-------->
+        *                    | |   | |   |   |         |   |   | |   | |
+        *                    | |   | |   |   |         |   |   | |   | |
+        *                    | |   | |   |   |         |   |   | |   | |
+        *                    | +---+ +---+   +---------+   +---+ +---+ |
+        *                    |  initialize                    close    |
+        *                    +-----------------------------------------+
+        * </pre>
+        *
+        * Use cases:
+        * - Preserving the input selection ranges before/after reconciliation.
+        *   Restoring selection even in the event of an unexpected error.
+        * - Deactivating events while rearranging the DOM, preventing blurs/focuses,
+        *   while guaranteeing that afterwards, the event system is reactivated.
+        * - Flushing a queue of collected DOM mutations to the main UI thread after a
+        *   reconciliation takes place in a worker thread.
+        * - Invoking any collected `componentDidUpdate` callbacks after rendering new
+        *   content.
+        * - (Future use case): Wrapping particular flushes of the `ReactWorker` queue
+        *   to preserve the `scrollTop` (an automatic scroll aware DOM).
+        * - (Future use case): Layout calculations before and after DOM updates.
+        *
+        * Transactional plugin API:
+        * - A module that has an `initialize` method that returns any precomputation.
+        * - and a `close` method that accepts the precomputation. `close` is invoked
+        *   when the wrapped process is completed, or has failed.
+        *
+        * @param {Array<TransactionalWrapper>} transactionWrapper Wrapper modules
+        * that implement `initialize` and `close`.
+        * @return {Transaction} Single transaction for reuse in thread.
+        *
+        * @class Transaction
+        */
+       var Mixin = {
+         /**
+          * Sets up this instance so that it is prepared for collecting metrics. Does
+          * so such that this setup method may be used on an instance that is already
+          * initialized, in a way that does not consume additional memory upon reuse.
+          * That can be useful if you decide to make your subclass of this mixin a
+          * "PooledClass".
+          */
+         reinitializeTransaction: function () {
+           this.transactionWrappers = this.getTransactionWrappers();
+           if (this.wrapperInitData) {
+             this.wrapperInitData.length = 0;
+           } else {
+             this.wrapperInitData = [];
+           }
+           this._isInTransaction = false;
+         },
        
-           listItemTagAutoclosing: null,
-           dlItemTagAutoclosing: null
-         };
+         _isInTransaction: false,
        
-         var updatedAncestorInfo = function (oldInfo, tag, instance) {
-           var ancestorInfo = assign({}, oldInfo || emptyAncestorInfo);
-           var info = { tag: tag, instance: instance };
+         /**
+          * @abstract
+          * @return {Array<TransactionWrapper>} Array of transaction wrappers.
+          */
+         getTransactionWrappers: null,
        
-           if (inScopeTags.indexOf(tag) !== -1) {
-             ancestorInfo.aTagInScope = null;
-             ancestorInfo.buttonTagInScope = null;
-             ancestorInfo.nobrTagInScope = null;
-           }
-           if (buttonScopeTags.indexOf(tag) !== -1) {
-             ancestorInfo.pTagInButtonScope = null;
-           }
+         isInTransaction: function () {
+           return !!this._isInTransaction;
+         },
        
-           // See rules for 'li', 'dd', 'dt' start tags in
-           // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody
-           if (specialTags.indexOf(tag) !== -1 && tag !== 'address' && tag !== 'div' && tag !== 'p') {
-             ancestorInfo.listItemTagAutoclosing = null;
-             ancestorInfo.dlItemTagAutoclosing = null;
+         /**
+          * Executes the function within a safety window. Use this for the top level
+          * methods that result in large amounts of computation/mutations that would
+          * need to be safety checked. The optional arguments helps prevent the need
+          * to bind in many cases.
+          *
+          * @param {function} method Member of scope to call.
+          * @param {Object} scope Scope to invoke from.
+          * @param {Object?=} a Argument to pass to the method.
+          * @param {Object?=} b Argument to pass to the method.
+          * @param {Object?=} c Argument to pass to the method.
+          * @param {Object?=} d Argument to pass to the method.
+          * @param {Object?=} e Argument to pass to the method.
+          * @param {Object?=} f Argument to pass to the method.
+          *
+          * @return {*} Return value from `method`.
+          */
+         perform: function (method, scope, a, b, c, d, e, f) {
+           !!this.isInTransaction() ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Transaction.perform(...): Cannot initialize a transaction when there is already an outstanding transaction.') : _prodInvariant('27') : void 0;
+           var errorThrown;
+           var ret;
+           try {
+             this._isInTransaction = true;
+             // Catching errors makes debugging more difficult, so we start with
+             // errorThrown set to true before setting it to false after calling
+             // close -- if it's still set to true in the finally block, it means
+             // one of these calls threw.
+             errorThrown = true;
+             this.initializeAll(0);
+             ret = method.call(scope, a, b, c, d, e, f);
+             errorThrown = false;
+           } finally {
+             try {
+               if (errorThrown) {
+                 // If `method` throws, prefer to show that stack trace over any thrown
+                 // by invoking `closeAll`.
+                 try {
+                   this.closeAll(0);
+                 } catch (err) {}
+               } else {
+                 // Since `method` didn't throw, we don't want to silence the exception
+                 // here.
+                 this.closeAll(0);
+               }
+             } finally {
+               this._isInTransaction = false;
+             }
            }
+           return ret;
+         },
        
-           ancestorInfo.parentTag = info;
-       
-           if (tag === 'form') {
-             ancestorInfo.formTag = info;
-           }
-           if (tag === 'a') {
-             ancestorInfo.aTagInScope = info;
-           }
-           if (tag === 'button') {
-             ancestorInfo.buttonTagInScope = info;
-           }
-           if (tag === 'nobr') {
-             ancestorInfo.nobrTagInScope = info;
-           }
-           if (tag === 'p') {
-             ancestorInfo.pTagInButtonScope = info;
-           }
-           if (tag === 'li') {
-             ancestorInfo.listItemTagAutoclosing = info;
+         initializeAll: function (startIndex) {
+           var transactionWrappers = this.transactionWrappers;
+           for (var i = startIndex; i < transactionWrappers.length; i++) {
+             var wrapper = transactionWrappers[i];
+             try {
+               // Catching errors makes debugging more difficult, so we start with the
+               // OBSERVED_ERROR state before overwriting it with the real return value
+               // of initialize -- if it's still set to OBSERVED_ERROR in the finally
+               // block, it means wrapper.initialize threw.
+               this.wrapperInitData[i] = Transaction.OBSERVED_ERROR;
+               this.wrapperInitData[i] = wrapper.initialize ? wrapper.initialize.call(this) : null;
+             } finally {
+               if (this.wrapperInitData[i] === Transaction.OBSERVED_ERROR) {
+                 // The initializer for wrapper i threw an error; initialize the
+                 // remaining wrappers but silence any exceptions from them to ensure
+                 // that the first error is the one to bubble up.
+                 try {
+                   this.initializeAll(i + 1);
+                 } catch (err) {}
+               }
+             }
            }
-           if (tag === 'dd' || tag === 'dt') {
-             ancestorInfo.dlItemTagAutoclosing = info;
+         },
+       
+         /**
+          * Invokes each of `this.transactionWrappers.close[i]` functions, passing into
+          * them the respective return values of `this.transactionWrappers.init[i]`
+          * (`close`rs that correspond to initializers that failed will not be
+          * invoked).
+          */
+         closeAll: function (startIndex) {
+           !this.isInTransaction() ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Transaction.closeAll(): Cannot close transaction when none are open.') : _prodInvariant('28') : void 0;
+           var transactionWrappers = this.transactionWrappers;
+           for (var i = startIndex; i < transactionWrappers.length; i++) {
+             var wrapper = transactionWrappers[i];
+             var initData = this.wrapperInitData[i];
+             var errorThrown;
+             try {
+               // Catching errors makes debugging more difficult, so we start with
+               // errorThrown set to true before setting it to false after calling
+               // close -- if it's still set to true in the finally block, it means
+               // wrapper.close threw.
+               errorThrown = true;
+               if (initData !== Transaction.OBSERVED_ERROR && wrapper.close) {
+                 wrapper.close.call(this, initData);
+               }
+               errorThrown = false;
+             } finally {
+               if (errorThrown) {
+                 // The closer for wrapper i threw an error; close the remaining
+                 // wrappers but silence any exceptions from them to ensure that the
+                 // first error is the one to bubble up.
+                 try {
+                   this.closeAll(i + 1);
+                 } catch (e) {}
+               }
+             }
            }
+           this.wrapperInitData.length = 0;
+         }
+       };
        
-           return ancestorInfo;
-         };
+       var Transaction = {
+       
+         Mixin: Mixin,
        
          /**
-          * Returns whether
+          * Token to look for to determine if an error occurred.
           */
-         var isTagValidWithParent = function (tag, parentTag) {
-           // First, let's check if we're in an unusual parsing mode...
-           switch (parentTag) {
-             // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inselect
-             case 'select':
-               return tag === 'option' || tag === 'optgroup' || tag === '#text';
-             case 'optgroup':
-               return tag === 'option' || tag === '#text';
-             // Strictly speaking, seeing an <option> doesn't mean we're in a <select>
-             // but
-             case 'option':
-               return tag === '#text';
+         OBSERVED_ERROR: {}
        
-             // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intd
-             // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incaption
-             // No special behavior since these rules fall back to "in body" mode for
-             // all except special table nodes which cause bad parsing behavior anyway.
-       
-             // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intr
-             case 'tr':
-               return tag === 'th' || tag === 'td' || tag === 'style' || tag === 'script' || tag === 'template';
+       };
        
-             // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intbody
-             case 'tbody':
-             case 'thead':
-             case 'tfoot':
-               return tag === 'tr' || tag === 'style' || tag === 'script' || tag === 'template';
+       module.exports = Transaction;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
+
+/***/ },
+/* 73 */
+/***/ function(module, exports) {
+
+       /**
+        * Copyright 2013-present, 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.
+        *
+        * @providesModule getEventTarget
+        */
        
-             // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incolgroup
-             case 'colgroup':
-               return tag === 'col' || tag === 'template';
+       'use strict';
        
-             // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intable
-             case 'table':
-               return tag === 'caption' || tag === 'colgroup' || tag === 'tbody' || tag === 'tfoot' || tag === 'thead' || tag === 'style' || tag === 'script' || tag === 'template';
+       /**
+        * Gets the target node from a native browser event by accounting for
+        * inconsistencies in browser DOM APIs.
+        *
+        * @param {object} nativeEvent Native browser event.
+        * @return {DOMEventTarget} Target node.
+        */
        
-             // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inhead
-             case 'head':
-               return tag === 'base' || tag === 'basefont' || tag === 'bgsound' || tag === 'link' || tag === 'meta' || tag === 'title' || tag === 'noscript' || tag === 'noframes' || tag === 'style' || tag === 'script' || tag === 'template';
+       function getEventTarget(nativeEvent) {
+         var target = nativeEvent.target || nativeEvent.srcElement || window;
        
-             // https://html.spec.whatwg.org/multipage/semantics.html#the-html-element
-             case 'html':
-               return tag === 'head' || tag === 'body';
-           }
+         // Normalize SVG <use> element events #4963
+         if (target.correspondingUseElement) {
+           target = target.correspondingUseElement;
+         }
        
-           // Probably in the "in body" parsing mode, so we outlaw only tag combos
-           // where the parsing rules cause implicit opens or closes to be added.
-           // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody
-           switch (tag) {
-             case 'h1':
-             case 'h2':
-             case 'h3':
-             case 'h4':
-             case 'h5':
-             case 'h6':
-               return parentTag !== 'h1' && parentTag !== 'h2' && parentTag !== 'h3' && parentTag !== 'h4' && parentTag !== 'h5' && parentTag !== 'h6';
+         // Safari may fire events on text nodes (Node.TEXT_NODE is 3).
+         // @see http://www.quirksmode.org/js/events_properties.html
+         return target.nodeType === 3 ? target.parentNode : target;
+       }
        
-             case 'rp':
-             case 'rt':
-               return impliedEndTags.indexOf(parentTag) === -1;
+       module.exports = getEventTarget;
+
+/***/ },
+/* 74 */
+/***/ function(module, exports, __webpack_require__) {
+
+       /**
+        * Copyright 2013-present, 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.
+        *
+        * @providesModule isEventSupported
+        */
        
-             case 'caption':
-             case 'col':
-             case 'colgroup':
-             case 'frame':
-             case 'head':
-             case 'tbody':
-             case 'td':
-             case 'tfoot':
-             case 'th':
-             case 'thead':
-             case 'tr':
-               // These tags are only valid with a few parents that have special child
-               // parsing rules -- if we're down here, then none of those matched and
-               // so we allow it only if we don't know what the parent is, as all other
-               // cases are invalid.
-               return parentTag == null;
-           }
+       'use strict';
        
-           return true;
-         };
+       var ExecutionEnvironment = __webpack_require__(52);
        
-         /**
-          * Returns whether
-          */
-         var findInvalidAncestorForTag = function (tag, ancestorInfo) {
-           switch (tag) {
-             case 'address':
-             case 'article':
-             case 'aside':
-             case 'blockquote':
-             case 'center':
-             case 'details':
-             case 'dialog':
-             case 'dir':
-             case 'div':
-             case 'dl':
-             case 'fieldset':
-             case 'figcaption':
-             case 'figure':
-             case 'footer':
-             case 'header':
-             case 'hgroup':
-             case 'main':
-             case 'menu':
-             case 'nav':
-             case 'ol':
-             case 'p':
-             case 'section':
-             case 'summary':
-             case 'ul':
+       var useHasFeature;
+       if (ExecutionEnvironment.canUseDOM) {
+         useHasFeature = document.implementation && document.implementation.hasFeature &&
+         // always returns true in newer browsers as per the standard.
+         // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature
+         document.implementation.hasFeature('', '') !== true;
+       }
        
-             case 'pre':
-             case 'listing':
+       /**
+        * Checks if an event is supported in the current execution environment.
+        *
+        * NOTE: This will not work correctly for non-generic events such as `change`,
+        * `reset`, `load`, `error`, and `select`.
+        *
+        * Borrows from Modernizr.
+        *
+        * @param {string} eventNameSuffix Event name, e.g. "click".
+        * @param {?boolean} capture Check if the capture phase is supported.
+        * @return {boolean} True if the event is supported.
+        * @internal
+        * @license Modernizr 3.0.0pre (Custom Build) | MIT
+        */
+       function isEventSupported(eventNameSuffix, capture) {
+         if (!ExecutionEnvironment.canUseDOM || capture && !('addEventListener' in document)) {
+           return false;
+         }
        
-             case 'table':
+         var eventName = 'on' + eventNameSuffix;
+         var isSupported = eventName in document;
        
-             case 'hr':
+         if (!isSupported) {
+           var element = document.createElement('div');
+           element.setAttribute(eventName, 'return;');
+           isSupported = typeof element[eventName] === 'function';
+         }
        
-             case 'xmp':
+         if (!isSupported && useHasFeature && eventNameSuffix === 'wheel') {
+           // This is the only way to test support for the `wheel` event in IE9+.
+           isSupported = document.implementation.hasFeature('Events.wheel', '3.0');
+         }
        
-             case 'h1':
-             case 'h2':
-             case 'h3':
-             case 'h4':
-             case 'h5':
-             case 'h6':
-               return ancestorInfo.pTagInButtonScope;
+         return isSupported;
+       }
        
-             case 'form':
-               return ancestorInfo.formTag || ancestorInfo.pTagInButtonScope;
+       module.exports = isEventSupported;
+
+/***/ },
+/* 75 */
+/***/ function(module, exports) {
+
+       /**
+        * Copyright 2013-present, 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.
+        *
+        * @providesModule isTextInputElement
+        * 
+        */
        
-             case 'li':
-               return ancestorInfo.listItemTagAutoclosing;
+       'use strict';
        
-             case 'dd':
-             case 'dt':
-               return ancestorInfo.dlItemTagAutoclosing;
+       /**
+        * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary
+        */
        
-             case 'button':
-               return ancestorInfo.buttonTagInScope;
+       var supportedInputTypes = {
+         'color': true,
+         'date': true,
+         'datetime': true,
+         'datetime-local': true,
+         'email': true,
+         'month': true,
+         'number': true,
+         'password': true,
+         'range': true,
+         'search': true,
+         'tel': true,
+         'text': true,
+         'time': true,
+         'url': true,
+         'week': true
+       };
        
-             case 'a':
-               // Spec says something about storing a list of markers, but it sounds
-               // equivalent to this check.
-               return ancestorInfo.aTagInScope;
+       function isTextInputElement(elem) {
+         var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();
        
-             case 'nobr':
-               return ancestorInfo.nobrTagInScope;
-           }
+         if (nodeName === 'input') {
+           return !!supportedInputTypes[elem.type];
+         }
        
-           return null;
-         };
+         if (nodeName === 'textarea') {
+           return true;
+         }
        
-         /**
-          * Given a ReactCompositeComponent instance, return a list of its recursive
-          * owners, starting at the root and ending with the instance itself.
-          */
-         var findOwnerStack = function (instance) {
-           if (!instance) {
-             return [];
-           }
+         return false;
+       }
        
-           var stack = [];
-           /*eslint-disable space-after-keywords */
-           do {
-             /*eslint-enable space-after-keywords */
-             stack.push(instance);
-           } while (instance = instance._currentElement._owner);
-           stack.reverse();
-           return stack;
-         };
-       
-         var didWarn = {};
-       
-         validateDOMNesting = function (childTag, childInstance, ancestorInfo) {
-           ancestorInfo = ancestorInfo || emptyAncestorInfo;
-           var parentInfo = ancestorInfo.parentTag;
-           var parentTag = parentInfo && parentInfo.tag;
-       
-           var invalidParent = isTagValidWithParent(childTag, parentTag) ? null : parentInfo;
-           var invalidAncestor = invalidParent ? null : findInvalidAncestorForTag(childTag, ancestorInfo);
-           var problematic = invalidParent || invalidAncestor;
-       
-           if (problematic) {
-             var ancestorTag = problematic.tag;
-             var ancestorInstance = problematic.instance;
-       
-             var childOwner = childInstance && childInstance._currentElement._owner;
-             var ancestorOwner = ancestorInstance && ancestorInstance._currentElement._owner;
-       
-             var childOwners = findOwnerStack(childOwner);
-             var ancestorOwners = findOwnerStack(ancestorOwner);
-       
-             var minStackLen = Math.min(childOwners.length, ancestorOwners.length);
-             var i;
-       
-             var deepestCommon = -1;
-             for (i = 0; i < minStackLen; i++) {
-               if (childOwners[i] === ancestorOwners[i]) {
-                 deepestCommon = i;
-               } else {
-                 break;
-               }
-             }
-       
-             var UNKNOWN = '(unknown)';
-             var childOwnerNames = childOwners.slice(deepestCommon + 1).map(function (inst) {
-               return inst.getName() || UNKNOWN;
-             });
-             var ancestorOwnerNames = ancestorOwners.slice(deepestCommon + 1).map(function (inst) {
-               return inst.getName() || UNKNOWN;
-             });
-             var ownerInfo = [].concat(
-             // If the parent and child instances have a common owner ancestor, start
-             // with that -- otherwise we just start with the parent's owners.
-             deepestCommon !== -1 ? childOwners[deepestCommon].getName() || UNKNOWN : [], ancestorOwnerNames, ancestorTag,
-             // If we're warning about an invalid (non-parent) ancestry, add '...'
-             invalidAncestor ? ['...'] : [], childOwnerNames, childTag).join(' > ');
-       
-             var warnKey = !!invalidParent + '|' + childTag + '|' + ancestorTag + '|' + ownerInfo;
-             if (didWarn[warnKey]) {
-               return;
-             }
-             didWarn[warnKey] = true;
-       
-             if (invalidParent) {
-               var info = '';
-               if (ancestorTag === 'table' && childTag === 'tr') {
-                 info += ' Add a <tbody> to your code to match the DOM tree generated by ' + 'the browser.';
-               }
-               process.env.NODE_ENV !== 'production' ? warning(false, 'validateDOMNesting(...): <%s> cannot appear as a child of <%s>. ' + 'See %s.%s', childTag, ancestorTag, ownerInfo, info) : undefined;
-             } else {
-               process.env.NODE_ENV !== 'production' ? warning(false, 'validateDOMNesting(...): <%s> cannot appear as a descendant of ' + '<%s>. See %s.', childTag, ancestorTag, ownerInfo) : undefined;
-             }
-           }
-         };
+       module.exports = isTextInputElement;
+
+/***/ },
+/* 76 */
+/***/ function(module, exports, __webpack_require__) {
+
+       /**
+        * Copyright 2013-present, 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.
+        *
+        * @providesModule DefaultEventPluginOrder
+        */
        
-         validateDOMNesting.ancestorInfoContextKey = '__validateDOMNesting_ancestorInfo$' + Math.random().toString(36).slice(2);
+       'use strict';
        
-         validateDOMNesting.updatedAncestorInfo = updatedAncestorInfo;
+       var keyOf = __webpack_require__(27);
        
-         // For testing
-         validateDOMNesting.isTagValidInContext = function (tag, ancestorInfo) {
-           ancestorInfo = ancestorInfo || emptyAncestorInfo;
-           var parentInfo = ancestorInfo.parentTag;
-           var parentTag = parentInfo && parentInfo.tag;
-           return isTagValidWithParent(tag, parentTag) && !findInvalidAncestorForTag(tag, ancestorInfo);
-         };
-       }
+       /**
+        * Module that is injectable into `EventPluginHub`, that specifies a
+        * deterministic ordering of `EventPlugin`s. A convenient way to reason about
+        * plugins, without having to package every one of them. This is better than
+        * having plugins be ordered in the same order that they are injected because
+        * that ordering would be influenced by the packaging order.
+        * `ResponderEventPlugin` must occur before `SimpleEventPlugin` so that
+        * preventing default on events is convenient in `SimpleEventPlugin` handlers.
+        */
+       var DefaultEventPluginOrder = [keyOf({ ResponderEventPlugin: null }), keyOf({ SimpleEventPlugin: null }), keyOf({ TapEventPlugin: null }), keyOf({ EnterLeaveEventPlugin: null }), keyOf({ ChangeEventPlugin: null }), keyOf({ SelectEventPlugin: null }), keyOf({ BeforeInputEventPlugin: null })];
        
-       module.exports = validateDOMNesting;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
+       module.exports = DefaultEventPluginOrder;
 
 /***/ },
-/* 73 */
+/* 77 */
 /***/ function(module, exports, __webpack_require__) {
 
-       /* WEBPACK VAR INJECTION */(function(process) {/**
-        * Copyright 2013-2015, Facebook, Inc.
+       /**
+        * Copyright 2013-present, 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.
         *
-        * @providesModule ReactDefaultInjection
+        * @providesModule EnterLeaveEventPlugin
         */
        
        'use strict';
        
-       var BeforeInputEventPlugin = __webpack_require__(74);
-       var ChangeEventPlugin = __webpack_require__(82);
-       var ClientReactRootIndex = __webpack_require__(85);
-       var DefaultEventPluginOrder = __webpack_require__(86);
-       var EnterLeaveEventPlugin = __webpack_require__(87);
-       var ExecutionEnvironment = __webpack_require__(11);
-       var HTMLDOMPropertyConfig = __webpack_require__(91);
-       var ReactBrowserComponentMixin = __webpack_require__(92);
-       var ReactComponentBrowserEnvironment = __webpack_require__(28);
-       var ReactDefaultBatchingStrategy = __webpack_require__(94);
-       var ReactDOMComponent = __webpack_require__(95);
-       var ReactDOMTextComponent = __webpack_require__(8);
-       var ReactEventListener = __webpack_require__(120);
-       var ReactInjection = __webpack_require__(123);
-       var ReactInstanceHandles = __webpack_require__(47);
-       var ReactMount = __webpack_require__(30);
-       var ReactReconcileTransaction = __webpack_require__(127);
-       var SelectEventPlugin = __webpack_require__(132);
-       var ServerReactRootIndex = __webpack_require__(133);
-       var SimpleEventPlugin = __webpack_require__(134);
-       var SVGDOMPropertyConfig = __webpack_require__(143);
+       var EventConstants = __webpack_require__(44);
+       var EventPropagators = __webpack_require__(45);
+       var ReactDOMComponentTree = __webpack_require__(39);
+       var SyntheticMouseEvent = __webpack_require__(78);
        
-       var alreadyInjected = false;
+       var keyOf = __webpack_require__(27);
        
-       function inject() {
-         if (alreadyInjected) {
-           // TODO: This is currently true because these injections are shared between
-           // the client and the server package. They should be built independently
-           // and not share any injection state. Then this problem will be solved.
-           return;
+       var topLevelTypes = EventConstants.topLevelTypes;
+       
+       var eventTypes = {
+         mouseEnter: {
+           registrationName: keyOf({ onMouseEnter: null }),
+           dependencies: [topLevelTypes.topMouseOut, topLevelTypes.topMouseOver]
+         },
+         mouseLeave: {
+           registrationName: keyOf({ onMouseLeave: null }),
+           dependencies: [topLevelTypes.topMouseOut, topLevelTypes.topMouseOver]
          }
-         alreadyInjected = true;
+       };
        
-         ReactInjection.EventEmitter.injectReactEventListener(ReactEventListener);
+       var EnterLeaveEventPlugin = {
        
-         /**
-          * Inject modules for resolving DOM hierarchy and plugin ordering.
-          */
-         ReactInjection.EventPluginHub.injectEventPluginOrder(DefaultEventPluginOrder);
-         ReactInjection.EventPluginHub.injectInstanceHandle(ReactInstanceHandles);
-         ReactInjection.EventPluginHub.injectMount(ReactMount);
+         eventTypes: eventTypes,
        
          /**
-          * Some important event plugins included by default (without having to require
-          * them).
+          * For almost every interaction we care about, there will be both a top-level
+          * `mouseover` and `mouseout` event that occurs. Only use `mouseout` so that
+          * we do not extract duplicate events. However, moving the mouse into the
+          * browser from outside will not fire a `mouseout` event. In this case, we use
+          * the `mouseover` top-level event.
           */
-         ReactInjection.EventPluginHub.injectEventPluginsByName({
-           SimpleEventPlugin: SimpleEventPlugin,
-           EnterLeaveEventPlugin: EnterLeaveEventPlugin,
-           ChangeEventPlugin: ChangeEventPlugin,
-           SelectEventPlugin: SelectEventPlugin,
-           BeforeInputEventPlugin: BeforeInputEventPlugin
-         });
-       
-         ReactInjection.NativeComponent.injectGenericComponentClass(ReactDOMComponent);
+         extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {
+           if (topLevelType === topLevelTypes.topMouseOver && (nativeEvent.relatedTarget || nativeEvent.fromElement)) {
+             return null;
+           }
+           if (topLevelType !== topLevelTypes.topMouseOut && topLevelType !== topLevelTypes.topMouseOver) {
+             // Must not be a mouse in or mouse out - ignoring.
+             return null;
+           }
        
-         ReactInjection.NativeComponent.injectTextComponentClass(ReactDOMTextComponent);
+           var win;
+           if (nativeEventTarget.window === nativeEventTarget) {
+             // `nativeEventTarget` is probably a window object.
+             win = nativeEventTarget;
+           } else {
+             // TODO: Figure out why `ownerDocument` is sometimes undefined in IE8.
+             var doc = nativeEventTarget.ownerDocument;
+             if (doc) {
+               win = doc.defaultView || doc.parentWindow;
+             } else {
+               win = window;
+             }
+           }
        
-         ReactInjection.Class.injectMixin(ReactBrowserComponentMixin);
+           var from;
+           var to;
+           if (topLevelType === topLevelTypes.topMouseOut) {
+             from = targetInst;
+             var related = nativeEvent.relatedTarget || nativeEvent.toElement;
+             to = related ? ReactDOMComponentTree.getClosestInstanceFromNode(related) : null;
+           } else {
+             // Moving to a node from outside the window.
+             from = null;
+             to = targetInst;
+           }
        
-         ReactInjection.DOMProperty.injectDOMPropertyConfig(HTMLDOMPropertyConfig);
-         ReactInjection.DOMProperty.injectDOMPropertyConfig(SVGDOMPropertyConfig);
+           if (from === to) {
+             // Nothing pertains to our managed components.
+             return null;
+           }
        
-         ReactInjection.EmptyComponent.injectEmptyComponent('noscript');
+           var fromNode = from == null ? win : ReactDOMComponentTree.getNodeFromInstance(from);
+           var toNode = to == null ? win : ReactDOMComponentTree.getNodeFromInstance(to);
        
-         ReactInjection.Updates.injectReconcileTransaction(ReactReconcileTransaction);
-         ReactInjection.Updates.injectBatchingStrategy(ReactDefaultBatchingStrategy);
+           var leave = SyntheticMouseEvent.getPooled(eventTypes.mouseLeave, from, nativeEvent, nativeEventTarget);
+           leave.type = 'mouseleave';
+           leave.target = fromNode;
+           leave.relatedTarget = toNode;
        
-         ReactInjection.RootIndex.injectCreateReactRootIndex(ExecutionEnvironment.canUseDOM ? ClientReactRootIndex.createReactRootIndex : ServerReactRootIndex.createReactRootIndex);
+           var enter = SyntheticMouseEvent.getPooled(eventTypes.mouseEnter, to, nativeEvent, nativeEventTarget);
+           enter.type = 'mouseenter';
+           enter.target = toNode;
+           enter.relatedTarget = fromNode;
        
-         ReactInjection.Component.injectEnvironment(ReactComponentBrowserEnvironment);
+           EventPropagators.accumulateEnterLeaveDispatches(leave, enter, from, to);
        
-         if (process.env.NODE_ENV !== 'production') {
-           var url = ExecutionEnvironment.canUseDOM && window.location.href || '';
-           if (/[?&]react_perf\b/.test(url)) {
-             var ReactDefaultPerf = __webpack_require__(144);
-             ReactDefaultPerf.start();
-           }
+           return [leave, enter];
          }
-       }
        
-       module.exports = {
-         inject: inject
        };
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
+       
+       module.exports = EnterLeaveEventPlugin;
 
 /***/ },
-/* 74 */
+/* 78 */
 /***/ function(module, exports, __webpack_require__) {
 
        /**
-        * Copyright 2013-2015 Facebook, Inc.
+        * Copyright 2013-present, 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.
         *
-        * @providesModule BeforeInputEventPlugin
-        * @typechecks static-only
+        * @providesModule SyntheticMouseEvent
         */
        
        'use strict';
        
-       var EventConstants = __webpack_require__(32);
-       var EventPropagators = __webpack_require__(75);
-       var ExecutionEnvironment = __webpack_require__(11);
-       var FallbackCompositionState = __webpack_require__(76);
-       var SyntheticCompositionEvent = __webpack_require__(78);
-       var SyntheticInputEvent = __webpack_require__(80);
-       
-       var keyOf = __webpack_require__(81);
+       var SyntheticUIEvent = __webpack_require__(79);
+       var ViewportMetrics = __webpack_require__(80);
        
-       var END_KEYCODES = [9, 13, 27, 32]; // Tab, Return, Esc, Space
-       var START_KEYCODE = 229;
+       var getEventModifierState = __webpack_require__(81);
        
-       var canUseCompositionEvent = ExecutionEnvironment.canUseDOM && 'CompositionEvent' in window;
+       /**
+        * @interface MouseEvent
+        * @see http://www.w3.org/TR/DOM-Level-3-Events/
+        */
+       var MouseEventInterface = {
+         screenX: null,
+         screenY: null,
+         clientX: null,
+         clientY: null,
+         ctrlKey: null,
+         shiftKey: null,
+         altKey: null,
+         metaKey: null,
+         getModifierState: getEventModifierState,
+         button: function (event) {
+           // Webkit, Firefox, IE9+
+           // which:  1 2 3
+           // button: 0 1 2 (standard)
+           var button = event.button;
+           if ('which' in event) {
+             return button;
+           }
+           // IE<9
+           // which:  undefined
+           // button: 0 0 0
+           // button: 1 4 2 (onmouseup)
+           return button === 2 ? 2 : button === 4 ? 1 : 0;
+         },
+         buttons: null,
+         relatedTarget: function (event) {
+           return event.relatedTarget || (event.fromElement === event.srcElement ? event.toElement : event.fromElement);
+         },
+         // "Proprietary" Interface.
+         pageX: function (event) {
+           return 'pageX' in event ? event.pageX : event.clientX + ViewportMetrics.currentScrollLeft;
+         },
+         pageY: function (event) {
+           return 'pageY' in event ? event.pageY : event.clientY + ViewportMetrics.currentScrollTop;
+         }
+       };
        
-       var documentMode = null;
-       if (ExecutionEnvironment.canUseDOM && 'documentMode' in document) {
-         documentMode = document.documentMode;
+       /**
+        * @param {object} dispatchConfig Configuration used to dispatch this event.
+        * @param {string} dispatchMarker Marker identifying the event target.
+        * @param {object} nativeEvent Native browser event.
+        * @extends {SyntheticUIEvent}
+        */
+       function SyntheticMouseEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
+         return SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
        }
        
-       // Webkit offers a very useful `textInput` event that can be used to
-       // directly represent `beforeInput`. The IE `textinput` event is not as
-       // useful, so we don't use it.
-       var canUseTextInputEvent = ExecutionEnvironment.canUseDOM && 'TextEvent' in window && !documentMode && !isPresto();
-       
-       // In IE9+, we have access to composition events, but the data supplied
-       // by the native compositionend event may be incorrect. Japanese ideographic
-       // spaces, for instance (\u3000) are not recorded correctly.
-       var useFallbackCompositionData = ExecutionEnvironment.canUseDOM && (!canUseCompositionEvent || documentMode && documentMode > 8 && documentMode <= 11);
+       SyntheticUIEvent.augmentClass(SyntheticMouseEvent, MouseEventInterface);
        
+       module.exports = SyntheticMouseEvent;
+
+/***/ },
+/* 79 */
+/***/ function(module, exports, __webpack_require__) {
+
        /**
-        * Opera <= 12 includes TextEvent in window, but does not fire
-        * text input events. Rely on keypress instead.
+        * Copyright 2013-present, 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.
+        *
+        * @providesModule SyntheticUIEvent
         */
-       function isPresto() {
-         var opera = window.opera;
-         return typeof opera === 'object' && typeof opera.version === 'function' && parseInt(opera.version(), 10) <= 12;
-       }
        
-       var SPACEBAR_CODE = 32;
-       var SPACEBAR_CHAR = String.fromCharCode(SPACEBAR_CODE);
+       'use strict';
        
-       var topLevelTypes = EventConstants.topLevelTypes;
+       var SyntheticEvent = __webpack_require__(56);
        
-       // Events and their corresponding property names.
-       var eventTypes = {
-         beforeInput: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onBeforeInput: null }),
-             captured: keyOf({ onBeforeInputCapture: null })
-           },
-           dependencies: [topLevelTypes.topCompositionEnd, topLevelTypes.topKeyPress, topLevelTypes.topTextInput, topLevelTypes.topPaste]
-         },
-         compositionEnd: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onCompositionEnd: null }),
-             captured: keyOf({ onCompositionEndCapture: null })
-           },
-           dependencies: [topLevelTypes.topBlur, topLevelTypes.topCompositionEnd, topLevelTypes.topKeyDown, topLevelTypes.topKeyPress, topLevelTypes.topKeyUp, topLevelTypes.topMouseDown]
-         },
-         compositionStart: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onCompositionStart: null }),
-             captured: keyOf({ onCompositionStartCapture: null })
-           },
-           dependencies: [topLevelTypes.topBlur, topLevelTypes.topCompositionStart, topLevelTypes.topKeyDown, topLevelTypes.topKeyPress, topLevelTypes.topKeyUp, topLevelTypes.topMouseDown]
+       var getEventTarget = __webpack_require__(73);
+       
+       /**
+        * @interface UIEvent
+        * @see http://www.w3.org/TR/DOM-Level-3-Events/
+        */
+       var UIEventInterface = {
+         view: function (event) {
+           if (event.view) {
+             return event.view;
+           }
+       
+           var target = getEventTarget(event);
+           if (target.window === target) {
+             // target is a window object
+             return target;
+           }
+       
+           var doc = target.ownerDocument;
+           // TODO: Figure out why `ownerDocument` is sometimes undefined in IE8.
+           if (doc) {
+             return doc.defaultView || doc.parentWindow;
+           } else {
+             return window;
+           }
          },
-         compositionUpdate: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onCompositionUpdate: null }),
-             captured: keyOf({ onCompositionUpdateCapture: null })
-           },
-           dependencies: [topLevelTypes.topBlur, topLevelTypes.topCompositionUpdate, topLevelTypes.topKeyDown, topLevelTypes.topKeyPress, topLevelTypes.topKeyUp, topLevelTypes.topMouseDown]
+         detail: function (event) {
+           return event.detail || 0;
          }
        };
        
-       // Track whether we've ever handled a keypress on the space key.
-       var hasSpaceKeypress = false;
-       
        /**
-        * Return whether a native keypress event is assumed to be a command.
-        * This is required because Firefox fires `keypress` events for key commands
-        * (cut, copy, select-all, etc.) even though no character is inserted.
+        * @param {object} dispatchConfig Configuration used to dispatch this event.
+        * @param {string} dispatchMarker Marker identifying the event target.
+        * @param {object} nativeEvent Native browser event.
+        * @extends {SyntheticEvent}
         */
-       function isKeypressCommand(nativeEvent) {
-         return (nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) &&
-         // ctrlKey && altKey is equivalent to AltGr, and is not a command.
-         !(nativeEvent.ctrlKey && nativeEvent.altKey);
+       function SyntheticUIEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
+         return SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
        }
        
+       SyntheticEvent.augmentClass(SyntheticUIEvent, UIEventInterface);
+       
+       module.exports = SyntheticUIEvent;
+
+/***/ },
+/* 80 */
+/***/ function(module, exports) {
+
        /**
-        * Translate native top level events into event types.
+        * Copyright 2013-present, Facebook, Inc.
+        * All rights reserved.
         *
-        * @param {string} topLevelType
-        * @return {object}
+        * 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.
+        *
+        * @providesModule ViewportMetrics
         */
-       function getCompositionEventType(topLevelType) {
-         switch (topLevelType) {
-           case topLevelTypes.topCompositionStart:
-             return eventTypes.compositionStart;
-           case topLevelTypes.topCompositionEnd:
-             return eventTypes.compositionEnd;
-           case topLevelTypes.topCompositionUpdate:
-             return eventTypes.compositionUpdate;
+       
+       'use strict';
+       
+       var ViewportMetrics = {
+       
+         currentScrollLeft: 0,
+       
+         currentScrollTop: 0,
+       
+         refreshScrollValues: function (scrollPosition) {
+           ViewportMetrics.currentScrollLeft = scrollPosition.x;
+           ViewportMetrics.currentScrollTop = scrollPosition.y;
          }
-       }
        
-       /**
-        * Does our fallback best-guess model think this event signifies that
-        * composition has begun?
-        *
-        * @param {string} topLevelType
-        * @param {object} nativeEvent
-        * @return {boolean}
-        */
-       function isFallbackCompositionStart(topLevelType, nativeEvent) {
-         return topLevelType === topLevelTypes.topKeyDown && nativeEvent.keyCode === START_KEYCODE;
-       }
+       };
        
+       module.exports = ViewportMetrics;
+
+/***/ },
+/* 81 */
+/***/ function(module, exports) {
+
        /**
-        * Does our fallback mode think that this event is the end of composition?
+        * Copyright 2013-present, Facebook, Inc.
+        * All rights reserved.
         *
-        * @param {string} topLevelType
-        * @param {object} nativeEvent
-        * @return {boolean}
+        * 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.
+        *
+        * @providesModule getEventModifierState
         */
-       function isFallbackCompositionEnd(topLevelType, nativeEvent) {
-         switch (topLevelType) {
-           case topLevelTypes.topKeyUp:
-             // Command keys insert or clear IME input.
-             return END_KEYCODES.indexOf(nativeEvent.keyCode) !== -1;
-           case topLevelTypes.topKeyDown:
-             // Expect IME keyCode on each keydown. If we get any other
-             // code we must have exited earlier.
-             return nativeEvent.keyCode !== START_KEYCODE;
-           case topLevelTypes.topKeyPress:
-           case topLevelTypes.topMouseDown:
-           case topLevelTypes.topBlur:
-             // Events are not possible without cancelling IME.
-             return true;
-           default:
-             return false;
-         }
-       }
+       
+       'use strict';
        
        /**
-        * Google Input Tools provides composition data via a CustomEvent,
-        * with the `data` property populated in the `detail` object. If this
-        * is available on the event object, use it. If not, this is a plain
-        * composition event and we have nothing special to extract.
-        *
-        * @param {object} nativeEvent
-        * @return {?string}
+        * Translation from modifier key to the associated property in the event.
+        * @see http://www.w3.org/TR/DOM-Level-3-Events/#keys-Modifiers
         */
-       function getDataFromCustomEvent(nativeEvent) {
-         var detail = nativeEvent.detail;
-         if (typeof detail === 'object' && 'data' in detail) {
-           return detail.data;
+       
+       var modifierKeyToProp = {
+         'Alt': 'altKey',
+         'Control': 'ctrlKey',
+         'Meta': 'metaKey',
+         'Shift': 'shiftKey'
+       };
+       
+       // IE8 does not implement getModifierState so we simply map it to the only
+       // modifier keys exposed by the event itself, does not support Lock-keys.
+       // Currently, all major browsers except Chrome seems to support Lock-keys.
+       function modifierStateGetter(keyArg) {
+         var syntheticEvent = this;
+         var nativeEvent = syntheticEvent.nativeEvent;
+         if (nativeEvent.getModifierState) {
+           return nativeEvent.getModifierState(keyArg);
          }
-         return null;
+         var keyProp = modifierKeyToProp[keyArg];
+         return keyProp ? !!nativeEvent[keyProp] : false;
        }
        
-       // Track the current IME composition fallback object, if any.
-       var currentComposition = null;
+       function getEventModifierState(nativeEvent) {
+         return modifierStateGetter;
+       }
        
+       module.exports = getEventModifierState;
+
+/***/ },
+/* 82 */
+/***/ function(module, exports, __webpack_require__) {
+
        /**
-        * @param {string} topLevelType Record from `EventConstants`.
-        * @param {DOMEventTarget} topLevelTarget The listening component root node.
-        * @param {string} topLevelTargetID ID of `topLevelTarget`.
-        * @param {object} nativeEvent Native browser event.
-        * @return {?object} A SyntheticCompositionEvent.
+        * Copyright 2013-present, 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.
+        *
+        * @providesModule HTMLDOMPropertyConfig
         */
-       function extractCompositionEvent(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) {
-         var eventType;
-         var fallbackData;
        
-         if (canUseCompositionEvent) {
-           eventType = getCompositionEventType(topLevelType);
-         } else if (!currentComposition) {
-           if (isFallbackCompositionStart(topLevelType, nativeEvent)) {
-             eventType = eventTypes.compositionStart;
-           }
-         } else if (isFallbackCompositionEnd(topLevelType, nativeEvent)) {
-           eventType = eventTypes.compositionEnd;
-         }
+       'use strict';
        
-         if (!eventType) {
-           return null;
-         }
+       var DOMProperty = __webpack_require__(40);
        
-         if (useFallbackCompositionData) {
-           // The current composition is stored statically and must not be
-           // overwritten while composition continues.
-           if (!currentComposition && eventType === eventTypes.compositionStart) {
-             currentComposition = FallbackCompositionState.getPooled(topLevelTarget);
-           } else if (eventType === eventTypes.compositionEnd) {
-             if (currentComposition) {
-               fallbackData = currentComposition.getData();
-             }
-           }
-         }
-       
-         var event = SyntheticCompositionEvent.getPooled(eventType, topLevelTargetID, nativeEvent, nativeEventTarget);
-       
-         if (fallbackData) {
-           // Inject data generated from fallback path into the synthetic event.
-           // This matches the property of native CompositionEventInterface.
-           event.data = fallbackData;
-         } else {
-           var customData = getDataFromCustomEvent(nativeEvent);
-           if (customData !== null) {
-             event.data = customData;
-           }
-         }
-       
-         EventPropagators.accumulateTwoPhaseDispatches(event);
-         return event;
-       }
-       
-       /**
-        * @param {string} topLevelType Record from `EventConstants`.
-        * @param {object} nativeEvent Native browser event.
-        * @return {?string} The string corresponding to this `beforeInput` event.
-        */
-       function getNativeBeforeInputChars(topLevelType, nativeEvent) {
-         switch (topLevelType) {
-           case topLevelTypes.topCompositionEnd:
-             return getDataFromCustomEvent(nativeEvent);
-           case topLevelTypes.topKeyPress:
-             /**
-              * If native `textInput` events are available, our goal is to make
-              * use of them. However, there is a special case: the spacebar key.
-              * In Webkit, preventing default on a spacebar `textInput` event
-              * cancels character insertion, but it *also* causes the browser
-              * to fall back to its default spacebar behavior of scrolling the
-              * page.
-              *
-              * Tracking at:
-              * https://code.google.com/p/chromium/issues/detail?id=355103
-              *
-              * To avoid this issue, use the keypress event as if no `textInput`
-              * event is available.
-              */
-             var which = nativeEvent.which;
-             if (which !== SPACEBAR_CODE) {
-               return null;
-             }
-       
-             hasSpaceKeypress = true;
-             return SPACEBAR_CHAR;
-       
-           case topLevelTypes.topTextInput:
-             // Record the characters to be added to the DOM.
-             var chars = nativeEvent.data;
+       var MUST_USE_PROPERTY = DOMProperty.injection.MUST_USE_PROPERTY;
+       var HAS_BOOLEAN_VALUE = DOMProperty.injection.HAS_BOOLEAN_VALUE;
+       var HAS_NUMERIC_VALUE = DOMProperty.injection.HAS_NUMERIC_VALUE;
+       var HAS_POSITIVE_NUMERIC_VALUE = DOMProperty.injection.HAS_POSITIVE_NUMERIC_VALUE;
+       var HAS_OVERLOADED_BOOLEAN_VALUE = DOMProperty.injection.HAS_OVERLOADED_BOOLEAN_VALUE;
        
-             // If it's a spacebar character, assume that we have already handled
-             // it at the keypress level and bail immediately. Android Chrome
-             // doesn't give us keycodes, so we need to blacklist it.
-             if (chars === SPACEBAR_CHAR && hasSpaceKeypress) {
-               return null;
-             }
+       var HTMLDOMPropertyConfig = {
+         isCustomAttribute: RegExp.prototype.test.bind(new RegExp('^(data|aria)-[' + DOMProperty.ATTRIBUTE_NAME_CHAR + ']*$')),
+         Properties: {
+           /**
+            * Standard Properties
+            */
+           accept: 0,
+           acceptCharset: 0,
+           accessKey: 0,
+           action: 0,
+           allowFullScreen: HAS_BOOLEAN_VALUE,
+           allowTransparency: 0,
+           alt: 0,
+           async: HAS_BOOLEAN_VALUE,
+           autoComplete: 0,
+           // autoFocus is polyfilled/normalized by AutoFocusUtils
+           // autoFocus: HAS_BOOLEAN_VALUE,
+           autoPlay: HAS_BOOLEAN_VALUE,
+           capture: HAS_BOOLEAN_VALUE,
+           cellPadding: 0,
+           cellSpacing: 0,
+           charSet: 0,
+           challenge: 0,
+           checked: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,
+           cite: 0,
+           classID: 0,
+           className: 0,
+           cols: HAS_POSITIVE_NUMERIC_VALUE,
+           colSpan: 0,
+           content: 0,
+           contentEditable: 0,
+           contextMenu: 0,
+           controls: HAS_BOOLEAN_VALUE,
+           coords: 0,
+           crossOrigin: 0,
+           data: 0, // For `<object />` acts as `src`.
+           dateTime: 0,
+           'default': HAS_BOOLEAN_VALUE,
+           defer: HAS_BOOLEAN_VALUE,
+           dir: 0,
+           disabled: HAS_BOOLEAN_VALUE,
+           download: HAS_OVERLOADED_BOOLEAN_VALUE,
+           draggable: 0,
+           encType: 0,
+           form: 0,
+           formAction: 0,
+           formEncType: 0,
+           formMethod: 0,
+           formNoValidate: HAS_BOOLEAN_VALUE,
+           formTarget: 0,
+           frameBorder: 0,
+           headers: 0,
+           height: 0,
+           hidden: HAS_BOOLEAN_VALUE,
+           high: 0,
+           href: 0,
+           hrefLang: 0,
+           htmlFor: 0,
+           httpEquiv: 0,
+           icon: 0,
+           id: 0,
+           inputMode: 0,
+           integrity: 0,
+           is: 0,
+           keyParams: 0,
+           keyType: 0,
+           kind: 0,
+           label: 0,
+           lang: 0,
+           list: 0,
+           loop: HAS_BOOLEAN_VALUE,
+           low: 0,
+           manifest: 0,
+           marginHeight: 0,
+           marginWidth: 0,
+           max: 0,
+           maxLength: 0,
+           media: 0,
+           mediaGroup: 0,
+           method: 0,
+           min: 0,
+           minLength: 0,
+           // Caution; `option.selected` is not updated if `select.multiple` is
+           // disabled with `removeAttribute`.
+           multiple: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,
+           muted: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,
+           name: 0,
+           nonce: 0,
+           noValidate: HAS_BOOLEAN_VALUE,
+           open: HAS_BOOLEAN_VALUE,
+           optimum: 0,
+           pattern: 0,
+           placeholder: 0,
+           poster: 0,
+           preload: 0,
+           profile: 0,
+           radioGroup: 0,
+           readOnly: HAS_BOOLEAN_VALUE,
+           referrerPolicy: 0,
+           rel: 0,
+           required: HAS_BOOLEAN_VALUE,
+           reversed: HAS_BOOLEAN_VALUE,
+           role: 0,
+           rows: HAS_POSITIVE_NUMERIC_VALUE,
+           rowSpan: HAS_NUMERIC_VALUE,
+           sandbox: 0,
+           scope: 0,
+           scoped: HAS_BOOLEAN_VALUE,
+           scrolling: 0,
+           seamless: HAS_BOOLEAN_VALUE,
+           selected: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,
+           shape: 0,
+           size: HAS_POSITIVE_NUMERIC_VALUE,
+           sizes: 0,
+           span: HAS_POSITIVE_NUMERIC_VALUE,
+           spellCheck: 0,
+           src: 0,
+           srcDoc: 0,
+           srcLang: 0,
+           srcSet: 0,
+           start: HAS_NUMERIC_VALUE,
+           step: 0,
+           style: 0,
+           summary: 0,
+           tabIndex: 0,
+           target: 0,
+           title: 0,
+           // Setting .type throws on non-<input> tags
+           type: 0,
+           useMap: 0,
+           value: 0,
+           width: 0,
+           wmode: 0,
+           wrap: 0,
        
-             return chars;
+           /**
+            * RDFa Properties
+            */
+           about: 0,
+           datatype: 0,
+           inlist: 0,
+           prefix: 0,
+           // property is also supported for OpenGraph in meta tags.
+           property: 0,
+           resource: 0,
+           'typeof': 0,
+           vocab: 0,
        
-           default:
-             // For other native event types, do nothing.
-             return null;
-         }
-       }
+           /**
+            * Non-standard Properties
+            */
+           // autoCapitalize and autoCorrect are supported in Mobile Safari for
+           // keyboard hints.
+           autoCapitalize: 0,
+           autoCorrect: 0,
+           // autoSave allows WebKit/Blink to persist values of input fields on page reloads
+           autoSave: 0,
+           // color is for Safari mask-icon link
+           color: 0,
+           // itemProp, itemScope, itemType are for
+           // Microdata support. See http://schema.org/docs/gs.html
+           itemProp: 0,
+           itemScope: HAS_BOOLEAN_VALUE,
+           itemType: 0,
+           // itemID and itemRef are for Microdata support as well but
+           // only specified in the WHATWG spec document. See
+           // https://html.spec.whatwg.org/multipage/microdata.html#microdata-dom-api
+           itemID: 0,
+           itemRef: 0,
+           // results show looking glass icon and recent searches on input
+           // search fields in WebKit/Blink
+           results: 0,
+           // IE-only attribute that specifies security restrictions on an iframe
+           // as an alternative to the sandbox attribute on IE<10
+           security: 0,
+           // IE-only attribute that controls focus behavior
+           unselectable: 0
+         },
+         DOMAttributeNames: {
+           acceptCharset: 'accept-charset',
+           className: 'class',
+           htmlFor: 'for',
+           httpEquiv: 'http-equiv'
+         },
+         DOMPropertyNames: {}
+       };
        
+       module.exports = HTMLDOMPropertyConfig;
+
+/***/ },
+/* 83 */
+/***/ function(module, exports, __webpack_require__) {
+
        /**
-        * For browsers that do not provide the `textInput` event, extract the
-        * appropriate string to use for SyntheticInputEvent.
+        * Copyright 2013-present, Facebook, Inc.
+        * All rights reserved.
         *
-        * @param {string} topLevelType Record from `EventConstants`.
-        * @param {object} nativeEvent Native browser event.
-        * @return {?string} The fallback string for this `beforeInput` event.
-        */
-       function getFallbackBeforeInputChars(topLevelType, nativeEvent) {
-         // If we are currently composing (IME) and using a fallback to do so,
-         // try to extract the composed characters from the fallback object.
-         if (currentComposition) {
-           if (topLevelType === topLevelTypes.topCompositionEnd || isFallbackCompositionEnd(topLevelType, nativeEvent)) {
-             var chars = currentComposition.getData();
-             FallbackCompositionState.release(currentComposition);
-             currentComposition = null;
-             return chars;
-           }
-           return null;
-         }
-       
-         switch (topLevelType) {
-           case topLevelTypes.topPaste:
-             // If a paste event occurs after a keypress, throw out the input
-             // chars. Paste events should not lead to BeforeInput events.
-             return null;
-           case topLevelTypes.topKeyPress:
-             /**
-              * As of v27, Firefox may fire keypress events even when no character
-              * will be inserted. A few possibilities:
-              *
-              * - `which` is `0`. Arrow keys, Esc key, etc.
-              *
-              * - `which` is the pressed key code, but no char is available.
-              *   Ex: 'AltGr + d` in Polish. There is no modified character for
-              *   this key combination and no character is inserted into the
-              *   document, but FF fires the keypress for char code `100` anyway.
-              *   No `input` event will occur.
-              *
-              * - `which` is the pressed key code, but a command combination is
-              *   being used. Ex: `Cmd+C`. No character is inserted, and no
-              *   `input` event will occur.
-              */
-             if (nativeEvent.which && !isKeypressCommand(nativeEvent)) {
-               return String.fromCharCode(nativeEvent.which);
-             }
-             return null;
-           case topLevelTypes.topCompositionEnd:
-             return useFallbackCompositionData ? null : nativeEvent.data;
-           default:
-             return null;
-         }
-       }
-       
-       /**
-        * Extract a SyntheticInputEvent for `beforeInput`, based on either native
-        * `textInput` or fallback behavior.
+        * 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.
         *
-        * @param {string} topLevelType Record from `EventConstants`.
-        * @param {DOMEventTarget} topLevelTarget The listening component root node.
-        * @param {string} topLevelTargetID ID of `topLevelTarget`.
-        * @param {object} nativeEvent Native browser event.
-        * @return {?object} A SyntheticInputEvent.
+        * @providesModule ReactComponentBrowserEnvironment
         */
-       function extractBeforeInputEvent(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) {
-         var chars;
-       
-         if (canUseTextInputEvent) {
-           chars = getNativeBeforeInputChars(topLevelType, nativeEvent);
-         } else {
-           chars = getFallbackBeforeInputChars(topLevelType, nativeEvent);
-         }
-       
-         // If no characters are being inserted, no BeforeInput event should
-         // be fired.
-         if (!chars) {
-           return null;
-         }
        
-         var event = SyntheticInputEvent.getPooled(eventTypes.beforeInput, topLevelTargetID, nativeEvent, nativeEventTarget);
+       'use strict';
        
-         event.data = chars;
-         EventPropagators.accumulateTwoPhaseDispatches(event);
-         return event;
-       }
+       var DOMChildrenOperations = __webpack_require__(84);
+       var ReactDOMIDOperations = __webpack_require__(96);
        
        /**
-        * Create an `onBeforeInput` event to match
-        * http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105/#events-inputevents.
-        *
-        * This event plugin is based on the native `textInput` event
-        * available in Chrome, Safari, Opera, and IE. This event fires after
-        * `onKeyPress` and `onCompositionEnd`, but before `onInput`.
-        *
-        * `beforeInput` is spec'd but not implemented in any browsers, and
-        * the `input` event does not provide any useful information about what has
-        * actually been added, contrary to the spec. Thus, `textInput` is the best
-        * available event to identify the characters that have actually been inserted
-        * into the target node.
-        *
-        * This plugin is also responsible for emitting `composition` events, thus
-        * allowing us to share composition fallback code for both `beforeInput` and
-        * `composition` event types.
+        * Abstracts away all functionality of the reconciler that requires knowledge of
+        * the browser context. TODO: These callers should be refactored to avoid the
+        * need for this injection.
         */
-       var BeforeInputEventPlugin = {
+       var ReactComponentBrowserEnvironment = {
        
-         eventTypes: eventTypes,
+         processChildrenUpdates: ReactDOMIDOperations.dangerouslyProcessChildrenUpdates,
+       
+         replaceNodeWithMarkup: DOMChildrenOperations.dangerouslyReplaceNodeWithMarkup,
        
          /**
-          * @param {string} topLevelType Record from `EventConstants`.
-          * @param {DOMEventTarget} topLevelTarget The listening component root node.
-          * @param {string} topLevelTargetID ID of `topLevelTarget`.
-          * @param {object} nativeEvent Native browser event.
-          * @return {*} An accumulation of synthetic events.
-          * @see {EventPluginHub.extractEvents}
+          * If a particular environment requires that some resources be cleaned up,
+          * specify this in the injected Mixin. In the DOM, we would likely want to
+          * purge any cached node ID lookups.
+          *
+          * @private
           */
-         extractEvents: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) {
-           return [extractCompositionEvent(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget), extractBeforeInputEvent(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget)];
-         }
+         unmountIDFromEnvironment: function (rootNodeID) {}
+       
        };
        
-       module.exports = BeforeInputEventPlugin;
+       module.exports = ReactComponentBrowserEnvironment;
 
 /***/ },
-/* 75 */
+/* 84 */
 /***/ function(module, exports, __webpack_require__) {
 
        /* WEBPACK VAR INJECTION */(function(process) {/**
-        * Copyright 2013-2015, Facebook, Inc.
+        * Copyright 2013-present, 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.
         *
-        * @providesModule EventPropagators
+        * @providesModule DOMChildrenOperations
         */
        
        'use strict';
        
-       var EventConstants = __webpack_require__(32);
-       var EventPluginHub = __webpack_require__(33);
-       
-       var warning = __webpack_require__(27);
+       var DOMLazyTree = __webpack_require__(85);
+       var Danger = __webpack_require__(91);
+       var ReactMultiChildUpdateTypes = __webpack_require__(95);
+       var ReactDOMComponentTree = __webpack_require__(39);
+       var ReactInstrumentation = __webpack_require__(65);
        
-       var accumulateInto = __webpack_require__(37);
-       var forEachAccumulated = __webpack_require__(38);
+       var createMicrosoftUnsafeLocalFunction = __webpack_require__(88);
+       var setInnerHTML = __webpack_require__(87);
+       var setTextContent = __webpack_require__(89);
        
-       var PropagationPhases = EventConstants.PropagationPhases;
-       var getListener = EventPluginHub.getListener;
+       function getNodeAfter(parentNode, node) {
+         // Special case for text components, which return [open, close] comments
+         // from getHostNode.
+         if (Array.isArray(node)) {
+           node = node[1];
+         }
+         return node ? node.nextSibling : parentNode.firstChild;
+       }
        
        /**
-        * Some event types have a notion of different registration names for different
-        * "phases" of propagation. This finds listeners by a given phase.
-        */
-       function listenerAtPhase(id, event, propagationPhase) {
-         var registrationName = event.dispatchConfig.phasedRegistrationNames[propagationPhase];
-         return getListener(id, registrationName);
-       }
-       
-       /**
-        * Tags a `SyntheticEvent` with dispatched listeners. Creating this function
-        * here, allows us to not have to bind or create functions for each event.
-        * Mutating the event's members allows us to not have to create a wrapping
-        * "dispatch" object that pairs the event with the listener.
+        * Inserts `childNode` as a child of `parentNode` at the `index`.
+        *
+        * @param {DOMElement} parentNode Parent node in which to insert.
+        * @param {DOMElement} childNode Child node to insert.
+        * @param {number} index Index at which to insert the child.
+        * @internal
         */
-       function accumulateDirectionalDispatches(domID, upwards, event) {
-         if (process.env.NODE_ENV !== 'production') {
-           process.env.NODE_ENV !== 'production' ? warning(domID, 'Dispatching id must not be null') : undefined;
-         }
-         var phase = upwards ? PropagationPhases.bubbled : PropagationPhases.captured;
-         var listener = listenerAtPhase(domID, event, phase);
-         if (listener) {
-           event._dispatchListeners = accumulateInto(event._dispatchListeners, listener);
-           event._dispatchIDs = accumulateInto(event._dispatchIDs, domID);
-         }
+       var insertChildAt = createMicrosoftUnsafeLocalFunction(function (parentNode, childNode, referenceNode) {
+         // We rely exclusively on `insertBefore(node, null)` instead of also using
+         // `appendChild(node)`. (Using `undefined` is not allowed by all browsers so
+         // we are careful to use `null`.)
+         parentNode.insertBefore(childNode, referenceNode);
+       });
+       
+       function insertLazyTreeChildAt(parentNode, childTree, referenceNode) {
+         DOMLazyTree.insertTreeBefore(parentNode, childTree, referenceNode);
        }
        
-       /**
-        * Collect dispatches (must be entirely collected before dispatching - see unit
-        * tests). Lazily allocate the array to conserve memory.  We must loop through
-        * each event and perform the traversal for each one. We cannot perform a
-        * single traversal for the entire collection of events because each event may
-        * have a different target.
-        */
-       function accumulateTwoPhaseDispatchesSingle(event) {
-         if (event && event.dispatchConfig.phasedRegistrationNames) {
-           EventPluginHub.injection.getInstanceHandle().traverseTwoPhase(event.dispatchMarker, accumulateDirectionalDispatches, event);
+       function moveChild(parentNode, childNode, referenceNode) {
+         if (Array.isArray(childNode)) {
+           moveDelimitedText(parentNode, childNode[0], childNode[1], referenceNode);
+         } else {
+           insertChildAt(parentNode, childNode, referenceNode);
          }
        }
        
-       /**
-        * Same as `accumulateTwoPhaseDispatchesSingle`, but skips over the targetID.
-        */
-       function accumulateTwoPhaseDispatchesSingleSkipTarget(event) {
-         if (event && event.dispatchConfig.phasedRegistrationNames) {
-           EventPluginHub.injection.getInstanceHandle().traverseTwoPhaseSkipTarget(event.dispatchMarker, accumulateDirectionalDispatches, event);
+       function removeChild(parentNode, childNode) {
+         if (Array.isArray(childNode)) {
+           var closingComment = childNode[1];
+           childNode = childNode[0];
+           removeDelimitedText(parentNode, childNode, closingComment);
+           parentNode.removeChild(closingComment);
          }
+         parentNode.removeChild(childNode);
        }
        
-       /**
-        * Accumulates without regard to direction, does not look for phased
-        * registration names. Same as `accumulateDirectDispatchesSingle` but without
-        * requiring that the `dispatchMarker` be the same as the dispatched ID.
-        */
-       function accumulateDispatches(id, ignoredDirection, event) {
-         if (event && event.dispatchConfig.registrationName) {
-           var registrationName = event.dispatchConfig.registrationName;
-           var listener = getListener(id, registrationName);
-           if (listener) {
-             event._dispatchListeners = accumulateInto(event._dispatchListeners, listener);
-             event._dispatchIDs = accumulateInto(event._dispatchIDs, id);
+       function moveDelimitedText(parentNode, openingComment, closingComment, referenceNode) {
+         var node = openingComment;
+         while (true) {
+           var nextNode = node.nextSibling;
+           insertChildAt(parentNode, node, referenceNode);
+           if (node === closingComment) {
+             break;
            }
+           node = nextNode;
          }
        }
        
-       /**
-        * Accumulates dispatches on an `SyntheticEvent`, but only for the
-        * `dispatchMarker`.
-        * @param {SyntheticEvent} event
-        */
-       function accumulateDirectDispatchesSingle(event) {
-         if (event && event.dispatchConfig.registrationName) {
-           accumulateDispatches(event.dispatchMarker, null, event);
+       function removeDelimitedText(parentNode, startNode, closingComment) {
+         while (true) {
+           var node = startNode.nextSibling;
+           if (node === closingComment) {
+             // The closing comment is removed by ReactMultiChild.
+             break;
+           } else {
+             parentNode.removeChild(node);
+           }
          }
        }
        
-       function accumulateTwoPhaseDispatches(events) {
-         forEachAccumulated(events, accumulateTwoPhaseDispatchesSingle);
-       }
-       
-       function accumulateTwoPhaseDispatchesSkipTarget(events) {
-         forEachAccumulated(events, accumulateTwoPhaseDispatchesSingleSkipTarget);
-       }
+       function replaceDelimitedText(openingComment, closingComment, stringText) {
+         var parentNode = openingComment.parentNode;
+         var nodeAfterComment = openingComment.nextSibling;
+         if (nodeAfterComment === closingComment) {
+           // There are no text nodes between the opening and closing comments; insert
+           // a new one if stringText isn't empty.
+           if (stringText) {
+             insertChildAt(parentNode, document.createTextNode(stringText), nodeAfterComment);
+           }
+         } else {
+           if (stringText) {
+             // Set the text content of the first node after the opening comment, and
+             // remove all following nodes up until the closing comment.
+             setTextContent(nodeAfterComment, stringText);
+             removeDelimitedText(parentNode, nodeAfterComment, closingComment);
+           } else {
+             removeDelimitedText(parentNode, openingComment, closingComment);
+           }
+         }
        
-       function accumulateEnterLeaveDispatches(leave, enter, fromID, toID) {
-         EventPluginHub.injection.getInstanceHandle().traverseEnterLeave(fromID, toID, accumulateDispatches, leave, enter);
+         if (process.env.NODE_ENV !== 'production') {
+           ReactInstrumentation.debugTool.onHostOperation(ReactDOMComponentTree.getInstanceFromNode(openingComment)._debugID, 'replace text', stringText);
+         }
        }
        
-       function accumulateDirectDispatches(events) {
-         forEachAccumulated(events, accumulateDirectDispatchesSingle);
+       var dangerouslyReplaceNodeWithMarkup = Danger.dangerouslyReplaceNodeWithMarkup;
+       if (process.env.NODE_ENV !== 'production') {
+         dangerouslyReplaceNodeWithMarkup = function (oldChild, markup, prevInstance) {
+           Danger.dangerouslyReplaceNodeWithMarkup(oldChild, markup);
+           if (prevInstance._debugID !== 0) {
+             ReactInstrumentation.debugTool.onHostOperation(prevInstance._debugID, 'replace with', markup.toString());
+           } else {
+             var nextInstance = ReactDOMComponentTree.getInstanceFromNode(markup.node);
+             if (nextInstance._debugID !== 0) {
+               ReactInstrumentation.debugTool.onHostOperation(nextInstance._debugID, 'mount', markup.toString());
+             }
+           }
+         };
        }
        
        /**
-        * A small set of propagation patterns, each of which will accept a small amount
-        * of information, and generate a set of "dispatch ready event objects" - which
-        * are sets of events that have already been annotated with a set of dispatched
-        * listener functions/ids. The API is designed this way to discourage these
-        * propagation strategies from actually executing the dispatches, since we
-        * always want to collect the entire set of dispatches before executing event a
-        * single one.
-        *
-        * @constructor EventPropagators
+        * Operations for updating with DOM children.
         */
-       var EventPropagators = {
-         accumulateTwoPhaseDispatches: accumulateTwoPhaseDispatches,
-         accumulateTwoPhaseDispatchesSkipTarget: accumulateTwoPhaseDispatchesSkipTarget,
-         accumulateDirectDispatches: accumulateDirectDispatches,
-         accumulateEnterLeaveDispatches: accumulateEnterLeaveDispatches
+       var DOMChildrenOperations = {
+       
+         dangerouslyReplaceNodeWithMarkup: dangerouslyReplaceNodeWithMarkup,
+       
+         replaceDelimitedText: replaceDelimitedText,
+       
+         /**
+          * Updates a component's children by processing a series of updates. The
+          * update configurations are each expected to have a `parentNode` property.
+          *
+          * @param {array<object>} updates List of update configurations.
+          * @internal
+          */
+         processUpdates: function (parentNode, updates) {
+           if (process.env.NODE_ENV !== 'production') {
+             var parentNodeDebugID = ReactDOMComponentTree.getInstanceFromNode(parentNode)._debugID;
+           }
+       
+           for (var k = 0; k < updates.length; k++) {
+             var update = updates[k];
+             switch (update.type) {
+               case ReactMultiChildUpdateTypes.INSERT_MARKUP:
+                 insertLazyTreeChildAt(parentNode, update.content, getNodeAfter(parentNode, update.afterNode));
+                 if (process.env.NODE_ENV !== 'production') {
+                   ReactInstrumentation.debugTool.onHostOperation(parentNodeDebugID, 'insert child', { toIndex: update.toIndex, content: update.content.toString() });
+                 }
+                 break;
+               case ReactMultiChildUpdateTypes.MOVE_EXISTING:
+                 moveChild(parentNode, update.fromNode, getNodeAfter(parentNode, update.afterNode));
+                 if (process.env.NODE_ENV !== 'production') {
+                   ReactInstrumentation.debugTool.onHostOperation(parentNodeDebugID, 'move child', { fromIndex: update.fromIndex, toIndex: update.toIndex });
+                 }
+                 break;
+               case ReactMultiChildUpdateTypes.SET_MARKUP:
+                 setInnerHTML(parentNode, update.content);
+                 if (process.env.NODE_ENV !== 'production') {
+                   ReactInstrumentation.debugTool.onHostOperation(parentNodeDebugID, 'replace children', update.content.toString());
+                 }
+                 break;
+               case ReactMultiChildUpdateTypes.TEXT_CONTENT:
+                 setTextContent(parentNode, update.content);
+                 if (process.env.NODE_ENV !== 'production') {
+                   ReactInstrumentation.debugTool.onHostOperation(parentNodeDebugID, 'replace text', update.content.toString());
+                 }
+                 break;
+               case ReactMultiChildUpdateTypes.REMOVE_NODE:
+                 removeChild(parentNode, update.fromNode);
+                 if (process.env.NODE_ENV !== 'production') {
+                   ReactInstrumentation.debugTool.onHostOperation(parentNodeDebugID, 'remove child', { fromIndex: update.fromIndex });
+                 }
+                 break;
+             }
+           }
+         }
+       
        };
        
-       module.exports = EventPropagators;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
+       module.exports = DOMChildrenOperations;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
 
 /***/ },
-/* 76 */
+/* 85 */
 /***/ function(module, exports, __webpack_require__) {
 
        /**
-        * Copyright 2013-2015, Facebook, Inc.
+        * Copyright 2015-present, 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.
         *
-        * @providesModule FallbackCompositionState
-        * @typechecks static-only
+        * @providesModule DOMLazyTree
         */
        
        'use strict';
        
-       var PooledClass = __webpack_require__(58);
+       var DOMNamespaces = __webpack_require__(86);
+       var setInnerHTML = __webpack_require__(87);
+       
+       var createMicrosoftUnsafeLocalFunction = __webpack_require__(88);
+       var setTextContent = __webpack_require__(89);
        
-       var assign = __webpack_require__(41);
-       var getTextContentAccessor = __webpack_require__(77);
+       var ELEMENT_NODE_TYPE = 1;
+       var DOCUMENT_FRAGMENT_NODE_TYPE = 11;
        
        /**
-        * This helper class stores information about text content of a target node,
-        * allowing comparison of content before and after a given event.
+        * In IE (8-11) and Edge, appending nodes with no children is dramatically
+        * faster than appending a full subtree, so we essentially queue up the
+        * .appendChild calls here and apply them so each node is added to its parent
+        * before any children are added.
         *
-        * Identify the node where selection currently begins, then observe
-        * both its text content and its current position in the DOM. Since the
-        * browser may natively replace the target node during composition, we can
-        * use its position to find its replacement.
+        * In other browsers, doing so is slower or neutral compared to the other order
+        * (in Firefox, twice as slow) so we only do this inversion in IE.
         *
-        * @param {DOMEventTarget} root
+        * See https://github.com/spicyj/innerhtml-vs-createelement-vs-clonenode.
         */
-       function FallbackCompositionState(root) {
-         this._root = root;
-         this._startText = this.getText();
-         this._fallbackText = null;
-       }
-       
-       assign(FallbackCompositionState.prototype, {
-         destructor: function () {
-           this._root = null;
-           this._startText = null;
-           this._fallbackText = null;
-         },
+       var enableLazy = typeof document !== 'undefined' && typeof document.documentMode === 'number' || typeof navigator !== 'undefined' && typeof navigator.userAgent === 'string' && /\bEdge\/\d/.test(navigator.userAgent);
        
-         /**
-          * Get current text of input.
-          *
-          * @return {string}
-          */
-         getText: function () {
-           if ('value' in this._root) {
-             return this._root.value;
+       function insertTreeChildren(tree) {
+         if (!enableLazy) {
+           return;
+         }
+         var node = tree.node;
+         var children = tree.children;
+         if (children.length) {
+           for (var i = 0; i < children.length; i++) {
+             insertTreeBefore(node, children[i], null);
            }
-           return this._root[getTextContentAccessor()];
-         },
+         } else if (tree.html != null) {
+           setInnerHTML(node, tree.html);
+         } else if (tree.text != null) {
+           setTextContent(node, tree.text);
+         }
+       }
        
-         /**
-          * Determine the differing substring between the initially stored
-          * text content and the current content.
-          *
-          * @return {string}
-          */
-         getData: function () {
-           if (this._fallbackText) {
-             return this._fallbackText;
-           }
+       var insertTreeBefore = createMicrosoftUnsafeLocalFunction(function (parentNode, tree, referenceNode) {
+         // DocumentFragments aren't actually part of the DOM after insertion so
+         // appending children won't update the DOM. We need to ensure the fragment
+         // is properly populated first, breaking out of our lazy approach for just
+         // this level. Also, some <object> plugins (like Flash Player) will read
+         // <param> nodes immediately upon insertion into the DOM, so <object>
+         // must also be populated prior to insertion into the DOM.
+         if (tree.node.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE || tree.node.nodeType === ELEMENT_NODE_TYPE && tree.node.nodeName.toLowerCase() === 'object' && (tree.node.namespaceURI == null || tree.node.namespaceURI === DOMNamespaces.html)) {
+           insertTreeChildren(tree);
+           parentNode.insertBefore(tree.node, referenceNode);
+         } else {
+           parentNode.insertBefore(tree.node, referenceNode);
+           insertTreeChildren(tree);
+         }
+       });
        
-           var start;
-           var startValue = this._startText;
-           var startLength = startValue.length;
-           var end;
-           var endValue = this.getText();
-           var endLength = endValue.length;
+       function replaceChildWithTree(oldNode, newTree) {
+         oldNode.parentNode.replaceChild(newTree.node, oldNode);
+         insertTreeChildren(newTree);
+       }
        
-           for (start = 0; start < startLength; start++) {
-             if (startValue[start] !== endValue[start]) {
-               break;
-             }
-           }
+       function queueChild(parentTree, childTree) {
+         if (enableLazy) {
+           parentTree.children.push(childTree);
+         } else {
+           parentTree.node.appendChild(childTree.node);
+         }
+       }
        
-           var minEnd = startLength - start;
-           for (end = 1; end <= minEnd; end++) {
-             if (startValue[startLength - end] !== endValue[endLength - end]) {
-               break;
-             }
-           }
+       function queueHTML(tree, html) {
+         if (enableLazy) {
+           tree.html = html;
+         } else {
+           setInnerHTML(tree.node, html);
+         }
+       }
        
-           var sliceTail = end > 1 ? 1 - end : undefined;
-           this._fallbackText = endValue.slice(start, sliceTail);
-           return this._fallbackText;
+       function queueText(tree, text) {
+         if (enableLazy) {
+           tree.text = text;
+         } else {
+           setTextContent(tree.node, text);
          }
-       });
+       }
        
-       PooledClass.addPoolingTo(FallbackCompositionState);
+       function toString() {
+         return this.node.nodeName;
+       }
        
-       module.exports = FallbackCompositionState;
+       function DOMLazyTree(node) {
+         return {
+           node: node,
+           children: [],
+           html: null,
+           text: null,
+           toString: toString
+         };
+       }
+       
+       DOMLazyTree.insertTreeBefore = insertTreeBefore;
+       DOMLazyTree.replaceChildWithTree = replaceChildWithTree;
+       DOMLazyTree.queueChild = queueChild;
+       DOMLazyTree.queueHTML = queueHTML;
+       DOMLazyTree.queueText = queueText;
+       
+       module.exports = DOMLazyTree;
 
 /***/ },
-/* 77 */
-/***/ function(module, exports, __webpack_require__) {
+/* 86 */
+/***/ function(module, exports) {
 
        /**
-        * Copyright 2013-2015, Facebook, Inc.
+        * Copyright 2013-present, 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.
         *
-        * @providesModule getTextContentAccessor
+        * @providesModule DOMNamespaces
         */
        
        'use strict';
        
-       var ExecutionEnvironment = __webpack_require__(11);
-       
-       var contentKey = null;
-       
-       /**
-        * Gets the key used to access text content on a DOM node.
-        *
-        * @return {?string} Key used to access text content.
-        * @internal
-        */
-       function getTextContentAccessor() {
-         if (!contentKey && ExecutionEnvironment.canUseDOM) {
-           // Prefer textContent to innerText because many browsers support both but
-           // SVG <text> elements don't support innerText even when <div> does.
-           contentKey = 'textContent' in document.documentElement ? 'textContent' : 'innerText';
-         }
-         return contentKey;
-       }
+       var DOMNamespaces = {
+         html: 'http://www.w3.org/1999/xhtml',
+         mathml: 'http://www.w3.org/1998/Math/MathML',
+         svg: 'http://www.w3.org/2000/svg'
+       };
        
-       module.exports = getTextContentAccessor;
+       module.exports = DOMNamespaces;
 
 /***/ },
-/* 78 */
+/* 87 */
 /***/ function(module, exports, __webpack_require__) {
 
        /**
-        * Copyright 2013-2015, Facebook, Inc.
+        * Copyright 2013-present, 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.
         *
-        * @providesModule SyntheticCompositionEvent
-        * @typechecks static-only
+        * @providesModule setInnerHTML
         */
        
        'use strict';
        
-       var SyntheticEvent = __webpack_require__(79);
+       var ExecutionEnvironment = __webpack_require__(52);
+       var DOMNamespaces = __webpack_require__(86);
        
-       /**
-        * @interface Event
-        * @see http://www.w3.org/TR/DOM-Level-3-Events/#events-compositionevents
-        */
-       var CompositionEventInterface = {
-         data: null
-       };
+       var WHITESPACE_TEST = /^[ \r\n\t\f]/;
+       var NONVISIBLE_TEST = /<(!--|link|noscript|meta|script|style)[ \r\n\t\f\/>]/;
+       
+       var createMicrosoftUnsafeLocalFunction = __webpack_require__(88);
+       
+       // SVG temp container for IE lacking innerHTML
+       var reusableSVGContainer;
        
        /**
-        * @param {object} dispatchConfig Configuration used to dispatch this event.
-        * @param {string} dispatchMarker Marker identifying the event target.
-        * @param {object} nativeEvent Native browser event.
-        * @extends {SyntheticUIEvent}
+        * Set the innerHTML property of a node, ensuring that whitespace is preserved
+        * even in IE8.
+        *
+        * @param {DOMElement} node
+        * @param {string} html
+        * @internal
         */
-       function SyntheticCompositionEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
-         SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
-       }
+       var setInnerHTML = createMicrosoftUnsafeLocalFunction(function (node, html) {
+         // IE does not have innerHTML for SVG nodes, so instead we inject the
+         // new markup in a temp node and then move the child nodes across into
+         // the target node
+         if (node.namespaceURI === DOMNamespaces.svg && !('innerHTML' in node)) {
+           reusableSVGContainer = reusableSVGContainer || document.createElement('div');
+           reusableSVGContainer.innerHTML = '<svg>' + html + '</svg>';
+           var newNodes = reusableSVGContainer.firstChild.childNodes;
+           for (var i = 0; i < newNodes.length; i++) {
+             node.appendChild(newNodes[i]);
+           }
+         } else {
+           node.innerHTML = html;
+         }
+       });
        
-       SyntheticEvent.augmentClass(SyntheticCompositionEvent, CompositionEventInterface);
+       if (ExecutionEnvironment.canUseDOM) {
+         // IE8: When updating a just created node with innerHTML only leading
+         // whitespace is removed. When updating an existing node with innerHTML
+         // whitespace in root TextNodes is also collapsed.
+         // @see quirksmode.org/bugreports/archives/2004/11/innerhtml_and_t.html
        
-       module.exports = SyntheticCompositionEvent;
+         // Feature detection; only IE8 is known to behave improperly like this.
+         var testElement = document.createElement('div');
+         testElement.innerHTML = ' ';
+         if (testElement.innerHTML === '') {
+           setInnerHTML = function (node, html) {
+             // Magic theory: IE8 supposedly differentiates between added and updated
+             // nodes when processing innerHTML, innerHTML on updated nodes suffers
+             // from worse whitespace behavior. Re-adding a node like this triggers
+             // the initial and more favorable whitespace behavior.
+             // TODO: What to do on a detached node?
+             if (node.parentNode) {
+               node.parentNode.replaceChild(node, node);
+             }
+       
+             // We also implement a workaround for non-visible tags disappearing into
+             // thin air on IE8, this only happens if there is no visible text
+             // in-front of the non-visible tags. Piggyback on the whitespace fix
+             // and simply check if any non-visible tags appear in the source.
+             if (WHITESPACE_TEST.test(html) || html[0] === '<' && NONVISIBLE_TEST.test(html)) {
+               // Recover leading whitespace by temporarily prepending any character.
+               // \uFEFF has the potential advantage of being zero-width/invisible.
+               // UglifyJS drops U+FEFF chars when parsing, so use String.fromCharCode
+               // in hopes that this is preserved even if "\uFEFF" is transformed to
+               // the actual Unicode character (by Babel, for example).
+               // https://github.com/mishoo/UglifyJS2/blob/v2.4.20/lib/parse.js#L216
+               node.innerHTML = String.fromCharCode(0xFEFF) + html;
+       
+               // deleteData leaves an empty `TextNode` which offsets the index of all
+               // children. Definitely want to avoid this.
+               var textNode = node.firstChild;
+               if (textNode.data.length === 1) {
+                 node.removeChild(textNode);
+               } else {
+                 textNode.deleteData(0, 1);
+               }
+             } else {
+               node.innerHTML = html;
+             }
+           };
+         }
+         testElement = null;
+       }
+       
+       module.exports = setInnerHTML;
 
 /***/ },
-/* 79 */
-/***/ function(module, exports, __webpack_require__) {
+/* 88 */
+/***/ function(module, exports) {
 
-       /* WEBPACK VAR INJECTION */(function(process) {/**
-        * Copyright 2013-2015, Facebook, Inc.
+       /**
+        * Copyright 2013-present, 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.
         *
-        * @providesModule SyntheticEvent
-        * @typechecks static-only
+        * @providesModule createMicrosoftUnsafeLocalFunction
         */
        
-       'use strict';
-       
-       var PooledClass = __webpack_require__(58);
+       /* globals MSApp */
        
-       var assign = __webpack_require__(41);
-       var emptyFunction = __webpack_require__(17);
-       var warning = __webpack_require__(27);
+       'use strict';
        
        /**
-        * @interface Event
-        * @see http://www.w3.org/TR/DOM-Level-3-Events/
+        * Create a function which has 'unsafe' privileges (required by windows8 apps)
         */
-       var EventInterface = {
-         type: null,
-         // currentTarget is set when dispatching; no use in copying it here
-         currentTarget: emptyFunction.thatReturnsNull,
-         eventPhase: null,
-         bubbles: null,
-         cancelable: null,
-         timeStamp: function (event) {
-           return event.timeStamp || Date.now();
-         },
-         defaultPrevented: null,
-         isTrusted: null
+       
+       var createMicrosoftUnsafeLocalFunction = function (func) {
+         if (typeof MSApp !== 'undefined' && MSApp.execUnsafeLocalFunction) {
+           return function (arg0, arg1, arg2, arg3) {
+             MSApp.execUnsafeLocalFunction(function () {
+               return func(arg0, arg1, arg2, arg3);
+             });
+           };
+         } else {
+           return func;
+         }
        };
        
+       module.exports = createMicrosoftUnsafeLocalFunction;
+
+/***/ },
+/* 89 */
+/***/ function(module, exports, __webpack_require__) {
+
        /**
-        * Synthetic events are dispatched by event plugins, typically in response to a
-        * top-level event delegation handler.
-        *
-        * These systems should generally use pooling to reduce the frequency of garbage
-        * collection. The system should check `isPersistent` to determine whether the
-        * event should be released into the pool after being dispatched. Users that
-        * need a persisted event should invoke `persist`.
+        * Copyright 2013-present, Facebook, Inc.
+        * All rights reserved.
         *
-        * Synthetic events (and subclasses) implement the DOM Level 3 Events API by
-        * normalizing browser quirks. Subclasses do not necessarily have to implement a
-        * DOM interface; custom application-specific events can also subclass this.
+        * 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.
         *
-        * @param {object} dispatchConfig Configuration used to dispatch this event.
-        * @param {string} dispatchMarker Marker identifying the event target.
-        * @param {object} nativeEvent Native browser event.
+        * @providesModule setTextContent
         */
-       function SyntheticEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
-         this.dispatchConfig = dispatchConfig;
-         this.dispatchMarker = dispatchMarker;
-         this.nativeEvent = nativeEvent;
-         this.target = nativeEventTarget;
-         this.currentTarget = nativeEventTarget;
-       
-         var Interface = this.constructor.Interface;
-         for (var propName in Interface) {
-           if (!Interface.hasOwnProperty(propName)) {
-             continue;
-           }
-           var normalize = Interface[propName];
-           if (normalize) {
-             this[propName] = normalize(nativeEvent);
-           } else {
-             this[propName] = nativeEvent[propName];
-           }
-         }
-       
-         var defaultPrevented = nativeEvent.defaultPrevented != null ? nativeEvent.defaultPrevented : nativeEvent.returnValue === false;
-         if (defaultPrevented) {
-           this.isDefaultPrevented = emptyFunction.thatReturnsTrue;
-         } else {
-           this.isDefaultPrevented = emptyFunction.thatReturnsFalse;
-         }
-         this.isPropagationStopped = emptyFunction.thatReturnsFalse;
-       }
-       
-       assign(SyntheticEvent.prototype, {
-       
-         preventDefault: function () {
-           this.defaultPrevented = true;
-           var event = this.nativeEvent;
-           if (process.env.NODE_ENV !== 'production') {
-             process.env.NODE_ENV !== 'production' ? warning(event, 'This synthetic event is reused for performance reasons. If you\'re ' + 'seeing this, you\'re calling `preventDefault` on a ' + 'released/nullified synthetic event. This is a no-op. See ' + 'https://fb.me/react-event-pooling for more information.') : undefined;
-           }
-           if (!event) {
-             return;
-           }
-       
-           if (event.preventDefault) {
-             event.preventDefault();
-           } else {
-             event.returnValue = false;
-           }
-           this.isDefaultPrevented = emptyFunction.thatReturnsTrue;
-         },
-       
-         stopPropagation: function () {
-           var event = this.nativeEvent;
-           if (process.env.NODE_ENV !== 'production') {
-             process.env.NODE_ENV !== 'production' ? warning(event, 'This synthetic event is reused for performance reasons. If you\'re ' + 'seeing this, you\'re calling `stopPropagation` on a ' + 'released/nullified synthetic event. This is a no-op. See ' + 'https://fb.me/react-event-pooling for more information.') : undefined;
-           }
-           if (!event) {
-             return;
-           }
-       
-           if (event.stopPropagation) {
-             event.stopPropagation();
-           } else {
-             event.cancelBubble = true;
-           }
-           this.isPropagationStopped = emptyFunction.thatReturnsTrue;
-         },
-       
-         /**
-          * We release all dispatched `SyntheticEvent`s after each event loop, adding
-          * them back into the pool. This allows a way to hold onto a reference that
-          * won't be added back into the pool.
-          */
-         persist: function () {
-           this.isPersistent = emptyFunction.thatReturnsTrue;
-         },
-       
-         /**
-          * Checks if this event should be released back into the pool.
-          *
-          * @return {boolean} True if this should not be released, false otherwise.
-          */
-         isPersistent: emptyFunction.thatReturnsFalse,
-       
-         /**
-          * `PooledClass` looks for `destructor` on each instance it releases.
-          */
-         destructor: function () {
-           var Interface = this.constructor.Interface;
-           for (var propName in Interface) {
-             this[propName] = null;
-           }
-           this.dispatchConfig = null;
-           this.dispatchMarker = null;
-           this.nativeEvent = null;
-         }
        
-       });
+       'use strict';
        
-       SyntheticEvent.Interface = EventInterface;
+       var ExecutionEnvironment = __webpack_require__(52);
+       var escapeTextContentForBrowser = __webpack_require__(90);
+       var setInnerHTML = __webpack_require__(87);
        
        /**
-        * Helper to reduce boilerplate when creating subclasses.
+        * Set the textContent property of a node, ensuring that whitespace is preserved
+        * even in IE8. innerText is a poor substitute for textContent and, among many
+        * issues, inserts <br> instead of the literal newline chars. innerHTML behaves
+        * as it should.
         *
-        * @param {function} Class
-        * @param {?object} Interface
+        * @param {DOMElement} node
+        * @param {string} text
+        * @internal
         */
-       SyntheticEvent.augmentClass = function (Class, Interface) {
-         var Super = this;
-       
-         var prototype = Object.create(Super.prototype);
-         assign(prototype, Class.prototype);
-         Class.prototype = prototype;
-         Class.prototype.constructor = Class;
-       
-         Class.Interface = assign({}, Super.Interface, Interface);
-         Class.augmentClass = Super.augmentClass;
+       var setTextContent = function (node, text) {
+         if (text) {
+           var firstChild = node.firstChild;
        
-         PooledClass.addPoolingTo(Class, PooledClass.fourArgumentPooler);
+           if (firstChild && firstChild === node.lastChild && firstChild.nodeType === 3) {
+             firstChild.nodeValue = text;
+             return;
+           }
+         }
+         node.textContent = text;
        };
        
-       PooledClass.addPoolingTo(SyntheticEvent, PooledClass.fourArgumentPooler);
+       if (ExecutionEnvironment.canUseDOM) {
+         if (!('textContent' in document.documentElement)) {
+           setTextContent = function (node, text) {
+             setInnerHTML(node, escapeTextContentForBrowser(text));
+           };
+         }
+       }
        
-       module.exports = SyntheticEvent;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
+       module.exports = setTextContent;
 
 /***/ },
-/* 80 */
-/***/ function(module, exports, __webpack_require__) {
+/* 90 */
+/***/ function(module, exports) {
 
        /**
-        * Copyright 2013-2015, Facebook, Inc.
+        * Copyright 2016-present, 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.
         *
-        * @providesModule SyntheticInputEvent
-        * @typechecks static-only
+        * Based on the escape-html library, which is used under the MIT License below:
+        *
+        * Copyright (c) 2012-2013 TJ Holowaychuk
+        * Copyright (c) 2015 Andreas Lubbe
+        * Copyright (c) 2015 Tiancheng "Timothy" Gu
+        *
+        * Permission is hereby granted, free of charge, to any person obtaining
+        * a copy of this software and associated documentation files (the
+        * 'Software'), to deal in the Software without restriction, including
+        * without limitation the rights to use, copy, modify, merge, publish,
+        * distribute, sublicense, and/or sell copies of the Software, and to
+        * permit persons to whom the Software is furnished to do so, subject to
+        * the following conditions:
+        *
+        * The above copyright notice and this permission notice shall be
+        * included in all copies or substantial portions of the Software.
+        *
+        * THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+        * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+        * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+        * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+        * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+        * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+        * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+        *
+        * @providesModule escapeTextContentForBrowser
         */
        
        'use strict';
        
-       var SyntheticEvent = __webpack_require__(79);
-       
+       // code copied and modified from escape-html
        /**
-        * @interface Event
-        * @see http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105
-        *      /#events-inputevents
+        * Module variables.
+        * @private
         */
-       var InputEventInterface = {
-         data: null
-       };
+       
+       var matchHtmlRegExp = /["'&<>]/;
        
        /**
-        * @param {object} dispatchConfig Configuration used to dispatch this event.
-        * @param {string} dispatchMarker Marker identifying the event target.
-        * @param {object} nativeEvent Native browser event.
-        * @extends {SyntheticUIEvent}
+        * Escape special characters in the given string of html.
+        *
+        * @param  {string} string The string to escape for inserting into HTML
+        * @return {string}
+        * @public
         */
-       function SyntheticInputEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
-         SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
+       
+       function escapeHtml(string) {
+         var str = '' + string;
+         var match = matchHtmlRegExp.exec(str);
+       
+         if (!match) {
+           return str;
+         }
+       
+         var escape;
+         var html = '';
+         var index = 0;
+         var lastIndex = 0;
+       
+         for (index = match.index; index < str.length; index++) {
+           switch (str.charCodeAt(index)) {
+             case 34:
+               // "
+               escape = '&quot;';
+               break;
+             case 38:
+               // &
+               escape = '&amp;';
+               break;
+             case 39:
+               // '
+               escape = '&#x27;'; // modified from escape-html; used to be '&#39'
+               break;
+             case 60:
+               // <
+               escape = '&lt;';
+               break;
+             case 62:
+               // >
+               escape = '&gt;';
+               break;
+             default:
+               continue;
+           }
+       
+           if (lastIndex !== index) {
+             html += str.substring(lastIndex, index);
+           }
+       
+           lastIndex = index + 1;
+           html += escape;
+         }
+       
+         return lastIndex !== index ? html + str.substring(lastIndex, index) : html;
        }
+       // end code copied and modified from escape-html
        
-       SyntheticEvent.augmentClass(SyntheticInputEvent, InputEventInterface);
+       /**
+        * Escapes text to prevent scripting attacks.
+        *
+        * @param {*} text Text value to escape.
+        * @return {string} An escaped string.
+        */
+       function escapeTextContentForBrowser(text) {
+         if (typeof text === 'boolean' || typeof text === 'number') {
+           // this shortcircuit helps perf for types that we know will never have
+           // special characters, especially given that this function is used often
+           // for numeric dom ids.
+           return '' + text;
+         }
+         return escapeHtml(text);
+       }
        
-       module.exports = SyntheticInputEvent;
+       module.exports = escapeTextContentForBrowser;
 
 /***/ },
-/* 81 */
-/***/ function(module, exports) {
+/* 91 */
+/***/ function(module, exports, __webpack_require__) {
 
-       /**
-        * Copyright 2013-2015, Facebook, Inc.
+       /* WEBPACK VAR INJECTION */(function(process) {/**
+        * Copyright 2013-present, 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.
         *
-        * @providesModule keyOf
+        * @providesModule Danger
         */
        
-       /**
-        * Allows extraction of a minified key. Let's the build system minify keys
-        * without losing the ability to dynamically use key strings as values
-        * themselves. Pass in an object with a single key/val pair and it will return
-        * you the string key of that single record. Suppose you want to grab the
-        * value for a key 'className' inside of an object. Key/val minification may
-        * have aliased that key to be 'xa12'. keyOf({className: null}) will return
-        * 'xa12' in that case. Resolve keys you want to use once at startup time, then
-        * reuse those resolutions.
-        */
-       "use strict";
+       'use strict';
        
-       var keyOf = function (oneKeyObj) {
-         var key;
-         for (key in oneKeyObj) {
-           if (!oneKeyObj.hasOwnProperty(key)) {
-             continue;
+       var _prodInvariant = __webpack_require__(9);
+       
+       var DOMLazyTree = __webpack_require__(85);
+       var ExecutionEnvironment = __webpack_require__(52);
+       
+       var createNodesFromMarkup = __webpack_require__(92);
+       var emptyFunction = __webpack_require__(14);
+       var invariant = __webpack_require__(10);
+       
+       var Danger = {
+       
+         /**
+          * Replaces a node with a string of markup at its current position within its
+          * parent. The markup must render into a single root node.
+          *
+          * @param {DOMElement} oldChild Child node to replace.
+          * @param {string} markup Markup to render in place of the child node.
+          * @internal
+          */
+         dangerouslyReplaceNodeWithMarkup: function (oldChild, markup) {
+           !ExecutionEnvironment.canUseDOM ? process.env.NODE_ENV !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Cannot render markup in a worker thread. Make sure `window` and `document` are available globally before requiring React when unit testing or use ReactDOMServer.renderToString() for server rendering.') : _prodInvariant('56') : void 0;
+           !markup ? process.env.NODE_ENV !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Missing markup.') : _prodInvariant('57') : void 0;
+           !(oldChild.nodeName !== 'HTML') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Cannot replace markup of the <html> node. This is because browser quirks make this unreliable and/or slow. If you want to render to the root you must use server rendering. See ReactDOMServer.renderToString().') : _prodInvariant('58') : void 0;
+       
+           if (typeof markup === 'string') {
+             var newChild = createNodesFromMarkup(markup, emptyFunction)[0];
+             oldChild.parentNode.replaceChild(newChild, oldChild);
+           } else {
+             DOMLazyTree.replaceChildWithTree(oldChild, markup);
            }
-           return key;
          }
-         return null;
+       
        };
        
-       module.exports = keyOf;
+       module.exports = Danger;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
 
 /***/ },
-/* 82 */
+/* 92 */
 /***/ function(module, exports, __webpack_require__) {
 
+       /* WEBPACK VAR INJECTION */(function(process) {'use strict';
+       
        /**
-        * Copyright 2013-2015, Facebook, Inc.
+        * Copyright (c) 2013-present, 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.
         *
-        * @providesModule ChangeEventPlugin
+        * @typechecks
         */
        
-       'use strict';
-       
-       var EventConstants = __webpack_require__(32);
-       var EventPluginHub = __webpack_require__(33);
-       var EventPropagators = __webpack_require__(75);
-       var ExecutionEnvironment = __webpack_require__(11);
-       var ReactUpdates = __webpack_require__(56);
-       var SyntheticEvent = __webpack_require__(79);
-       
-       var getEventTarget = __webpack_require__(83);
-       var isEventSupported = __webpack_require__(42);
-       var isTextInputElement = __webpack_require__(84);
-       var keyOf = __webpack_require__(81);
+       /*eslint-disable fb-www/unsafe-html*/
        
-       var topLevelTypes = EventConstants.topLevelTypes;
+       var ExecutionEnvironment = __webpack_require__(52);
        
-       var eventTypes = {
-         change: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onChange: null }),
-             captured: keyOf({ onChangeCapture: null })
-           },
-           dependencies: [topLevelTypes.topBlur, topLevelTypes.topChange, topLevelTypes.topClick, topLevelTypes.topFocus, topLevelTypes.topInput, topLevelTypes.topKeyDown, topLevelTypes.topKeyUp, topLevelTypes.topSelectionChange]
-         }
-       };
+       var createArrayFromMixed = __webpack_require__(93);
+       var getMarkupWrap = __webpack_require__(94);
+       var invariant = __webpack_require__(10);
        
        /**
-        * For IE shims
+        * Dummy container used to render all markup.
         */
-       var activeElement = null;
-       var activeElementID = null;
-       var activeElementValue = null;
-       var activeElementValueProp = null;
+       var dummyNode = ExecutionEnvironment.canUseDOM ? document.createElement('div') : null;
        
        /**
-        * SECTION: handle `change` event
+        * Pattern used by `getNodeName`.
         */
-       function shouldUseChangeEvent(elem) {
-         var nodeName = elem.nodeName && elem.nodeName.toLowerCase();
-         return nodeName === 'select' || nodeName === 'input' && elem.type === 'file';
-       }
-       
-       var doesChangeEventBubble = false;
-       if (ExecutionEnvironment.canUseDOM) {
-         // See `handleChange` comment below
-         doesChangeEventBubble = isEventSupported('change') && (!('documentMode' in document) || document.documentMode > 8);
-       }
-       
-       function manualDispatchChangeEvent(nativeEvent) {
-         var event = SyntheticEvent.getPooled(eventTypes.change, activeElementID, nativeEvent, getEventTarget(nativeEvent));
-         EventPropagators.accumulateTwoPhaseDispatches(event);
+       var nodeNamePattern = /^\s*<(\w+)/;
        
-         // If change and propertychange bubbled, we'd just bind to it like all the
-         // other events and have it go through ReactBrowserEventEmitter. Since it
-         // doesn't, we manually listen for the events and so we have to enqueue and
-         // process the abstract event manually.
-         //
-         // Batching is necessary here in order to ensure that all event handlers run
-         // before the next rerender (including event handlers attached to ancestor
-         // elements instead of directly on the input). Without this, controlled
-         // components don't work properly in conjunction with event bubbling because
-         // the component is rerendered and the value reverted before all the event
-         // handlers can run. See https://github.com/facebook/react/issues/708.
-         ReactUpdates.batchedUpdates(runEventInBatch, event);
+       /**
+        * Extracts the `nodeName` of the first element in a string of markup.
+        *
+        * @param {string} markup String of markup.
+        * @return {?string} Node name of the supplied markup.
+        */
+       function getNodeName(markup) {
+         var nodeNameMatch = markup.match(nodeNamePattern);
+         return nodeNameMatch && nodeNameMatch[1].toLowerCase();
        }
        
-       function runEventInBatch(event) {
-         EventPluginHub.enqueueEvents(event);
-         EventPluginHub.processEventQueue(false);
-       }
+       /**
+        * Creates an array containing the nodes rendered from the supplied markup. The
+        * optionally supplied `handleScript` function will be invoked once for each
+        * <script> element that is rendered. If no `handleScript` function is supplied,
+        * an exception is thrown if any <script> elements are rendered.
+        *
+        * @param {string} markup A string of valid HTML markup.
+        * @param {?function} handleScript Invoked once for each rendered <script>.
+        * @return {array<DOMElement|DOMTextNode>} An array of rendered nodes.
+        */
+       function createNodesFromMarkup(markup, handleScript) {
+         var node = dummyNode;
+         !!!dummyNode ? process.env.NODE_ENV !== 'production' ? invariant(false, 'createNodesFromMarkup dummy not initialized') : invariant(false) : void 0;
+         var nodeName = getNodeName(markup);
        
-       function startWatchingForChangeEventIE8(target, targetID) {
-         activeElement = target;
-         activeElementID = targetID;
-         activeElement.attachEvent('onchange', manualDispatchChangeEvent);
-       }
+         var wrap = nodeName && getMarkupWrap(nodeName);
+         if (wrap) {
+           node.innerHTML = wrap[1] + markup + wrap[2];
        
-       function stopWatchingForChangeEventIE8() {
-         if (!activeElement) {
-           return;
+           var wrapDepth = wrap[0];
+           while (wrapDepth--) {
+             node = node.lastChild;
+           }
+         } else {
+           node.innerHTML = markup;
          }
-         activeElement.detachEvent('onchange', manualDispatchChangeEvent);
-         activeElement = null;
-         activeElementID = null;
-       }
        
-       function getTargetIDForChangeEvent(topLevelType, topLevelTarget, topLevelTargetID) {
-         if (topLevelType === topLevelTypes.topChange) {
-           return topLevelTargetID;
-         }
-       }
-       function handleEventsForChangeEventIE8(topLevelType, topLevelTarget, topLevelTargetID) {
-         if (topLevelType === topLevelTypes.topFocus) {
-           // stopWatching() should be a noop here but we call it just in case we
-           // missed a blur event somehow.
-           stopWatchingForChangeEventIE8();
-           startWatchingForChangeEventIE8(topLevelTarget, topLevelTargetID);
-         } else if (topLevelType === topLevelTypes.topBlur) {
-           stopWatchingForChangeEventIE8();
+         var scripts = node.getElementsByTagName('script');
+         if (scripts.length) {
+           !handleScript ? process.env.NODE_ENV !== 'production' ? invariant(false, 'createNodesFromMarkup(...): Unexpected <script> element rendered.') : invariant(false) : void 0;
+           createArrayFromMixed(scripts).forEach(handleScript);
          }
-       }
        
-       /**
-        * SECTION: handle `input` event
-        */
-       var isInputEventSupported = false;
-       if (ExecutionEnvironment.canUseDOM) {
-         // IE9 claims to support the input event but fails to trigger it when
-         // deleting text, so we ignore its input events
-         isInputEventSupported = isEventSupported('input') && (!('documentMode' in document) || document.documentMode > 9);
+         var nodes = Array.from(node.childNodes);
+         while (node.lastChild) {
+           node.removeChild(node.lastChild);
+         }
+         return nodes;
        }
        
-       /**
-        * (For old IE.) Replacement getter/setter for the `value` property that gets
-        * set on the active element.
-        */
-       var newValueProp = {
-         get: function () {
-           return activeElementValueProp.get.call(this);
-         },
-         set: function (val) {
-           // Cast to a string so we can do equality checks.
-           activeElementValue = '' + val;
-           activeElementValueProp.set.call(this, val);
-         }
-       };
+       module.exports = createNodesFromMarkup;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
+
+/***/ },
+/* 93 */
+/***/ function(module, exports, __webpack_require__) {
+
+       /* WEBPACK VAR INJECTION */(function(process) {'use strict';
        
        /**
-        * (For old IE.) Starts tracking propertychange events on the passed-in element
-        * and override the value property so that we can distinguish user events from
-        * value changes in JS.
+        * Copyright (c) 2013-present, 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.
+        *
+        * @typechecks
         */
-       function startWatchingForValueChange(target, targetID) {
-         activeElement = target;
-         activeElementID = targetID;
-         activeElementValue = target.value;
-         activeElementValueProp = Object.getOwnPropertyDescriptor(target.constructor.prototype, 'value');
        
-         // Not guarded in a canDefineProperty check: IE8 supports defineProperty only
-         // on DOM elements
-         Object.defineProperty(activeElement, 'value', newValueProp);
-         activeElement.attachEvent('onpropertychange', handlePropertyChange);
-       }
+       var invariant = __webpack_require__(10);
        
        /**
-        * (For old IE.) Removes the event listeners from the currently-tracked element,
-        * if any exists.
-        */
-       function stopWatchingForValueChange() {
-         if (!activeElement) {
-           return;
-         }
-       
-         // delete restores the original property definition
-         delete activeElement.value;
-         activeElement.detachEvent('onpropertychange', handlePropertyChange);
+        * Convert array-like objects to arrays.
+        *
+        * This API assumes the caller knows the contents of the data type. For less
+        * well defined inputs use createArrayFromMixed.
+        *
+        * @param {object|function|filelist} obj
+        * @return {array}
+        */
+       function toArray(obj) {
+         var length = obj.length;
        
-         activeElement = null;
-         activeElementID = null;
-         activeElementValue = null;
-         activeElementValueProp = null;
-       }
+         // Some browsers builtin objects can report typeof 'function' (e.g. NodeList
+         // in old versions of Safari).
+         !(!Array.isArray(obj) && (typeof obj === 'object' || typeof obj === 'function')) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'toArray: Array-like object expected') : invariant(false) : void 0;
        
-       /**
-        * (For old IE.) Handles a propertychange event, sending a `change` event if
-        * the value of the active element has changed.
-        */
-       function handlePropertyChange(nativeEvent) {
-         if (nativeEvent.propertyName !== 'value') {
-           return;
-         }
-         var value = nativeEvent.srcElement.value;
-         if (value === activeElementValue) {
-           return;
-         }
-         activeElementValue = value;
+         !(typeof length === 'number') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'toArray: Object needs a length property') : invariant(false) : void 0;
        
-         manualDispatchChangeEvent(nativeEvent);
-       }
+         !(length === 0 || length - 1 in obj) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'toArray: Object should have keys for indices') : invariant(false) : void 0;
        
-       /**
-        * If a `change` event should be fired, returns the target's ID.
-        */
-       function getTargetIDForInputEvent(topLevelType, topLevelTarget, topLevelTargetID) {
-         if (topLevelType === topLevelTypes.topInput) {
-           // In modern browsers (i.e., not IE8 or IE9), the input event is exactly
-           // what we want so fall through here and trigger an abstract event
-           return topLevelTargetID;
-         }
-       }
+         !(typeof obj.callee !== 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'toArray: Object can\'t be `arguments`. Use rest params ' + '(function(...args) {}) or Array.from() instead.') : invariant(false) : void 0;
        
-       // For IE8 and IE9.
-       function handleEventsForInputEventIE(topLevelType, topLevelTarget, topLevelTargetID) {
-         if (topLevelType === topLevelTypes.topFocus) {
-           // In IE8, we can capture almost all .value changes by adding a
-           // propertychange handler and looking for events with propertyName
-           // equal to 'value'
-           // In IE9, propertychange fires for most input events but is buggy and
-           // doesn't fire when text is deleted, but conveniently, selectionchange
-           // appears to fire in all of the remaining cases so we catch those and
-           // forward the event if the value has changed
-           // In either case, we don't want to call the event handler if the value
-           // is changed from JS so we redefine a setter for `.value` that updates
-           // our activeElementValue variable, allowing us to ignore those changes
-           //
-           // stopWatching() should be a noop here but we call it just in case we
-           // missed a blur event somehow.
-           stopWatchingForValueChange();
-           startWatchingForValueChange(topLevelTarget, topLevelTargetID);
-         } else if (topLevelType === topLevelTypes.topBlur) {
-           stopWatchingForValueChange();
+         // Old IE doesn't give collections access to hasOwnProperty. Assume inputs
+         // without method will throw during the slice call and skip straight to the
+         // fallback.
+         if (obj.hasOwnProperty) {
+           try {
+             return Array.prototype.slice.call(obj);
+           } catch (e) {
+             // IE < 9 does not support Array#slice on collections objects
+           }
          }
-       }
        
-       // For IE8 and IE9.
-       function getTargetIDForInputEventIE(topLevelType, topLevelTarget, topLevelTargetID) {
-         if (topLevelType === topLevelTypes.topSelectionChange || topLevelType === topLevelTypes.topKeyUp || topLevelType === topLevelTypes.topKeyDown) {
-           // On the selectionchange event, the target is just document which isn't
-           // helpful for us so just check activeElement instead.
-           //
-           // 99% of the time, keydown and keyup aren't necessary. IE8 fails to fire
-           // propertychange on the first input event after setting `value` from a
-           // script and fires only keydown, keypress, keyup. Catching keyup usually
-           // gets it and catching keydown lets us fire an event for the first
-           // keystroke if user does a key repeat (it'll be a little delayed: right
-           // before the second keystroke). Other input methods (e.g., paste) seem to
-           // fire selectionchange normally.
-           if (activeElement && activeElement.value !== activeElementValue) {
-             activeElementValue = activeElement.value;
-             return activeElementID;
-           }
+         // Fall back to copying key by key. This assumes all keys have a value,
+         // so will not preserve sparsely populated inputs.
+         var ret = Array(length);
+         for (var ii = 0; ii < length; ii++) {
+           ret[ii] = obj[ii];
          }
+         return ret;
        }
        
        /**
-        * SECTION: handle `click` event
+        * Perform a heuristic test to determine if an object is "array-like".
+        *
+        *   A monk asked Joshu, a Zen master, "Has a dog Buddha nature?"
+        *   Joshu replied: "Mu."
+        *
+        * This function determines if its argument has "array nature": it returns
+        * true if the argument is an actual array, an `arguments' object, or an
+        * HTMLCollection (e.g. node.childNodes or node.getElementsByTagName()).
+        *
+        * It will return false for other array-like objects like Filelist.
+        *
+        * @param {*} obj
+        * @return {boolean}
         */
-       function shouldUseClickEvent(elem) {
-         // Use the `click` event to detect changes to checkbox and radio inputs.
-         // This approach works across all browsers, whereas `change` does not fire
-         // until `blur` in IE8.
-         return elem.nodeName && elem.nodeName.toLowerCase() === 'input' && (elem.type === 'checkbox' || elem.type === 'radio');
-       }
-       
-       function getTargetIDForClickEvent(topLevelType, topLevelTarget, topLevelTargetID) {
-         if (topLevelType === topLevelTypes.topClick) {
-           return topLevelTargetID;
-         }
+       function hasArrayNature(obj) {
+         return(
+           // not null/false
+           !!obj && (
+           // arrays are objects, NodeLists are functions in Safari
+           typeof obj == 'object' || typeof obj == 'function') &&
+           // quacks like an array
+           'length' in obj &&
+           // not window
+           !('setInterval' in obj) &&
+           // no DOM node should be considered an array-like
+           // a 'select' element has 'length' and 'item' properties on IE8
+           typeof obj.nodeType != 'number' && (
+           // a real array
+           Array.isArray(obj) ||
+           // arguments
+           'callee' in obj ||
+           // HTMLCollection/NodeList
+           'item' in obj)
+         );
        }
        
        /**
-        * This plugin creates an `onChange` event that normalizes change events
-        * across form elements. This event fires at a time when it's possible to
-        * change the element's value without seeing a flicker.
+        * Ensure that the argument is an array by wrapping it in an array if it is not.
+        * Creates a copy of the argument if it is already an array.
         *
-        * Supported elements are:
-        * - input (see `isTextInputElement`)
-        * - textarea
-        * - select
+        * This is mostly useful idiomatically:
+        *
+        *   var createArrayFromMixed = require('createArrayFromMixed');
+        *
+        *   function takesOneOrMoreThings(things) {
+        *     things = createArrayFromMixed(things);
+        *     ...
+        *   }
+        *
+        * This allows you to treat `things' as an array, but accept scalars in the API.
+        *
+        * If you need to convert an array-like object, like `arguments`, into an array
+        * use toArray instead.
+        *
+        * @param {*} obj
+        * @return {array}
         */
-       var ChangeEventPlugin = {
-       
-         eventTypes: eventTypes,
-       
-         /**
-          * @param {string} topLevelType Record from `EventConstants`.
-          * @param {DOMEventTarget} topLevelTarget The listening component root node.
-          * @param {string} topLevelTargetID ID of `topLevelTarget`.
-          * @param {object} nativeEvent Native browser event.
-          * @return {*} An accumulation of synthetic events.
-          * @see {EventPluginHub.extractEvents}
-          */
-         extractEvents: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) {
-       
-           var getTargetIDFunc, handleEventFunc;
-           if (shouldUseChangeEvent(topLevelTarget)) {
-             if (doesChangeEventBubble) {
-               getTargetIDFunc = getTargetIDForChangeEvent;
-             } else {
-               handleEventFunc = handleEventsForChangeEventIE8;
-             }
-           } else if (isTextInputElement(topLevelTarget)) {
-             if (isInputEventSupported) {
-               getTargetIDFunc = getTargetIDForInputEvent;
-             } else {
-               getTargetIDFunc = getTargetIDForInputEventIE;
-               handleEventFunc = handleEventsForInputEventIE;
-             }
-           } else if (shouldUseClickEvent(topLevelTarget)) {
-             getTargetIDFunc = getTargetIDForClickEvent;
-           }
-       
-           if (getTargetIDFunc) {
-             var targetID = getTargetIDFunc(topLevelType, topLevelTarget, topLevelTargetID);
-             if (targetID) {
-               var event = SyntheticEvent.getPooled(eventTypes.change, targetID, nativeEvent, nativeEventTarget);
-               event.type = 'change';
-               EventPropagators.accumulateTwoPhaseDispatches(event);
-               return event;
-             }
-           }
-       
-           if (handleEventFunc) {
-             handleEventFunc(topLevelType, topLevelTarget, topLevelTargetID);
-           }
+       function createArrayFromMixed(obj) {
+         if (!hasArrayNature(obj)) {
+           return [obj];
+         } else if (Array.isArray(obj)) {
+           return obj.slice();
+         } else {
+           return toArray(obj);
          }
+       }
        
-       };
-       
-       module.exports = ChangeEventPlugin;
+       module.exports = createArrayFromMixed;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
 
 /***/ },
-/* 83 */
-/***/ function(module, exports) {
+/* 94 */
+/***/ function(module, exports, __webpack_require__) {
 
+       /* WEBPACK VAR INJECTION */(function(process) {'use strict';
+       
        /**
-        * Copyright 2013-2015, Facebook, Inc.
+        * Copyright (c) 2013-present, 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.
         *
-        * @providesModule getEventTarget
-        * @typechecks static-only
         */
        
-       'use strict';
+       /*eslint-disable fb-www/unsafe-html */
+       
+       var ExecutionEnvironment = __webpack_require__(52);
+       
+       var invariant = __webpack_require__(10);
        
        /**
-        * Gets the target node from a native browser event by accounting for
-        * inconsistencies in browser DOM APIs.
-        *
-        * @param {object} nativeEvent Native browser event.
-        * @return {DOMEventTarget} Target node.
+        * Dummy container used to detect which wraps are necessary.
         */
-       function getEventTarget(nativeEvent) {
-         var target = nativeEvent.target || nativeEvent.srcElement || window;
-         // Safari may fire events on text nodes (Node.TEXT_NODE is 3).
-         // @see http://www.quirksmode.org/js/events_properties.html
-         return target.nodeType === 3 ? target.parentNode : target;
-       }
+       var dummyNode = ExecutionEnvironment.canUseDOM ? document.createElement('div') : null;
        
-       module.exports = getEventTarget;
-
-/***/ },
-/* 84 */
-/***/ function(module, exports) {
-
        /**
-        * 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.
+        * Some browsers cannot use `innerHTML` to render certain elements standalone,
+        * so we wrap them, render the wrapped nodes, then extract the desired node.
         *
-        * @providesModule isTextInputElement
+        * In IE8, certain elements cannot render alone, so wrap all elements ('*').
         */
        
-       'use strict';
+       var shouldWrap = {};
        
-       /**
-        * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary
-        */
-       var supportedInputTypes = {
-         'color': true,
-         'date': true,
-         'datetime': true,
-         'datetime-local': true,
-         'email': true,
-         'month': true,
-         'number': true,
-         'password': true,
-         'range': true,
-         'search': true,
-         'tel': true,
-         'text': true,
-         'time': true,
-         'url': true,
-         'week': true
+       var selectWrap = [1, '<select multiple="true">', '</select>'];
+       var tableWrap = [1, '<table>', '</table>'];
+       var trWrap = [3, '<table><tbody><tr>', '</tr></tbody></table>'];
+       
+       var svgWrap = [1, '<svg xmlns="http://www.w3.org/2000/svg">', '</svg>'];
+       
+       var markupWrap = {
+         '*': [1, '?<div>', '</div>'],
+       
+         'area': [1, '<map>', '</map>'],
+         'col': [2, '<table><tbody></tbody><colgroup>', '</colgroup></table>'],
+         'legend': [1, '<fieldset>', '</fieldset>'],
+         'param': [1, '<object>', '</object>'],
+         'tr': [2, '<table><tbody>', '</tbody></table>'],
+       
+         'optgroup': selectWrap,
+         'option': selectWrap,
+       
+         'caption': tableWrap,
+         'colgroup': tableWrap,
+         'tbody': tableWrap,
+         'tfoot': tableWrap,
+         'thead': tableWrap,
+       
+         'td': trWrap,
+         'th': trWrap
        };
        
-       function isTextInputElement(elem) {
-         var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();
-         return nodeName && (nodeName === 'input' && supportedInputTypes[elem.type] || nodeName === 'textarea');
+       // Initialize the SVG elements since we know they'll always need to be wrapped
+       // consistently. If they are created inside a <div> they will be initialized in
+       // the wrong namespace (and will not display).
+       var svgElements = ['circle', 'clipPath', 'defs', 'ellipse', 'g', 'image', 'line', 'linearGradient', 'mask', 'path', 'pattern', 'polygon', 'polyline', 'radialGradient', 'rect', 'stop', 'text', 'tspan'];
+       svgElements.forEach(function (nodeName) {
+         markupWrap[nodeName] = svgWrap;
+         shouldWrap[nodeName] = true;
+       });
+       
+       /**
+        * Gets the markup wrap configuration for the supplied `nodeName`.
+        *
+        * NOTE: This lazily detects which wraps are necessary for the current browser.
+        *
+        * @param {string} nodeName Lowercase `nodeName`.
+        * @return {?array} Markup wrap configuration, if applicable.
+        */
+       function getMarkupWrap(nodeName) {
+         !!!dummyNode ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Markup wrapping node not initialized') : invariant(false) : void 0;
+         if (!markupWrap.hasOwnProperty(nodeName)) {
+           nodeName = '*';
+         }
+         if (!shouldWrap.hasOwnProperty(nodeName)) {
+           if (nodeName === '*') {
+             dummyNode.innerHTML = '<link />';
+           } else {
+             dummyNode.innerHTML = '<' + nodeName + '></' + nodeName + '>';
+           }
+           shouldWrap[nodeName] = !dummyNode.firstChild;
+         }
+         return shouldWrap[nodeName] ? markupWrap[nodeName] : null;
        }
        
-       module.exports = isTextInputElement;
+       module.exports = getMarkupWrap;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
 
 /***/ },
-/* 85 */
-/***/ function(module, exports) {
+/* 95 */
+/***/ function(module, exports, __webpack_require__) {
 
        /**
-        * Copyright 2013-2015, Facebook, Inc.
+        * Copyright 2013-present, 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.
         *
-        * @providesModule ClientReactRootIndex
-        * @typechecks
+        * @providesModule ReactMultiChildUpdateTypes
         */
        
        'use strict';
        
-       var nextReactRootIndex = 0;
+       var keyMirror = __webpack_require__(25);
        
-       var ClientReactRootIndex = {
-         createReactRootIndex: function () {
-           return nextReactRootIndex++;
-         }
-       };
+       /**
+        * When a component's children are updated, a series of update configuration
+        * objects are created in order to batch and serialize the required changes.
+        *
+        * Enumerates all the possible types of update configurations.
+        *
+        * @internal
+        */
+       var ReactMultiChildUpdateTypes = keyMirror({
+         INSERT_MARKUP: null,
+         MOVE_EXISTING: null,
+         REMOVE_NODE: null,
+         SET_MARKUP: null,
+         TEXT_CONTENT: null
+       });
        
-       module.exports = ClientReactRootIndex;
+       module.exports = ReactMultiChildUpdateTypes;
 
 /***/ },
-/* 86 */
+/* 96 */
 /***/ function(module, exports, __webpack_require__) {
 
        /**
-        * Copyright 2013-2015, Facebook, Inc.
+        * Copyright 2013-present, 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.
         *
-        * @providesModule DefaultEventPluginOrder
+        * @providesModule ReactDOMIDOperations
         */
        
        'use strict';
        
-       var keyOf = __webpack_require__(81);
+       var DOMChildrenOperations = __webpack_require__(84);
+       var ReactDOMComponentTree = __webpack_require__(39);
        
        /**
-        * Module that is injectable into `EventPluginHub`, that specifies a
-        * deterministic ordering of `EventPlugin`s. A convenient way to reason about
-        * plugins, without having to package every one of them. This is better than
-        * having plugins be ordered in the same order that they are injected because
-        * that ordering would be influenced by the packaging order.
-        * `ResponderEventPlugin` must occur before `SimpleEventPlugin` so that
-        * preventing default on events is convenient in `SimpleEventPlugin` handlers.
+        * Operations used to process updates to DOM nodes.
         */
-       var DefaultEventPluginOrder = [keyOf({ ResponderEventPlugin: null }), keyOf({ SimpleEventPlugin: null }), keyOf({ TapEventPlugin: null }), keyOf({ EnterLeaveEventPlugin: null }), keyOf({ ChangeEventPlugin: null }), keyOf({ SelectEventPlugin: null }), keyOf({ BeforeInputEventPlugin: null })];
+       var ReactDOMIDOperations = {
        
-       module.exports = DefaultEventPluginOrder;
+         /**
+          * Updates a component's children by processing a series of updates.
+          *
+          * @param {array<object>} updates List of update configurations.
+          * @internal
+          */
+         dangerouslyProcessChildrenUpdates: function (parentInst, updates) {
+           var node = ReactDOMComponentTree.getNodeFromInstance(parentInst);
+           DOMChildrenOperations.processUpdates(node, updates);
+         }
+       };
+       
+       module.exports = ReactDOMIDOperations;
 
 /***/ },
-/* 87 */
+/* 97 */
 /***/ function(module, exports, __webpack_require__) {
 
-       /**
-        * Copyright 2013-2015, Facebook, Inc.
+       /* WEBPACK VAR INJECTION */(function(process) {/**
+        * Copyright 2013-present, 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.
         *
-        * @providesModule EnterLeaveEventPlugin
-        * @typechecks static-only
+        * @providesModule ReactDOMComponent
         */
        
-       'use strict';
+       /* global hasOwnProperty:true */
        
-       var EventConstants = __webpack_require__(32);
-       var EventPropagators = __webpack_require__(75);
-       var SyntheticMouseEvent = __webpack_require__(88);
+       'use strict';
        
-       var ReactMount = __webpack_require__(30);
-       var keyOf = __webpack_require__(81);
+       var _prodInvariant = __webpack_require__(9),
+           _assign = __webpack_require__(6);
+       
+       var AutoFocusUtils = __webpack_require__(98);
+       var CSSPropertyOperations = __webpack_require__(100);
+       var DOMLazyTree = __webpack_require__(85);
+       var DOMNamespaces = __webpack_require__(86);
+       var DOMProperty = __webpack_require__(40);
+       var DOMPropertyOperations = __webpack_require__(108);
+       var EventConstants = __webpack_require__(44);
+       var EventPluginHub = __webpack_require__(46);
+       var EventPluginRegistry = __webpack_require__(47);
+       var ReactBrowserEventEmitter = __webpack_require__(114);
+       var ReactComponentBrowserEnvironment = __webpack_require__(83);
+       var ReactDOMButton = __webpack_require__(117);
+       var ReactDOMComponentFlags = __webpack_require__(41);
+       var ReactDOMComponentTree = __webpack_require__(39);
+       var ReactDOMInput = __webpack_require__(119);
+       var ReactDOMOption = __webpack_require__(121);
+       var ReactDOMSelect = __webpack_require__(122);
+       var ReactDOMTextarea = __webpack_require__(123);
+       var ReactInstrumentation = __webpack_require__(65);
+       var ReactMultiChild = __webpack_require__(124);
+       var ReactServerRenderingTransaction = __webpack_require__(136);
+       
+       var emptyFunction = __webpack_require__(14);
+       var escapeTextContentForBrowser = __webpack_require__(90);
+       var invariant = __webpack_require__(10);
+       var isEventSupported = __webpack_require__(74);
+       var keyOf = __webpack_require__(27);
+       var shallowEqual = __webpack_require__(131);
+       var validateDOMNesting = __webpack_require__(139);
+       var warning = __webpack_require__(13);
+       
+       var Flags = ReactDOMComponentFlags;
+       var deleteListener = EventPluginHub.deleteListener;
+       var getNode = ReactDOMComponentTree.getNodeFromInstance;
+       var listenTo = ReactBrowserEventEmitter.listenTo;
+       var registrationNameModules = EventPluginRegistry.registrationNameModules;
        
-       var topLevelTypes = EventConstants.topLevelTypes;
-       var getFirstReactDOM = ReactMount.getFirstReactDOM;
+       // For quickly matching children type, to test if can be treated as content.
+       var CONTENT_TYPES = { 'string': true, 'number': true };
        
-       var eventTypes = {
-         mouseEnter: {
-           registrationName: keyOf({ onMouseEnter: null }),
-           dependencies: [topLevelTypes.topMouseOut, topLevelTypes.topMouseOver]
-         },
-         mouseLeave: {
-           registrationName: keyOf({ onMouseLeave: null }),
-           dependencies: [topLevelTypes.topMouseOut, topLevelTypes.topMouseOver]
-         }
+       var STYLE = keyOf({ style: null });
+       var HTML = keyOf({ __html: null });
+       var RESERVED_PROPS = {
+         children: null,
+         dangerouslySetInnerHTML: null,
+         suppressContentEditableWarning: null
        };
        
-       var extractedEvents = [null, null];
-       
-       var EnterLeaveEventPlugin = {
-       
-         eventTypes: eventTypes,
-       
-         /**
-          * For almost every interaction we care about, there will be both a top-level
-          * `mouseover` and `mouseout` event that occurs. Only use `mouseout` so that
-          * we do not extract duplicate events. However, moving the mouse into the
-          * browser from outside will not fire a `mouseout` event. In this case, we use
-          * the `mouseover` top-level event.
-          *
-          * @param {string} topLevelType Record from `EventConstants`.
-          * @param {DOMEventTarget} topLevelTarget The listening component root node.
-          * @param {string} topLevelTargetID ID of `topLevelTarget`.
-          * @param {object} nativeEvent Native browser event.
-          * @return {*} An accumulation of synthetic events.
-          * @see {EventPluginHub.extractEvents}
-          */
-         extractEvents: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) {
-           if (topLevelType === topLevelTypes.topMouseOver && (nativeEvent.relatedTarget || nativeEvent.fromElement)) {
-             return null;
-           }
-           if (topLevelType !== topLevelTypes.topMouseOut && topLevelType !== topLevelTypes.topMouseOver) {
-             // Must not be a mouse in or mouse out - ignoring.
-             return null;
-           }
+       // Node type for document fragments (Node.DOCUMENT_FRAGMENT_NODE).
+       var DOC_FRAGMENT_TYPE = 11;
        
-           var win;
-           if (topLevelTarget.window === topLevelTarget) {
-             // `topLevelTarget` is probably a window object.
-             win = topLevelTarget;
-           } else {
-             // TODO: Figure out why `ownerDocument` is sometimes undefined in IE8.
-             var doc = topLevelTarget.ownerDocument;
-             if (doc) {
-               win = doc.defaultView || doc.parentWindow;
-             } else {
-               win = window;
+       function getDeclarationErrorAddendum(internalInstance) {
+         if (internalInstance) {
+           var owner = internalInstance._currentElement._owner || null;
+           if (owner) {
+             var name = owner.getName();
+             if (name) {
+               return ' This DOM node was rendered by `' + name + '`.';
              }
            }
+         }
+         return '';
+       }
        
-           var from;
-           var to;
-           var fromID = '';
-           var toID = '';
-           if (topLevelType === topLevelTypes.topMouseOut) {
-             from = topLevelTarget;
-             fromID = topLevelTargetID;
-             to = getFirstReactDOM(nativeEvent.relatedTarget || nativeEvent.toElement);
-             if (to) {
-               toID = ReactMount.getID(to);
-             } else {
-               to = win;
-             }
-             to = to || win;
+       function friendlyStringify(obj) {
+         if (typeof obj === 'object') {
+           if (Array.isArray(obj)) {
+             return '[' + obj.map(friendlyStringify).join(', ') + ']';
            } else {
-             from = win;
-             to = topLevelTarget;
-             toID = topLevelTargetID;
-           }
-       
-           if (from === to) {
-             // Nothing pertains to our managed components.
-             return null;
+             var pairs = [];
+             for (var key in obj) {
+               if (Object.prototype.hasOwnProperty.call(obj, key)) {
+                 var keyEscaped = /^[a-z$_][\w$_]*$/i.test(key) ? key : JSON.stringify(key);
+                 pairs.push(keyEscaped + ': ' + friendlyStringify(obj[key]));
+               }
+             }
+             return '{' + pairs.join(', ') + '}';
            }
+         } else if (typeof obj === 'string') {
+           return JSON.stringify(obj);
+         } else if (typeof obj === 'function') {
+           return '[function object]';
+         }
+         // Differs from JSON.stringify in that undefined because undefined and that
+         // inf and nan don't become null
+         return String(obj);
+       }
        
-           var leave = SyntheticMouseEvent.getPooled(eventTypes.mouseLeave, fromID, nativeEvent, nativeEventTarget);
-           leave.type = 'mouseleave';
-           leave.target = from;
-           leave.relatedTarget = to;
-       
-           var enter = SyntheticMouseEvent.getPooled(eventTypes.mouseEnter, toID, nativeEvent, nativeEventTarget);
-           enter.type = 'mouseenter';
-           enter.target = to;
-           enter.relatedTarget = from;
-       
-           EventPropagators.accumulateEnterLeaveDispatches(leave, enter, fromID, toID);
-       
-           extractedEvents[0] = leave;
-           extractedEvents[1] = enter;
+       var styleMutationWarning = {};
        
-           return extractedEvents;
+       function checkAndWarnForMutatedStyle(style1, style2, component) {
+         if (style1 == null || style2 == null) {
+           return;
+         }
+         if (shallowEqual(style1, style2)) {
+           return;
          }
        
-       };
+         var componentName = component._tag;
+         var owner = component._currentElement._owner;
+         var ownerName;
+         if (owner) {
+           ownerName = owner.getName();
+         }
        
-       module.exports = EnterLeaveEventPlugin;
-
-/***/ },
-/* 88 */
-/***/ 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.
-        *
-        * @providesModule SyntheticMouseEvent
-        * @typechecks static-only
-        */
+         var hash = ownerName + '|' + componentName;
        
-       'use strict';
+         if (styleMutationWarning.hasOwnProperty(hash)) {
+           return;
+         }
        
-       var SyntheticUIEvent = __webpack_require__(89);
-       var ViewportMetrics = __webpack_require__(40);
+         styleMutationWarning[hash] = true;
        
-       var getEventModifierState = __webpack_require__(90);
+         process.env.NODE_ENV !== 'production' ? warning(false, '`%s` was passed a style object that has previously been mutated. ' + 'Mutating `style` is deprecated. Consider cloning it beforehand. Check ' + 'the `render` %s. Previous style: %s. Mutated style: %s.', componentName, owner ? 'of `' + ownerName + '`' : 'using <' + componentName + '>', friendlyStringify(style1), friendlyStringify(style2)) : void 0;
+       }
        
        /**
-        * @interface MouseEvent
-        * @see http://www.w3.org/TR/DOM-Level-3-Events/
+        * @param {object} component
+        * @param {?object} props
         */
-       var MouseEventInterface = {
-         screenX: null,
-         screenY: null,
-         clientX: null,
-         clientY: null,
-         ctrlKey: null,
-         shiftKey: null,
-         altKey: null,
-         metaKey: null,
-         getModifierState: getEventModifierState,
-         button: function (event) {
-           // Webkit, Firefox, IE9+
-           // which:  1 2 3
-           // button: 0 1 2 (standard)
-           var button = event.button;
-           if ('which' in event) {
-             return button;
-           }
-           // IE<9
-           // which:  undefined
-           // button: 0 0 0
-           // button: 1 4 2 (onmouseup)
-           return button === 2 ? 2 : button === 4 ? 1 : 0;
-         },
-         buttons: null,
-         relatedTarget: function (event) {
-           return event.relatedTarget || (event.fromElement === event.srcElement ? event.toElement : event.fromElement);
-         },
-         // "Proprietary" Interface.
-         pageX: function (event) {
-           return 'pageX' in event ? event.pageX : event.clientX + ViewportMetrics.currentScrollLeft;
-         },
-         pageY: function (event) {
-           return 'pageY' in event ? event.pageY : event.clientY + ViewportMetrics.currentScrollTop;
+       function assertValidProps(component, props) {
+         if (!props) {
+           return;
          }
-       };
+         // Note the use of `==` which checks for null or undefined.
+         if (voidElementTags[component._tag]) {
+           !(props.children == null && props.dangerouslySetInnerHTML == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`.%s', component._tag, component._currentElement._owner ? ' Check the render method of ' + component._currentElement._owner.getName() + '.' : '') : _prodInvariant('137', component._tag, component._currentElement._owner ? ' Check the render method of ' + component._currentElement._owner.getName() + '.' : '') : void 0;
+         }
+         if (props.dangerouslySetInnerHTML != null) {
+           !(props.children == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Can only set one of `children` or `props.dangerouslySetInnerHTML`.') : _prodInvariant('60') : void 0;
+           !(typeof props.dangerouslySetInnerHTML === 'object' && HTML in props.dangerouslySetInnerHTML) ? process.env.NODE_ENV !== 'production' ? invariant(false, '`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://fb.me/react-invariant-dangerously-set-inner-html for more information.') : _prodInvariant('61') : void 0;
+         }
+         if (process.env.NODE_ENV !== 'production') {
+           process.env.NODE_ENV !== 'production' ? warning(props.innerHTML == null, 'Directly setting property `innerHTML` is not permitted. ' + 'For more information, lookup documentation on `dangerouslySetInnerHTML`.') : void 0;
+           process.env.NODE_ENV !== 'production' ? warning(props.suppressContentEditableWarning || !props.contentEditable || props.children == null, 'A component is `contentEditable` and contains `children` managed by ' + 'React. It is now your responsibility to guarantee that none of ' + 'those nodes are unexpectedly modified or duplicated. This is ' + 'probably not intentional.') : void 0;
+           process.env.NODE_ENV !== 'production' ? warning(props.onFocusIn == null && props.onFocusOut == null, 'React uses onFocus and onBlur instead of onFocusIn and onFocusOut. ' + 'All React events are normalized to bubble, so onFocusIn and onFocusOut ' + 'are not needed/supported by React.') : void 0;
+         }
+         !(props.style == null || typeof props.style === 'object') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'The `style` prop expects a mapping from style properties to values, not a string. For example, style={{marginRight: spacing + \'em\'}} when using JSX.%s', getDeclarationErrorAddendum(component)) : _prodInvariant('62', getDeclarationErrorAddendum(component)) : void 0;
+       }
        
-       /**
-        * @param {object} dispatchConfig Configuration used to dispatch this event.
-        * @param {string} dispatchMarker Marker identifying the event target.
-        * @param {object} nativeEvent Native browser event.
-        * @extends {SyntheticUIEvent}
-        */
-       function SyntheticMouseEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
-         SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
+       function enqueuePutListener(inst, registrationName, listener, transaction) {
+         if (transaction instanceof ReactServerRenderingTransaction) {
+           return;
+         }
+         if (process.env.NODE_ENV !== 'production') {
+           // IE8 has no API for event capturing and the `onScroll` event doesn't
+           // bubble.
+           process.env.NODE_ENV !== 'production' ? warning(registrationName !== 'onScroll' || isEventSupported('scroll', true), 'This browser doesn\'t support the `onScroll` event') : void 0;
+         }
+         var containerInfo = inst._hostContainerInfo;
+         var isDocumentFragment = containerInfo._node && containerInfo._node.nodeType === DOC_FRAGMENT_TYPE;
+         var doc = isDocumentFragment ? containerInfo._node : containerInfo._ownerDocument;
+         listenTo(registrationName, doc);
+         transaction.getReactMountReady().enqueue(putListener, {
+           inst: inst,
+           registrationName: registrationName,
+           listener: listener
+         });
        }
        
-       SyntheticUIEvent.augmentClass(SyntheticMouseEvent, MouseEventInterface);
+       function putListener() {
+         var listenerToPut = this;
+         EventPluginHub.putListener(listenerToPut.inst, listenerToPut.registrationName, listenerToPut.listener);
+       }
        
-       module.exports = SyntheticMouseEvent;
-
-/***/ },
-/* 89 */
-/***/ 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.
-        *
-        * @providesModule SyntheticUIEvent
-        * @typechecks static-only
-        */
+       function inputPostMount() {
+         var inst = this;
+         ReactDOMInput.postMountWrapper(inst);
+       }
        
-       'use strict';
+       function textareaPostMount() {
+         var inst = this;
+         ReactDOMTextarea.postMountWrapper(inst);
+       }
        
-       var SyntheticEvent = __webpack_require__(79);
+       function optionPostMount() {
+         var inst = this;
+         ReactDOMOption.postMountWrapper(inst);
+       }
        
-       var getEventTarget = __webpack_require__(83);
+       var setContentChildForInstrumentation = emptyFunction;
+       if (process.env.NODE_ENV !== 'production') {
+         setContentChildForInstrumentation = function (content) {
+           var hasExistingContent = this._contentDebugID != null;
+           var debugID = this._debugID;
+           var contentDebugID = debugID + '#text';
        
-       /**
-        * @interface UIEvent
-        * @see http://www.w3.org/TR/DOM-Level-3-Events/
-        */
-       var UIEventInterface = {
-         view: function (event) {
-           if (event.view) {
-             return event.view;
+           if (content == null) {
+             if (hasExistingContent) {
+               ReactInstrumentation.debugTool.onUnmountComponent(this._contentDebugID);
+             }
+             this._contentDebugID = null;
+             return;
            }
        
-           var target = getEventTarget(event);
-           if (target != null && target.window === target) {
-             // target is a window object
-             return target;
-           }
+           this._contentDebugID = contentDebugID;
+           var text = '' + content;
        
-           var doc = target.ownerDocument;
-           // TODO: Figure out why `ownerDocument` is sometimes undefined in IE8.
-           if (doc) {
-             return doc.defaultView || doc.parentWindow;
+           ReactInstrumentation.debugTool.onSetDisplayName(contentDebugID, '#text');
+           ReactInstrumentation.debugTool.onSetParent(contentDebugID, debugID);
+           ReactInstrumentation.debugTool.onSetText(contentDebugID, text);
+       
+           if (hasExistingContent) {
+             ReactInstrumentation.debugTool.onBeforeUpdateComponent(contentDebugID, content);
+             ReactInstrumentation.debugTool.onUpdateComponent(contentDebugID);
            } else {
-             return window;
+             ReactInstrumentation.debugTool.onBeforeMountComponent(contentDebugID, content);
+             ReactInstrumentation.debugTool.onMountComponent(contentDebugID);
+             ReactInstrumentation.debugTool.onSetChildren(debugID, [contentDebugID]);
            }
-         },
-         detail: function (event) {
-           return event.detail || 0;
-         }
-       };
-       
-       /**
-        * @param {object} dispatchConfig Configuration used to dispatch this event.
-        * @param {string} dispatchMarker Marker identifying the event target.
-        * @param {object} nativeEvent Native browser event.
-        * @extends {SyntheticEvent}
-        */
-       function SyntheticUIEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
-         SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
+         };
        }
        
-       SyntheticEvent.augmentClass(SyntheticUIEvent, UIEventInterface);
-       
-       module.exports = SyntheticUIEvent;
-
-/***/ },
-/* 90 */
-/***/ function(module, exports) {
-
-       /**
-        * 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.
-        *
-        * @providesModule getEventModifierState
-        * @typechecks static-only
-        */
-       
-       'use strict';
+       // There are so many media events, it makes sense to just
+       // maintain a list rather than create a `trapBubbledEvent` for each
+       var mediaEvents = {
+         topAbort: 'abort',
+         topCanPlay: 'canplay',
+         topCanPlayThrough: 'canplaythrough',
+         topDurationChange: 'durationchange',
+         topEmptied: 'emptied',
+         topEncrypted: 'encrypted',
+         topEnded: 'ended',
+         topError: 'error',
+         topLoadedData: 'loadeddata',
+         topLoadedMetadata: 'loadedmetadata',
+         topLoadStart: 'loadstart',
+         topPause: 'pause',
+         topPlay: 'play',
+         topPlaying: 'playing',
+         topProgress: 'progress',
+         topRateChange: 'ratechange',
+         topSeeked: 'seeked',
+         topSeeking: 'seeking',
+         topStalled: 'stalled',
+         topSuspend: 'suspend',
+         topTimeUpdate: 'timeupdate',
+         topVolumeChange: 'volumechange',
+         topWaiting: 'waiting'
+       };
        
-       /**
-        * Translation from modifier key to the associated property in the event.
-        * @see http://www.w3.org/TR/DOM-Level-3-Events/#keys-Modifiers
-        */
+       function trapBubbledEventsLocal() {
+         var inst = this;
+         // If a component renders to null or if another component fatals and causes
+         // the state of the tree to be corrupted, `node` here can be null.
+         !inst._rootNodeID ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Must be mounted to trap events') : _prodInvariant('63') : void 0;
+         var node = getNode(inst);
+         !node ? process.env.NODE_ENV !== 'production' ? invariant(false, 'trapBubbledEvent(...): Requires node to be rendered.') : _prodInvariant('64') : void 0;
        
-       var modifierKeyToProp = {
-         'Alt': 'altKey',
-         'Control': 'ctrlKey',
-         'Meta': 'metaKey',
-         'Shift': 'shiftKey'
-       };
+         switch (inst._tag) {
+           case 'iframe':
+           case 'object':
+             inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topLoad, 'load', node)];
+             break;
+           case 'video':
+           case 'audio':
        
-       // IE8 does not implement getModifierState so we simply map it to the only
-       // modifier keys exposed by the event itself, does not support Lock-keys.
-       // Currently, all major browsers except Chrome seems to support Lock-keys.
-       function modifierStateGetter(keyArg) {
-         var syntheticEvent = this;
-         var nativeEvent = syntheticEvent.nativeEvent;
-         if (nativeEvent.getModifierState) {
-           return nativeEvent.getModifierState(keyArg);
+             inst._wrapperState.listeners = [];
+             // Create listener for each media event
+             for (var event in mediaEvents) {
+               if (mediaEvents.hasOwnProperty(event)) {
+                 inst._wrapperState.listeners.push(ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes[event], mediaEvents[event], node));
+               }
+             }
+             break;
+           case 'source':
+             inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topError, 'error', node)];
+             break;
+           case 'img':
+             inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topError, 'error', node), ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topLoad, 'load', node)];
+             break;
+           case 'form':
+             inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topReset, 'reset', node), ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topSubmit, 'submit', node)];
+             break;
+           case 'input':
+           case 'select':
+           case 'textarea':
+             inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topInvalid, 'invalid', node)];
+             break;
          }
-         var keyProp = modifierKeyToProp[keyArg];
-         return keyProp ? !!nativeEvent[keyProp] : false;
        }
        
-       function getEventModifierState(nativeEvent) {
-         return modifierStateGetter;
+       function postUpdateSelectWrapper() {
+         ReactDOMSelect.postUpdateWrapper(this);
        }
        
-       module.exports = getEventModifierState;
-
-/***/ },
-/* 91 */
-/***/ 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.
-        *
-        * @providesModule HTMLDOMPropertyConfig
-        */
-       
-       'use strict';
+       // For HTML, certain tags should omit their close tag. We keep a whitelist for
+       // those special-case tags.
        
-       var DOMProperty = __webpack_require__(25);
-       var ExecutionEnvironment = __webpack_require__(11);
+       var omittedCloseTags = {
+         'area': true,
+         'base': true,
+         'br': true,
+         'col': true,
+         'embed': true,
+         'hr': true,
+         'img': true,
+         'input': true,
+         'keygen': true,
+         'link': true,
+         'meta': true,
+         'param': true,
+         'source': true,
+         'track': true,
+         'wbr': true
+       };
        
-       var MUST_USE_ATTRIBUTE = DOMProperty.injection.MUST_USE_ATTRIBUTE;
-       var MUST_USE_PROPERTY = DOMProperty.injection.MUST_USE_PROPERTY;
-       var HAS_BOOLEAN_VALUE = DOMProperty.injection.HAS_BOOLEAN_VALUE;
-       var HAS_SIDE_EFFECTS = DOMProperty.injection.HAS_SIDE_EFFECTS;
-       var HAS_NUMERIC_VALUE = DOMProperty.injection.HAS_NUMERIC_VALUE;
-       var HAS_POSITIVE_NUMERIC_VALUE = DOMProperty.injection.HAS_POSITIVE_NUMERIC_VALUE;
-       var HAS_OVERLOADED_BOOLEAN_VALUE = DOMProperty.injection.HAS_OVERLOADED_BOOLEAN_VALUE;
-       
-       var hasSVG;
-       if (ExecutionEnvironment.canUseDOM) {
-         var implementation = document.implementation;
-         hasSVG = implementation && implementation.hasFeature && implementation.hasFeature('http://www.w3.org/TR/SVG11/feature#BasicStructure', '1.1');
-       }
-       
-       var HTMLDOMPropertyConfig = {
-         isCustomAttribute: RegExp.prototype.test.bind(/^(data|aria)-[a-z_][a-z\d_.\-]*$/),
-         Properties: {
-           /**
-            * Standard Properties
-            */
-           accept: null,
-           acceptCharset: null,
-           accessKey: null,
-           action: null,
-           allowFullScreen: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,
-           allowTransparency: MUST_USE_ATTRIBUTE,
-           alt: null,
-           async: HAS_BOOLEAN_VALUE,
-           autoComplete: null,
-           // autoFocus is polyfilled/normalized by AutoFocusUtils
-           // autoFocus: HAS_BOOLEAN_VALUE,
-           autoPlay: HAS_BOOLEAN_VALUE,
-           capture: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,
-           cellPadding: null,
-           cellSpacing: null,
-           charSet: MUST_USE_ATTRIBUTE,
-           challenge: MUST_USE_ATTRIBUTE,
-           checked: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,
-           classID: MUST_USE_ATTRIBUTE,
-           // To set className on SVG elements, it's necessary to use .setAttribute;
-           // this works on HTML elements too in all browsers except IE8. Conveniently,
-           // IE8 doesn't support SVG and so we can simply use the attribute in
-           // browsers that support SVG and the property in browsers that don't,
-           // regardless of whether the element is HTML or SVG.
-           className: hasSVG ? MUST_USE_ATTRIBUTE : MUST_USE_PROPERTY,
-           cols: MUST_USE_ATTRIBUTE | HAS_POSITIVE_NUMERIC_VALUE,
-           colSpan: null,
-           content: null,
-           contentEditable: null,
-           contextMenu: MUST_USE_ATTRIBUTE,
-           controls: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,
-           coords: null,
-           crossOrigin: null,
-           data: null, // For `<object />` acts as `src`.
-           dateTime: MUST_USE_ATTRIBUTE,
-           'default': HAS_BOOLEAN_VALUE,
-           defer: HAS_BOOLEAN_VALUE,
-           dir: null,
-           disabled: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,
-           download: HAS_OVERLOADED_BOOLEAN_VALUE,
-           draggable: null,
-           encType: null,
-           form: MUST_USE_ATTRIBUTE,
-           formAction: MUST_USE_ATTRIBUTE,
-           formEncType: MUST_USE_ATTRIBUTE,
-           formMethod: MUST_USE_ATTRIBUTE,
-           formNoValidate: HAS_BOOLEAN_VALUE,
-           formTarget: MUST_USE_ATTRIBUTE,
-           frameBorder: MUST_USE_ATTRIBUTE,
-           headers: null,
-           height: MUST_USE_ATTRIBUTE,
-           hidden: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,
-           high: null,
-           href: null,
-           hrefLang: null,
-           htmlFor: null,
-           httpEquiv: null,
-           icon: null,
-           id: MUST_USE_PROPERTY,
-           inputMode: MUST_USE_ATTRIBUTE,
-           integrity: null,
-           is: MUST_USE_ATTRIBUTE,
-           keyParams: MUST_USE_ATTRIBUTE,
-           keyType: MUST_USE_ATTRIBUTE,
-           kind: null,
-           label: null,
-           lang: null,
-           list: MUST_USE_ATTRIBUTE,
-           loop: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,
-           low: null,
-           manifest: MUST_USE_ATTRIBUTE,
-           marginHeight: null,
-           marginWidth: null,
-           max: null,
-           maxLength: MUST_USE_ATTRIBUTE,
-           media: MUST_USE_ATTRIBUTE,
-           mediaGroup: null,
-           method: null,
-           min: null,
-           minLength: MUST_USE_ATTRIBUTE,
-           multiple: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,
-           muted: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,
-           name: null,
-           nonce: MUST_USE_ATTRIBUTE,
-           noValidate: HAS_BOOLEAN_VALUE,
-           open: HAS_BOOLEAN_VALUE,
-           optimum: null,
-           pattern: null,
-           placeholder: null,
-           poster: null,
-           preload: null,
-           radioGroup: null,
-           readOnly: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,
-           rel: null,
-           required: HAS_BOOLEAN_VALUE,
-           reversed: HAS_BOOLEAN_VALUE,
-           role: MUST_USE_ATTRIBUTE,
-           rows: MUST_USE_ATTRIBUTE | HAS_POSITIVE_NUMERIC_VALUE,
-           rowSpan: null,
-           sandbox: null,
-           scope: null,
-           scoped: HAS_BOOLEAN_VALUE,
-           scrolling: null,
-           seamless: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,
-           selected: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,
-           shape: null,
-           size: MUST_USE_ATTRIBUTE | HAS_POSITIVE_NUMERIC_VALUE,
-           sizes: MUST_USE_ATTRIBUTE,
-           span: HAS_POSITIVE_NUMERIC_VALUE,
-           spellCheck: null,
-           src: null,
-           srcDoc: MUST_USE_PROPERTY,
-           srcLang: null,
-           srcSet: MUST_USE_ATTRIBUTE,
-           start: HAS_NUMERIC_VALUE,
-           step: null,
-           style: null,
-           summary: null,
-           tabIndex: null,
-           target: null,
-           title: null,
-           type: null,
-           useMap: null,
-           value: MUST_USE_PROPERTY | HAS_SIDE_EFFECTS,
-           width: MUST_USE_ATTRIBUTE,
-           wmode: MUST_USE_ATTRIBUTE,
-           wrap: null,
-       
-           /**
-            * RDFa Properties
-            */
-           about: MUST_USE_ATTRIBUTE,
-           datatype: MUST_USE_ATTRIBUTE,
-           inlist: MUST_USE_ATTRIBUTE,
-           prefix: MUST_USE_ATTRIBUTE,
-           // property is also supported for OpenGraph in meta tags.
-           property: MUST_USE_ATTRIBUTE,
-           resource: MUST_USE_ATTRIBUTE,
-           'typeof': MUST_USE_ATTRIBUTE,
-           vocab: MUST_USE_ATTRIBUTE,
-       
-           /**
-            * Non-standard Properties
-            */
-           // autoCapitalize and autoCorrect are supported in Mobile Safari for
-           // keyboard hints.
-           autoCapitalize: null,
-           autoCorrect: null,
-           // autoSave allows WebKit/Blink to persist values of input fields on page reloads
-           autoSave: null,
-           // color is for Safari mask-icon link
-           color: null,
-           // itemProp, itemScope, itemType are for
-           // Microdata support. See http://schema.org/docs/gs.html
-           itemProp: MUST_USE_ATTRIBUTE,
-           itemScope: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,
-           itemType: MUST_USE_ATTRIBUTE,
-           // itemID and itemRef are for Microdata support as well but
-           // only specified in the the WHATWG spec document. See
-           // https://html.spec.whatwg.org/multipage/microdata.html#microdata-dom-api
-           itemID: MUST_USE_ATTRIBUTE,
-           itemRef: MUST_USE_ATTRIBUTE,
-           // results show looking glass icon and recent searches on input
-           // search fields in WebKit/Blink
-           results: null,
-           // IE-only attribute that specifies security restrictions on an iframe
-           // as an alternative to the sandbox attribute on IE<10
-           security: MUST_USE_ATTRIBUTE,
-           // IE-only attribute that controls focus behavior
-           unselectable: MUST_USE_ATTRIBUTE
-         },
-         DOMAttributeNames: {
-           acceptCharset: 'accept-charset',
-           className: 'class',
-           htmlFor: 'for',
-           httpEquiv: 'http-equiv'
-         },
-         DOMPropertyNames: {
-           autoCapitalize: 'autocapitalize',
-           autoComplete: 'autocomplete',
-           autoCorrect: 'autocorrect',
-           autoFocus: 'autofocus',
-           autoPlay: 'autoplay',
-           autoSave: 'autosave',
-           // `encoding` is equivalent to `enctype`, IE8 lacks an `enctype` setter.
-           // http://www.w3.org/TR/html5/forms.html#dom-fs-encoding
-           encType: 'encoding',
-           hrefLang: 'hreflang',
-           radioGroup: 'radiogroup',
-           spellCheck: 'spellcheck',
-           srcDoc: 'srcdoc',
-           srcSet: 'srcset'
-         }
+       // NOTE: menuitem's close tag should be omitted, but that causes problems.
+       var newlineEatingTags = {
+         'listing': true,
+         'pre': true,
+         'textarea': true
        };
        
-       module.exports = HTMLDOMPropertyConfig;
-
-/***/ },
-/* 92 */
-/***/ function(module, exports, __webpack_require__) {
-
-       /* WEBPACK VAR INJECTION */(function(process) {/**
-        * 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.
-        *
-        * @providesModule ReactBrowserComponentMixin
-        */
-       
-       'use strict';
+       // For HTML, certain tags cannot have children. This has the same purpose as
+       // `omittedCloseTags` except that `menuitem` should still have its closing tag.
        
-       var ReactInstanceMap = __webpack_require__(49);
+       var voidElementTags = _assign({
+         'menuitem': true
+       }, omittedCloseTags);
        
-       var findDOMNode = __webpack_require__(93);
-       var warning = __webpack_require__(27);
+       // We accept any tag to be rendered but since this gets injected into arbitrary
+       // HTML, we want to make sure that it's a safe tag.
+       // http://www.w3.org/TR/REC-xml/#NT-Name
        
-       var didWarnKey = '_getDOMNodeDidWarn';
+       var VALID_TAG_REGEX = /^[a-zA-Z][a-zA-Z:_\.\-\d]*$/; // Simplified subset
+       var validatedTagCache = {};
+       var hasOwnProperty = {}.hasOwnProperty;
        
-       var ReactBrowserComponentMixin = {
-         /**
-          * Returns the DOM node rendered by this component.
-          *
-          * @return {DOMElement} The root node of this component.
-          * @final
-          * @protected
-          */
-         getDOMNode: function () {
-           process.env.NODE_ENV !== 'production' ? warning(this.constructor[didWarnKey], '%s.getDOMNode(...) is deprecated. Please use ' + 'ReactDOM.findDOMNode(instance) instead.', ReactInstanceMap.get(this).getName() || this.tagName || 'Unknown') : undefined;
-           this.constructor[didWarnKey] = true;
-           return findDOMNode(this);
+       function validateDangerousTag(tag) {
+         if (!hasOwnProperty.call(validatedTagCache, tag)) {
+           !VALID_TAG_REGEX.test(tag) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Invalid tag: %s', tag) : _prodInvariant('65', tag) : void 0;
+           validatedTagCache[tag] = true;
          }
-       };
-       
-       module.exports = ReactBrowserComponentMixin;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
-
-/***/ },
-/* 93 */
-/***/ function(module, exports, __webpack_require__) {
-
-       /* WEBPACK VAR INJECTION */(function(process) {/**
-        * 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.
-        *
-        * @providesModule findDOMNode
-        * @typechecks static-only
-        */
-       
-       'use strict';
+       }
        
-       var ReactCurrentOwner = __webpack_require__(7);
-       var ReactInstanceMap = __webpack_require__(49);
-       var ReactMount = __webpack_require__(30);
+       function isCustomComponent(tagName, props) {
+         return tagName.indexOf('-') >= 0 || props.is != null;
+       }
        
-       var invariant = __webpack_require__(15);
-       var warning = __webpack_require__(27);
+       var globalIdCounter = 1;
        
        /**
-        * Returns the DOM node rendered by this element.
+        * Creates a new React class that is idempotent and capable of containing other
+        * React components. It accepts event listeners and DOM properties that are
+        * valid according to `DOMProperty`.
         *
-        * @param {ReactComponent|DOMElement} componentOrElement
-        * @return {?DOMElement} The root node of this element.
+        *  - Event listeners: `onClick`, `onMouseDown`, etc.
+        *  - DOM properties: `className`, `name`, `title`, etc.
+        *
+        * The `style` property functions differently from the DOM API. It accepts an
+        * object mapping of style properties to values.
+        *
+        * @constructor ReactDOMComponent
+        * @extends ReactMultiChild
         */
-       function findDOMNode(componentOrElement) {
+       function ReactDOMComponent(element) {
+         var tag = element.type;
+         validateDangerousTag(tag);
+         this._currentElement = element;
+         this._tag = tag.toLowerCase();
+         this._namespaceURI = null;
+         this._renderedChildren = null;
+         this._previousStyle = null;
+         this._previousStyleCopy = null;
+         this._hostNode = null;
+         this._hostParent = null;
+         this._rootNodeID = null;
+         this._domID = null;
+         this._hostContainerInfo = null;
+         this._wrapperState = null;
+         this._topLevelWrapper = null;
+         this._flags = 0;
          if (process.env.NODE_ENV !== 'production') {
-           var owner = ReactCurrentOwner.current;
-           if (owner !== null) {
-             process.env.NODE_ENV !== 'production' ? warning(owner._warnedAboutRefsInRender, '%s is accessing getDOMNode or findDOMNode inside its render(). ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', owner.getName() || 'A component') : undefined;
-             owner._warnedAboutRefsInRender = true;
-           }
-         }
-         if (componentOrElement == null) {
-           return null;
+           this._ancestorInfo = null;
+           setContentChildForInstrumentation.call(this, null);
          }
-         if (componentOrElement.nodeType === 1) {
-           return componentOrElement;
-         }
-         if (ReactInstanceMap.has(componentOrElement)) {
-           return ReactMount.getNodeFromInstance(componentOrElement);
-         }
-         !(componentOrElement.render == null || typeof componentOrElement.render !== 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'findDOMNode was called on an unmounted component.') : invariant(false) : undefined;
-          true ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Element appears to be neither ReactComponent nor DOMNode (keys: %s)', Object.keys(componentOrElement)) : invariant(false) : undefined;
        }
        
-       module.exports = findDOMNode;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
-
-/***/ },
-/* 94 */
-/***/ 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.
-        *
-        * @providesModule ReactDefaultBatchingStrategy
-        */
+       ReactDOMComponent.displayName = 'ReactDOMComponent';
        
-       'use strict';
+       ReactDOMComponent.Mixin = {
        
-       var ReactUpdates = __webpack_require__(56);
-       var Transaction = __webpack_require__(59);
+         /**
+          * Generates root tag markup then recurses. This method has side effects and
+          * is not idempotent.
+          *
+          * @internal
+          * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction
+          * @param {?ReactDOMComponent} the containing DOM component instance
+          * @param {?object} info about the host container
+          * @param {object} context
+          * @return {string} The computed markup.
+          */
+         mountComponent: function (transaction, hostParent, hostContainerInfo, context) {
+           var _this = this;
        
-       var assign = __webpack_require__(41);
-       var emptyFunction = __webpack_require__(17);
+           this._rootNodeID = globalIdCounter++;
+           this._domID = hostContainerInfo._idCounter++;
+           this._hostParent = hostParent;
+           this._hostContainerInfo = hostContainerInfo;
        
-       var RESET_BATCHED_UPDATES = {
-         initialize: emptyFunction,
-         close: function () {
-           ReactDefaultBatchingStrategy.isBatchingUpdates = false;
-         }
-       };
+           var props = this._currentElement.props;
        
-       var FLUSH_BATCHED_UPDATES = {
-         initialize: emptyFunction,
-         close: ReactUpdates.flushBatchedUpdates.bind(ReactUpdates)
-       };
+           switch (this._tag) {
+             case 'audio':
+             case 'form':
+             case 'iframe':
+             case 'img':
+             case 'link':
+             case 'object':
+             case 'source':
+             case 'video':
+               this._wrapperState = {
+                 listeners: null
+               };
+               transaction.getReactMountReady().enqueue(trapBubbledEventsLocal, this);
+               break;
+             case 'button':
+               props = ReactDOMButton.getHostProps(this, props, hostParent);
+               break;
+             case 'input':
+               ReactDOMInput.mountWrapper(this, props, hostParent);
+               props = ReactDOMInput.getHostProps(this, props);
+               transaction.getReactMountReady().enqueue(trapBubbledEventsLocal, this);
+               break;
+             case 'option':
+               ReactDOMOption.mountWrapper(this, props, hostParent);
+               props = ReactDOMOption.getHostProps(this, props);
+               break;
+             case 'select':
+               ReactDOMSelect.mountWrapper(this, props, hostParent);
+               props = ReactDOMSelect.getHostProps(this, props);
+               transaction.getReactMountReady().enqueue(trapBubbledEventsLocal, this);
+               break;
+             case 'textarea':
+               ReactDOMTextarea.mountWrapper(this, props, hostParent);
+               props = ReactDOMTextarea.getHostProps(this, props);
+               transaction.getReactMountReady().enqueue(trapBubbledEventsLocal, this);
+               break;
+           }
        
-       var TRANSACTION_WRAPPERS = [FLUSH_BATCHED_UPDATES, RESET_BATCHED_UPDATES];
+           assertValidProps(this, props);
        
-       function ReactDefaultBatchingStrategyTransaction() {
-         this.reinitializeTransaction();
-       }
+           // We create tags in the namespace of their parent container, except HTML
+           // tags get no namespace.
+           var namespaceURI;
+           var parentTag;
+           if (hostParent != null) {
+             namespaceURI = hostParent._namespaceURI;
+             parentTag = hostParent._tag;
+           } else if (hostContainerInfo._tag) {
+             namespaceURI = hostContainerInfo._namespaceURI;
+             parentTag = hostContainerInfo._tag;
+           }
+           if (namespaceURI == null || namespaceURI === DOMNamespaces.svg && parentTag === 'foreignobject') {
+             namespaceURI = DOMNamespaces.html;
+           }
+           if (namespaceURI === DOMNamespaces.html) {
+             if (this._tag === 'svg') {
+               namespaceURI = DOMNamespaces.svg;
+             } else if (this._tag === 'math') {
+               namespaceURI = DOMNamespaces.mathml;
+             }
+           }
+           this._namespaceURI = namespaceURI;
        
-       assign(ReactDefaultBatchingStrategyTransaction.prototype, Transaction.Mixin, {
-         getTransactionWrappers: function () {
-           return TRANSACTION_WRAPPERS;
-         }
-       });
+           if (process.env.NODE_ENV !== 'production') {
+             var parentInfo;
+             if (hostParent != null) {
+               parentInfo = hostParent._ancestorInfo;
+             } else if (hostContainerInfo._tag) {
+               parentInfo = hostContainerInfo._ancestorInfo;
+             }
+             if (parentInfo) {
+               // parentInfo should always be present except for the top-level
+               // component when server rendering
+               validateDOMNesting(this._tag, this, parentInfo);
+             }
+             this._ancestorInfo = validateDOMNesting.updatedAncestorInfo(parentInfo, this._tag, this);
+           }
        
-       var transaction = new ReactDefaultBatchingStrategyTransaction();
+           var mountImage;
+           if (transaction.useCreateElement) {
+             var ownerDocument = hostContainerInfo._ownerDocument;
+             var el;
+             if (namespaceURI === DOMNamespaces.html) {
+               if (this._tag === 'script') {
+                 // Create the script via .innerHTML so its "parser-inserted" flag is
+                 // set to true and it does not execute
+                 var div = ownerDocument.createElement('div');
+                 var type = this._currentElement.type;
+                 div.innerHTML = '<' + type + '></' + type + '>';
+                 el = div.removeChild(div.firstChild);
+               } else if (props.is) {
+                 el = ownerDocument.createElement(this._currentElement.type, props.is);
+               } else {
+                 // Separate else branch instead of using `props.is || undefined` above becuase of a Firefox bug.
+                 // See discussion in https://github.com/facebook/react/pull/6896
+                 // and discussion in https://bugzilla.mozilla.org/show_bug.cgi?id=1276240
+                 el = ownerDocument.createElement(this._currentElement.type);
+               }
+             } else {
+               el = ownerDocument.createElementNS(namespaceURI, this._currentElement.type);
+             }
+             ReactDOMComponentTree.precacheNode(this, el);
+             this._flags |= Flags.hasCachedChildNodes;
+             if (!this._hostParent) {
+               DOMPropertyOperations.setAttributeForRoot(el);
+             }
+             this._updateDOMProperties(null, props, transaction);
+             var lazyTree = DOMLazyTree(el);
+             this._createInitialChildren(transaction, props, context, lazyTree);
+             mountImage = lazyTree;
+           } else {
+             var tagOpen = this._createOpenTagMarkupAndPutListeners(transaction, props);
+             var tagContent = this._createContentMarkup(transaction, props, context);
+             if (!tagContent && omittedCloseTags[this._tag]) {
+               mountImage = tagOpen + '/>';
+             } else {
+               mountImage = tagOpen + '>' + tagContent + '</' + this._currentElement.type + '>';
+             }
+           }
        
-       var ReactDefaultBatchingStrategy = {
-         isBatchingUpdates: false,
-       
-         /**
-          * Call the provided function in a context within which calls to `setState`
-          * and friends are batched such that components aren't updated unnecessarily.
-          */
-         batchedUpdates: function (callback, a, b, c, d, e) {
-           var alreadyBatchingUpdates = ReactDefaultBatchingStrategy.isBatchingUpdates;
-       
-           ReactDefaultBatchingStrategy.isBatchingUpdates = true;
-       
-           // The code is written this way to avoid extra allocations
-           if (alreadyBatchingUpdates) {
-             callback(a, b, c, d, e);
-           } else {
-             transaction.perform(callback, null, a, b, c, d, e);
+           switch (this._tag) {
+             case 'input':
+               transaction.getReactMountReady().enqueue(inputPostMount, this);
+               if (props.autoFocus) {
+                 transaction.getReactMountReady().enqueue(AutoFocusUtils.focusDOMComponent, this);
+               }
+               break;
+             case 'textarea':
+               transaction.getReactMountReady().enqueue(textareaPostMount, this);
+               if (props.autoFocus) {
+                 transaction.getReactMountReady().enqueue(AutoFocusUtils.focusDOMComponent, this);
+               }
+               break;
+             case 'select':
+               if (props.autoFocus) {
+                 transaction.getReactMountReady().enqueue(AutoFocusUtils.focusDOMComponent, this);
+               }
+               break;
+             case 'button':
+               if (props.autoFocus) {
+                 transaction.getReactMountReady().enqueue(AutoFocusUtils.focusDOMComponent, this);
+               }
+               break;
+             case 'option':
+               transaction.getReactMountReady().enqueue(optionPostMount, this);
+               break;
            }
-         }
-       };
        
-       module.exports = ReactDefaultBatchingStrategy;
-
-/***/ },
-/* 95 */
-/***/ function(module, exports, __webpack_require__) {
-
-       /* WEBPACK VAR INJECTION */(function(process) {/**
-        * 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.
-        *
-        * @providesModule ReactDOMComponent
-        * @typechecks static-only
-        */
+           if (process.env.NODE_ENV !== 'production') {
+             if (this._debugID) {
+               var callback = function () {
+                 return ReactInstrumentation.debugTool.onComponentHasMounted(_this._debugID);
+               };
+               transaction.getReactMountReady().enqueue(callback, this);
+             }
+           }
        
-       /* global hasOwnProperty:true */
+           return mountImage;
+         },
        
-       'use strict';
+         /**
+          * Creates markup for the open tag and all attributes.
+          *
+          * This method has side effects because events get registered.
+          *
+          * Iterating over object properties is faster than iterating over arrays.
+          * @see http://jsperf.com/obj-vs-arr-iteration
+          *
+          * @private
+          * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction
+          * @param {object} props
+          * @return {string} Markup of opening tag.
+          */
+         _createOpenTagMarkupAndPutListeners: function (transaction, props) {
+           var ret = '<' + this._currentElement.type;
        
-       var AutoFocusUtils = __webpack_require__(96);
-       var CSSPropertyOperations = __webpack_require__(98);
-       var DOMProperty = __webpack_require__(25);
-       var DOMPropertyOperations = __webpack_require__(24);
-       var EventConstants = __webpack_require__(32);
-       var ReactBrowserEventEmitter = __webpack_require__(31);
-       var ReactComponentBrowserEnvironment = __webpack_require__(28);
-       var ReactDOMButton = __webpack_require__(106);
-       var ReactDOMInput = __webpack_require__(107);
-       var ReactDOMOption = __webpack_require__(111);
-       var ReactDOMSelect = __webpack_require__(114);
-       var ReactDOMTextarea = __webpack_require__(115);
-       var ReactMount = __webpack_require__(30);
-       var ReactMultiChild = __webpack_require__(116);
-       var ReactPerf = __webpack_require__(20);
-       var ReactUpdateQueue = __webpack_require__(55);
-       
-       var assign = __webpack_require__(41);
-       var canDefineProperty = __webpack_require__(45);
-       var escapeTextContentForBrowser = __webpack_require__(23);
-       var invariant = __webpack_require__(15);
-       var isEventSupported = __webpack_require__(42);
-       var keyOf = __webpack_require__(81);
-       var setInnerHTML = __webpack_require__(21);
-       var setTextContent = __webpack_require__(22);
-       var shallowEqual = __webpack_require__(119);
-       var validateDOMNesting = __webpack_require__(72);
-       var warning = __webpack_require__(27);
-       
-       var deleteListener = ReactBrowserEventEmitter.deleteListener;
-       var listenTo = ReactBrowserEventEmitter.listenTo;
-       var registrationNameModules = ReactBrowserEventEmitter.registrationNameModules;
+           for (var propKey in props) {
+             if (!props.hasOwnProperty(propKey)) {
+               continue;
+             }
+             var propValue = props[propKey];
+             if (propValue == null) {
+               continue;
+             }
+             if (registrationNameModules.hasOwnProperty(propKey)) {
+               if (propValue) {
+                 enqueuePutListener(this, propKey, propValue, transaction);
+               }
+             } else {
+               if (propKey === STYLE) {
+                 if (propValue) {
+                   if (process.env.NODE_ENV !== 'production') {
+                     // See `_updateDOMProperties`. style block
+                     this._previousStyle = propValue;
+                   }
+                   propValue = this._previousStyleCopy = _assign({}, props.style);
+                 }
+                 propValue = CSSPropertyOperations.createMarkupForStyles(propValue, this);
+               }
+               var markup = null;
+               if (this._tag != null && isCustomComponent(this._tag, props)) {
+                 if (!RESERVED_PROPS.hasOwnProperty(propKey)) {
+                   markup = DOMPropertyOperations.createMarkupForCustomAttribute(propKey, propValue);
+                 }
+               } else {
+                 markup = DOMPropertyOperations.createMarkupForProperty(propKey, propValue);
+               }
+               if (markup) {
+                 ret += ' ' + markup;
+               }
+             }
+           }
        
-       // For quickly matching children type, to test if can be treated as content.
-       var CONTENT_TYPES = { 'string': true, 'number': true };
+           // For static pages, no need to put React ID and checksum. Saves lots of
+           // bytes.
+           if (transaction.renderToStaticMarkup) {
+             return ret;
+           }
        
-       var CHILDREN = keyOf({ children: null });
-       var STYLE = keyOf({ style: null });
-       var HTML = keyOf({ __html: null });
+           if (!this._hostParent) {
+             ret += ' ' + DOMPropertyOperations.createMarkupForRoot();
+           }
+           ret += ' ' + DOMPropertyOperations.createMarkupForID(this._domID);
+           return ret;
+         },
        
-       var ELEMENT_NODE_TYPE = 1;
+         /**
+          * Creates markup for the content between the tags.
+          *
+          * @private
+          * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction
+          * @param {object} props
+          * @param {object} context
+          * @return {string} Content markup.
+          */
+         _createContentMarkup: function (transaction, props, context) {
+           var ret = '';
        
-       function getDeclarationErrorAddendum(internalInstance) {
-         if (internalInstance) {
-           var owner = internalInstance._currentElement._owner || null;
-           if (owner) {
-             var name = owner.getName();
-             if (name) {
-               return ' This DOM node was rendered by `' + name + '`.';
+           // Intentional use of != to avoid catching zero/false.
+           var innerHTML = props.dangerouslySetInnerHTML;
+           if (innerHTML != null) {
+             if (innerHTML.__html != null) {
+               ret = innerHTML.__html;
+             }
+           } else {
+             var contentToUse = CONTENT_TYPES[typeof props.children] ? props.children : null;
+             var childrenToUse = contentToUse != null ? null : props.children;
+             if (contentToUse != null) {
+               // TODO: Validate that text is allowed as a child of this node
+               ret = escapeTextContentForBrowser(contentToUse);
+               if (process.env.NODE_ENV !== 'production') {
+                 setContentChildForInstrumentation.call(this, contentToUse);
+               }
+             } else if (childrenToUse != null) {
+               var mountImages = this.mountChildren(childrenToUse, transaction, context);
+               ret = mountImages.join('');
              }
            }
-         }
-         return '';
-       }
+           if (newlineEatingTags[this._tag] && ret.charAt(0) === '\n') {
+             // text/html ignores the first character in these tags if it's a newline
+             // Prefer to break application/xml over text/html (for now) by adding
+             // a newline specifically to get eaten by the parser. (Alternately for
+             // textareas, replacing "^\n" with "\r\n" doesn't get eaten, and the first
+             // \r is normalized out by HTMLTextAreaElement#value.)
+             // See: <http://www.w3.org/TR/html-polyglot/#newlines-in-textarea-and-pre>
+             // See: <http://www.w3.org/TR/html5/syntax.html#element-restrictions>
+             // See: <http://www.w3.org/TR/html5/syntax.html#newlines>
+             // See: Parsing of "textarea" "listing" and "pre" elements
+             //  from <http://www.w3.org/TR/html5/syntax.html#parsing-main-inbody>
+             return '\n' + ret;
+           } else {
+             return ret;
+           }
+         },
        
-       var legacyPropsDescriptor;
-       if (process.env.NODE_ENV !== 'production') {
-         legacyPropsDescriptor = {
-           props: {
-             enumerable: false,
-             get: function () {
-               var component = this._reactInternalComponent;
-               process.env.NODE_ENV !== 'production' ? warning(false, 'ReactDOMComponent: Do not access .props of a DOM node; instead, ' + 'recreate the props as `render` did originally or read the DOM ' + 'properties/attributes directly from this node (e.g., ' + 'this.refs.box.className).%s', getDeclarationErrorAddendum(component)) : undefined;
-               return component._currentElement.props;
+         _createInitialChildren: function (transaction, props, context, lazyTree) {
+           // Intentional use of != to avoid catching zero/false.
+           var innerHTML = props.dangerouslySetInnerHTML;
+           if (innerHTML != null) {
+             if (innerHTML.__html != null) {
+               DOMLazyTree.queueHTML(lazyTree, innerHTML.__html);
+             }
+           } else {
+             var contentToUse = CONTENT_TYPES[typeof props.children] ? props.children : null;
+             var childrenToUse = contentToUse != null ? null : props.children;
+             if (contentToUse != null) {
+               // TODO: Validate that text is allowed as a child of this node
+               if (process.env.NODE_ENV !== 'production') {
+                 setContentChildForInstrumentation.call(this, contentToUse);
+               }
+               DOMLazyTree.queueText(lazyTree, contentToUse);
+             } else if (childrenToUse != null) {
+               var mountImages = this.mountChildren(childrenToUse, transaction, context);
+               for (var i = 0; i < mountImages.length; i++) {
+                 DOMLazyTree.queueChild(lazyTree, mountImages[i]);
+               }
              }
            }
-         };
-       }
+         },
        
-       function legacyGetDOMNode() {
-         if (process.env.NODE_ENV !== 'production') {
-           var component = this._reactInternalComponent;
-           process.env.NODE_ENV !== 'production' ? warning(false, 'ReactDOMComponent: Do not access .getDOMNode() of a DOM node; ' + 'instead, use the node directly.%s', getDeclarationErrorAddendum(component)) : undefined;
-         }
-         return this;
-       }
+         /**
+          * Receives a next element and updates the component.
+          *
+          * @internal
+          * @param {ReactElement} nextElement
+          * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction
+          * @param {object} context
+          */
+         receiveComponent: function (nextElement, transaction, context) {
+           var prevElement = this._currentElement;
+           this._currentElement = nextElement;
+           this.updateComponent(transaction, prevElement, nextElement, context);
+         },
        
-       function legacyIsMounted() {
-         var component = this._reactInternalComponent;
-         if (process.env.NODE_ENV !== 'production') {
-           process.env.NODE_ENV !== 'production' ? warning(false, 'ReactDOMComponent: Do not access .isMounted() of a DOM node.%s', getDeclarationErrorAddendum(component)) : undefined;
-         }
-         return !!component;
-       }
+         /**
+          * Updates a DOM component after it has already been allocated and
+          * attached to the DOM. Reconciles the root DOM node, then recurses.
+          *
+          * @param {ReactReconcileTransaction} transaction
+          * @param {ReactElement} prevElement
+          * @param {ReactElement} nextElement
+          * @internal
+          * @overridable
+          */
+         updateComponent: function (transaction, prevElement, nextElement, context) {
+           var _this2 = this;
        
-       function legacySetStateEtc() {
-         if (process.env.NODE_ENV !== 'production') {
-           var component = this._reactInternalComponent;
-           process.env.NODE_ENV !== 'production' ? warning(false, 'ReactDOMComponent: Do not access .setState(), .replaceState(), or ' + '.forceUpdate() of a DOM node. This is a no-op.%s', getDeclarationErrorAddendum(component)) : undefined;
-         }
-       }
+           var lastProps = prevElement.props;
+           var nextProps = this._currentElement.props;
        
-       function legacySetProps(partialProps, callback) {
-         var component = this._reactInternalComponent;
-         if (process.env.NODE_ENV !== 'production') {
-           process.env.NODE_ENV !== 'production' ? warning(false, 'ReactDOMComponent: Do not access .setProps() of a DOM node. ' + 'Instead, call ReactDOM.render again at the top level.%s', getDeclarationErrorAddendum(component)) : undefined;
-         }
-         if (!component) {
-           return;
-         }
-         ReactUpdateQueue.enqueueSetPropsInternal(component, partialProps);
-         if (callback) {
-           ReactUpdateQueue.enqueueCallbackInternal(component, callback);
-         }
-       }
+           switch (this._tag) {
+             case 'button':
+               lastProps = ReactDOMButton.getHostProps(this, lastProps);
+               nextProps = ReactDOMButton.getHostProps(this, nextProps);
+               break;
+             case 'input':
+               ReactDOMInput.updateWrapper(this);
+               lastProps = ReactDOMInput.getHostProps(this, lastProps);
+               nextProps = ReactDOMInput.getHostProps(this, nextProps);
+               break;
+             case 'option':
+               lastProps = ReactDOMOption.getHostProps(this, lastProps);
+               nextProps = ReactDOMOption.getHostProps(this, nextProps);
+               break;
+             case 'select':
+               lastProps = ReactDOMSelect.getHostProps(this, lastProps);
+               nextProps = ReactDOMSelect.getHostProps(this, nextProps);
+               break;
+             case 'textarea':
+               ReactDOMTextarea.updateWrapper(this);
+               lastProps = ReactDOMTextarea.getHostProps(this, lastProps);
+               nextProps = ReactDOMTextarea.getHostProps(this, nextProps);
+               break;
+           }
        
-       function legacyReplaceProps(partialProps, callback) {
-         var component = this._reactInternalComponent;
-         if (process.env.NODE_ENV !== 'production') {
-           process.env.NODE_ENV !== 'production' ? warning(false, 'ReactDOMComponent: Do not access .replaceProps() of a DOM node. ' + 'Instead, call ReactDOM.render again at the top level.%s', getDeclarationErrorAddendum(component)) : undefined;
-         }
-         if (!component) {
-           return;
-         }
-         ReactUpdateQueue.enqueueReplacePropsInternal(component, partialProps);
-         if (callback) {
-           ReactUpdateQueue.enqueueCallbackInternal(component, callback);
-         }
-       }
+           assertValidProps(this, nextProps);
+           this._updateDOMProperties(lastProps, nextProps, transaction);
+           this._updateDOMChildren(lastProps, nextProps, transaction, context);
        
-       function friendlyStringify(obj) {
-         if (typeof obj === 'object') {
-           if (Array.isArray(obj)) {
-             return '[' + obj.map(friendlyStringify).join(', ') + ']';
-           } else {
-             var pairs = [];
-             for (var key in obj) {
-               if (Object.prototype.hasOwnProperty.call(obj, key)) {
-                 var keyEscaped = /^[a-z$_][\w$_]*$/i.test(key) ? key : JSON.stringify(key);
-                 pairs.push(keyEscaped + ': ' + friendlyStringify(obj[key]));
+           if (this._tag === 'select') {
+             // <select> value update needs to occur after <option> children
+             // reconciliation
+             transaction.getReactMountReady().enqueue(postUpdateSelectWrapper, this);
+           }
+       
+           if (process.env.NODE_ENV !== 'production') {
+             if (this._debugID) {
+               var callback = function () {
+                 return ReactInstrumentation.debugTool.onComponentHasUpdated(_this2._debugID);
+               };
+               transaction.getReactMountReady().enqueue(callback, this);
+             }
+           }
+         },
+       
+         /**
+          * Reconciles the properties by detecting differences in property values and
+          * updating the DOM as necessary. This function is probably the single most
+          * critical path for performance optimization.
+          *
+          * TODO: Benchmark whether checking for changed values in memory actually
+          *       improves performance (especially statically positioned elements).
+          * TODO: Benchmark the effects of putting this at the top since 99% of props
+          *       do not change for a given reconciliation.
+          * TODO: Benchmark areas that can be improved with caching.
+          *
+          * @private
+          * @param {object} lastProps
+          * @param {object} nextProps
+          * @param {?DOMElement} node
+          */
+         _updateDOMProperties: function (lastProps, nextProps, transaction) {
+           var propKey;
+           var styleName;
+           var styleUpdates;
+           for (propKey in lastProps) {
+             if (nextProps.hasOwnProperty(propKey) || !lastProps.hasOwnProperty(propKey) || lastProps[propKey] == null) {
+               continue;
+             }
+             if (propKey === STYLE) {
+               var lastStyle = this._previousStyleCopy;
+               for (styleName in lastStyle) {
+                 if (lastStyle.hasOwnProperty(styleName)) {
+                   styleUpdates = styleUpdates || {};
+                   styleUpdates[styleName] = '';
+                 }
+               }
+               this._previousStyleCopy = null;
+             } else if (registrationNameModules.hasOwnProperty(propKey)) {
+               if (lastProps[propKey]) {
+                 // Only call deleteListener if there was a listener previously or
+                 // else willDeleteListener gets called when there wasn't actually a
+                 // listener (e.g., onClick={null})
+                 deleteListener(this, propKey);
+               }
+             } else if (isCustomComponent(this._tag, lastProps)) {
+               if (!RESERVED_PROPS.hasOwnProperty(propKey)) {
+                 DOMPropertyOperations.deleteValueForAttribute(getNode(this), propKey);
                }
+             } else if (DOMProperty.properties[propKey] || DOMProperty.isCustomAttribute(propKey)) {
+               DOMPropertyOperations.deleteValueForProperty(getNode(this), propKey);
              }
-             return '{' + pairs.join(', ') + '}';
            }
-         } else if (typeof obj === 'string') {
-           return JSON.stringify(obj);
-         } else if (typeof obj === 'function') {
-           return '[function object]';
-         }
-         // Differs from JSON.stringify in that undefined becauses undefined and that
-         // inf and nan don't become null
-         return String(obj);
-       }
+           for (propKey in nextProps) {
+             var nextProp = nextProps[propKey];
+             var lastProp = propKey === STYLE ? this._previousStyleCopy : lastProps != null ? lastProps[propKey] : undefined;
+             if (!nextProps.hasOwnProperty(propKey) || nextProp === lastProp || nextProp == null && lastProp == null) {
+               continue;
+             }
+             if (propKey === STYLE) {
+               if (nextProp) {
+                 if (process.env.NODE_ENV !== 'production') {
+                   checkAndWarnForMutatedStyle(this._previousStyleCopy, this._previousStyle, this);
+                   this._previousStyle = nextProp;
+                 }
+                 nextProp = this._previousStyleCopy = _assign({}, nextProp);
+               } else {
+                 this._previousStyleCopy = null;
+               }
+               if (lastProp) {
+                 // Unset styles on `lastProp` but not on `nextProp`.
+                 for (styleName in lastProp) {
+                   if (lastProp.hasOwnProperty(styleName) && (!nextProp || !nextProp.hasOwnProperty(styleName))) {
+                     styleUpdates = styleUpdates || {};
+                     styleUpdates[styleName] = '';
+                   }
+                 }
+                 // Update styles that changed since `lastProp`.
+                 for (styleName in nextProp) {
+                   if (nextProp.hasOwnProperty(styleName) && lastProp[styleName] !== nextProp[styleName]) {
+                     styleUpdates = styleUpdates || {};
+                     styleUpdates[styleName] = nextProp[styleName];
+                   }
+                 }
+               } else {
+                 // Relies on `updateStylesByID` not mutating `styleUpdates`.
+                 styleUpdates = nextProp;
+               }
+             } else if (registrationNameModules.hasOwnProperty(propKey)) {
+               if (nextProp) {
+                 enqueuePutListener(this, propKey, nextProp, transaction);
+               } else if (lastProp) {
+                 deleteListener(this, propKey);
+               }
+             } else if (isCustomComponent(this._tag, nextProps)) {
+               if (!RESERVED_PROPS.hasOwnProperty(propKey)) {
+                 DOMPropertyOperations.setValueForAttribute(getNode(this), propKey, nextProp);
+               }
+             } else if (DOMProperty.properties[propKey] || DOMProperty.isCustomAttribute(propKey)) {
+               var node = getNode(this);
+               // If we're updating to null or undefined, we should remove the property
+               // from the DOM node instead of inadvertently setting to a string. This
+               // brings us in line with the same behavior we have on initial render.
+               if (nextProp != null) {
+                 DOMPropertyOperations.setValueForProperty(node, propKey, nextProp);
+               } else {
+                 DOMPropertyOperations.deleteValueForProperty(node, propKey);
+               }
+             }
+           }
+           if (styleUpdates) {
+             CSSPropertyOperations.setValueForStyles(getNode(this), styleUpdates, this);
+           }
+         },
        
-       var styleMutationWarning = {};
+         /**
+          * Reconciles the children with the various properties that affect the
+          * children content.
+          *
+          * @param {object} lastProps
+          * @param {object} nextProps
+          * @param {ReactReconcileTransaction} transaction
+          * @param {object} context
+          */
+         _updateDOMChildren: function (lastProps, nextProps, transaction, context) {
+           var lastContent = CONTENT_TYPES[typeof lastProps.children] ? lastProps.children : null;
+           var nextContent = CONTENT_TYPES[typeof nextProps.children] ? nextProps.children : null;
        
-       function checkAndWarnForMutatedStyle(style1, style2, component) {
-         if (style1 == null || style2 == null) {
-           return;
-         }
-         if (shallowEqual(style1, style2)) {
-           return;
-         }
+           var lastHtml = lastProps.dangerouslySetInnerHTML && lastProps.dangerouslySetInnerHTML.__html;
+           var nextHtml = nextProps.dangerouslySetInnerHTML && nextProps.dangerouslySetInnerHTML.__html;
        
-         var componentName = component._tag;
-         var owner = component._currentElement._owner;
-         var ownerName;
-         if (owner) {
-           ownerName = owner.getName();
-         }
+           // Note the use of `!=` which checks for null or undefined.
+           var lastChildren = lastContent != null ? null : lastProps.children;
+           var nextChildren = nextContent != null ? null : nextProps.children;
        
-         var hash = ownerName + '|' + componentName;
+           // If we're switching from children to content/html or vice versa, remove
+           // the old content
+           var lastHasContentOrHtml = lastContent != null || lastHtml != null;
+           var nextHasContentOrHtml = nextContent != null || nextHtml != null;
+           if (lastChildren != null && nextChildren == null) {
+             this.updateChildren(null, transaction, context);
+           } else if (lastHasContentOrHtml && !nextHasContentOrHtml) {
+             this.updateTextContent('');
+             if (process.env.NODE_ENV !== 'production') {
+               ReactInstrumentation.debugTool.onSetChildren(this._debugID, []);
+             }
+           }
        
-         if (styleMutationWarning.hasOwnProperty(hash)) {
-           return;
-         }
+           if (nextContent != null) {
+             if (lastContent !== nextContent) {
+               this.updateTextContent('' + nextContent);
+               if (process.env.NODE_ENV !== 'production') {
+                 setContentChildForInstrumentation.call(this, nextContent);
+               }
+             }
+           } else if (nextHtml != null) {
+             if (lastHtml !== nextHtml) {
+               this.updateMarkup('' + nextHtml);
+             }
+             if (process.env.NODE_ENV !== 'production') {
+               ReactInstrumentation.debugTool.onSetChildren(this._debugID, []);
+             }
+           } else if (nextChildren != null) {
+             if (process.env.NODE_ENV !== 'production') {
+               setContentChildForInstrumentation.call(this, null);
+             }
        
-         styleMutationWarning[hash] = true;
+             this.updateChildren(nextChildren, transaction, context);
+           }
+         },
        
-         process.env.NODE_ENV !== 'production' ? warning(false, '`%s` was passed a style object that has previously been mutated. ' + 'Mutating `style` is deprecated. Consider cloning it beforehand. Check ' + 'the `render` %s. Previous style: %s. Mutated style: %s.', componentName, owner ? 'of `' + ownerName + '`' : 'using <' + componentName + '>', friendlyStringify(style1), friendlyStringify(style2)) : undefined;
-       }
+         getHostNode: function () {
+           return getNode(this);
+         },
        
-       /**
-        * @param {object} component
-        * @param {?object} props
-        */
-       function assertValidProps(component, props) {
-         if (!props) {
-           return;
-         }
-         // Note the use of `==` which checks for null or undefined.
-         if (process.env.NODE_ENV !== 'production') {
-           if (voidElementTags[component._tag]) {
-             process.env.NODE_ENV !== 'production' ? warning(props.children == null && props.dangerouslySetInnerHTML == null, '%s is a void element tag and must not have `children` or ' + 'use `props.dangerouslySetInnerHTML`.%s', component._tag, component._currentElement._owner ? ' Check the render method of ' + component._currentElement._owner.getName() + '.' : '') : undefined;
+         /**
+          * Destroys all event registrations for this instance. Does not remove from
+          * the DOM. That must be done by the parent.
+          *
+          * @internal
+          */
+         unmountComponent: function (safely) {
+           switch (this._tag) {
+             case 'audio':
+             case 'form':
+             case 'iframe':
+             case 'img':
+             case 'link':
+             case 'object':
+             case 'source':
+             case 'video':
+               var listeners = this._wrapperState.listeners;
+               if (listeners) {
+                 for (var i = 0; i < listeners.length; i++) {
+                   listeners[i].remove();
+                 }
+               }
+               break;
+             case 'html':
+             case 'head':
+             case 'body':
+               /**
+                * Components like <html> <head> and <body> can't be removed or added
+                * easily in a cross-browser way, however it's valuable to be able to
+                * take advantage of React's reconciliation for styling and <title>
+                * management. So we just document it and throw in dangerous cases.
+                */
+                true ? process.env.NODE_ENV !== 'production' ? invariant(false, '<%s> tried to unmount. Because of cross-browser quirks it is impossible to unmount some top-level components (eg <html>, <head>, and <body>) reliably and efficiently. To fix this, have a single top-level component that never unmounts render these elements.', this._tag) : _prodInvariant('66', this._tag) : void 0;
+               break;
            }
-         }
-         if (props.dangerouslySetInnerHTML != null) {
-           !(props.children == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Can only set one of `children` or `props.dangerouslySetInnerHTML`.') : invariant(false) : undefined;
-           !(typeof props.dangerouslySetInnerHTML === 'object' && HTML in props.dangerouslySetInnerHTML) ? process.env.NODE_ENV !== 'production' ? invariant(false, '`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. ' + 'Please visit https://fb.me/react-invariant-dangerously-set-inner-html ' + 'for more information.') : invariant(false) : undefined;
-         }
-         if (process.env.NODE_ENV !== 'production') {
-           process.env.NODE_ENV !== 'production' ? warning(props.innerHTML == null, 'Directly setting property `innerHTML` is not permitted. ' + 'For more information, lookup documentation on `dangerouslySetInnerHTML`.') : undefined;
-           process.env.NODE_ENV !== 'production' ? warning(!props.contentEditable || props.children == null, 'A component is `contentEditable` and contains `children` managed by ' + 'React. It is now your responsibility to guarantee that none of ' + 'those nodes are unexpectedly modified or duplicated. This is ' + 'probably not intentional.') : undefined;
-         }
-         !(props.style == null || typeof props.style === 'object') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'The `style` prop expects a mapping from style properties to values, ' + 'not a string. For example, style={{marginRight: spacing + \'em\'}} when ' + 'using JSX.%s', getDeclarationErrorAddendum(component)) : invariant(false) : undefined;
-       }
        
-       function enqueuePutListener(id, registrationName, listener, transaction) {
-         if (process.env.NODE_ENV !== 'production') {
-           // IE8 has no API for event capturing and the `onScroll` event doesn't
-           // bubble.
-           process.env.NODE_ENV !== 'production' ? warning(registrationName !== 'onScroll' || isEventSupported('scroll', true), 'This browser doesn\'t support the `onScroll` event') : undefined;
-         }
-         var container = ReactMount.findReactContainerForID(id);
-         if (container) {
-           var doc = container.nodeType === ELEMENT_NODE_TYPE ? container.ownerDocument : container;
-           listenTo(registrationName, doc);
-         }
-         transaction.getReactMountReady().enqueue(putListener, {
-           id: id,
-           registrationName: registrationName,
-           listener: listener
-         });
-       }
+           this.unmountChildren(safely);
+           ReactDOMComponentTree.uncacheNode(this);
+           EventPluginHub.deleteAllListeners(this);
+           ReactComponentBrowserEnvironment.unmountIDFromEnvironment(this._rootNodeID);
+           this._rootNodeID = null;
+           this._domID = null;
+           this._wrapperState = null;
        
-       function putListener() {
-         var listenerToPut = this;
-         ReactBrowserEventEmitter.putListener(listenerToPut.id, listenerToPut.registrationName, listenerToPut.listener);
-       }
-       
-       // There are so many media events, it makes sense to just
-       // maintain a list rather than create a `trapBubbledEvent` for each
-       var mediaEvents = {
-         topAbort: 'abort',
-         topCanPlay: 'canplay',
-         topCanPlayThrough: 'canplaythrough',
-         topDurationChange: 'durationchange',
-         topEmptied: 'emptied',
-         topEncrypted: 'encrypted',
-         topEnded: 'ended',
-         topError: 'error',
-         topLoadedData: 'loadeddata',
-         topLoadedMetadata: 'loadedmetadata',
-         topLoadStart: 'loadstart',
-         topPause: 'pause',
-         topPlay: 'play',
-         topPlaying: 'playing',
-         topProgress: 'progress',
-         topRateChange: 'ratechange',
-         topSeeked: 'seeked',
-         topSeeking: 'seeking',
-         topStalled: 'stalled',
-         topSuspend: 'suspend',
-         topTimeUpdate: 'timeupdate',
-         topVolumeChange: 'volumechange',
-         topWaiting: 'waiting'
-       };
-       
-       function trapBubbledEventsLocal() {
-         var inst = this;
-         // If a component renders to null or if another component fatals and causes
-         // the state of the tree to be corrupted, `node` here can be null.
-         !inst._rootNodeID ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Must be mounted to trap events') : invariant(false) : undefined;
-         var node = ReactMount.getNode(inst._rootNodeID);
-         !node ? process.env.NODE_ENV !== 'production' ? invariant(false, 'trapBubbledEvent(...): Requires node to be rendered.') : invariant(false) : undefined;
-       
-         switch (inst._tag) {
-           case 'iframe':
-             inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topLoad, 'load', node)];
-             break;
-           case 'video':
-           case 'audio':
-       
-             inst._wrapperState.listeners = [];
-             // create listener for each media event
-             for (var event in mediaEvents) {
-               if (mediaEvents.hasOwnProperty(event)) {
-                 inst._wrapperState.listeners.push(ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes[event], mediaEvents[event], node));
-               }
-             }
+           if (process.env.NODE_ENV !== 'production') {
+             setContentChildForInstrumentation.call(this, null);
+           }
+         },
        
-             break;
-           case 'img':
-             inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topError, 'error', node), ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topLoad, 'load', node)];
-             break;
-           case 'form':
-             inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topReset, 'reset', node), ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topSubmit, 'submit', node)];
-             break;
+         getPublicInstance: function () {
+           return getNode(this);
          }
-       }
-       
-       function mountReadyInputWrapper() {
-         ReactDOMInput.mountReadyWrapper(this);
-       }
-       
-       function postUpdateSelectWrapper() {
-         ReactDOMSelect.postUpdateWrapper(this);
-       }
-       
-       // For HTML, certain tags should omit their close tag. We keep a whitelist for
-       // those special cased tags.
        
-       var omittedCloseTags = {
-         'area': true,
-         'base': true,
-         'br': true,
-         'col': true,
-         'embed': true,
-         'hr': true,
-         'img': true,
-         'input': true,
-         'keygen': true,
-         'link': true,
-         'meta': true,
-         'param': true,
-         'source': true,
-         'track': true,
-         'wbr': true
        };
        
-       // NOTE: menuitem's close tag should be omitted, but that causes problems.
-       var newlineEatingTags = {
-         'listing': true,
-         'pre': true,
-         'textarea': true
-       };
+       _assign(ReactDOMComponent.prototype, ReactDOMComponent.Mixin, ReactMultiChild.Mixin);
        
-       // For HTML, certain tags cannot have children. This has the same purpose as
-       // `omittedCloseTags` except that `menuitem` should still have its closing tag.
+       module.exports = ReactDOMComponent;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
+
+/***/ },
+/* 98 */
+/***/ function(module, exports, __webpack_require__) {
+
+       /**
+        * Copyright 2013-present, 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.
+        *
+        * @providesModule AutoFocusUtils
+        */
        
-       var voidElementTags = assign({
-         'menuitem': true
-       }, omittedCloseTags);
+       'use strict';
        
-       // We accept any tag to be rendered but since this gets injected into arbitrary
-       // HTML, we want to make sure that it's a safe tag.
-       // http://www.w3.org/TR/REC-xml/#NT-Name
+       var ReactDOMComponentTree = __webpack_require__(39);
        
-       var VALID_TAG_REGEX = /^[a-zA-Z][a-zA-Z:_\.\-\d]*$/; // Simplified subset
-       var validatedTagCache = {};
-       var hasOwnProperty = ({}).hasOwnProperty;
+       var focusNode = __webpack_require__(99);
        
-       function validateDangerousTag(tag) {
-         if (!hasOwnProperty.call(validatedTagCache, tag)) {
-           !VALID_TAG_REGEX.test(tag) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Invalid tag: %s', tag) : invariant(false) : undefined;
-           validatedTagCache[tag] = true;
+       var AutoFocusUtils = {
+         focusDOMComponent: function () {
+           focusNode(ReactDOMComponentTree.getNodeFromInstance(this));
          }
-       }
+       };
        
-       function processChildContextDev(context, inst) {
-         // Pass down our tag name to child components for validation purposes
-         context = assign({}, context);
-         var info = context[validateDOMNesting.ancestorInfoContextKey];
-         context[validateDOMNesting.ancestorInfoContextKey] = validateDOMNesting.updatedAncestorInfo(info, inst._tag, inst);
-         return context;
-       }
+       module.exports = AutoFocusUtils;
+
+/***/ },
+/* 99 */
+/***/ function(module, exports) {
+
+       /**
+        * Copyright (c) 2013-present, 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.
+        *
+        */
        
-       function isCustomComponent(tagName, props) {
-         return tagName.indexOf('-') >= 0 || props.is != null;
-       }
+       'use strict';
        
        /**
-        * Creates a new React class that is idempotent and capable of containing other
-        * React components. It accepts event listeners and DOM properties that are
-        * valid according to `DOMProperty`.
-        *
-        *  - Event listeners: `onClick`, `onMouseDown`, etc.
-        *  - DOM properties: `className`, `name`, `title`, etc.
+        * @param {DOMElement} node input/textarea to focus
+        */
+       
+       function focusNode(node) {
+         // IE8 can throw "Can't move focus to the control because it is invisible,
+         // not enabled, or of a type that does not accept the focus." for all kinds of
+         // reasons that are too expensive and fragile to test.
+         try {
+           node.focus();
+         } catch (e) {}
+       }
+       
+       module.exports = focusNode;
+
+/***/ },
+/* 100 */
+/***/ function(module, exports, __webpack_require__) {
+
+       /* WEBPACK VAR INJECTION */(function(process) {/**
+        * Copyright 2013-present, Facebook, Inc.
+        * All rights reserved.
         *
-        * The `style` property functions differently from the DOM API. It accepts an
-        * object mapping of style properties to values.
+        * 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.
         *
-        * @constructor ReactDOMComponent
-        * @extends ReactMultiChild
+        * @providesModule CSSPropertyOperations
         */
-       function ReactDOMComponent(tag) {
-         validateDangerousTag(tag);
-         this._tag = tag.toLowerCase();
-         this._renderedChildren = null;
-         this._previousStyle = null;
-         this._previousStyleCopy = null;
-         this._rootNodeID = null;
-         this._wrapperState = null;
-         this._topLevelWrapper = null;
-         this._nodeWithLegacyProperties = null;
-         if (process.env.NODE_ENV !== 'production') {
-           this._unprocessedContextDev = null;
-           this._processedContextDev = null;
+       
+       'use strict';
+       
+       var CSSProperty = __webpack_require__(101);
+       var ExecutionEnvironment = __webpack_require__(52);
+       var ReactInstrumentation = __webpack_require__(65);
+       
+       var camelizeStyleName = __webpack_require__(102);
+       var dangerousStyleValue = __webpack_require__(104);
+       var hyphenateStyleName = __webpack_require__(105);
+       var memoizeStringOnly = __webpack_require__(107);
+       var warning = __webpack_require__(13);
+       
+       var processStyleName = memoizeStringOnly(function (styleName) {
+         return hyphenateStyleName(styleName);
+       });
+       
+       var hasShorthandPropertyBug = false;
+       var styleFloatAccessor = 'cssFloat';
+       if (ExecutionEnvironment.canUseDOM) {
+         var tempStyle = document.createElement('div').style;
+         try {
+           // IE8 throws "Invalid argument." if resetting shorthand style properties.
+           tempStyle.font = '';
+         } catch (e) {
+           hasShorthandPropertyBug = true;
+         }
+         // IE8 only supports accessing cssFloat (standard) as styleFloat
+         if (document.documentElement.style.cssFloat === undefined) {
+           styleFloatAccessor = 'styleFloat';
          }
        }
        
-       ReactDOMComponent.displayName = 'ReactDOMComponent';
+       if (process.env.NODE_ENV !== 'production') {
+         // 'msTransform' is correct, but the other prefixes should be capitalized
+         var badVendoredStyleNamePattern = /^(?:webkit|moz|o)[A-Z]/;
        
-       ReactDOMComponent.Mixin = {
+         // style values shouldn't contain a semicolon
+         var badStyleValueWithSemicolonPattern = /;\s*$/;
        
-         construct: function (element) {
-           this._currentElement = element;
-         },
+         var warnedStyleNames = {};
+         var warnedStyleValues = {};
+         var warnedForNaNValue = false;
        
-         /**
-          * Generates root tag markup then recurses. This method has side effects and
-          * is not idempotent.
-          *
-          * @internal
-          * @param {string} rootID The root DOM ID for this node.
-          * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction
-          * @param {object} context
-          * @return {string} The computed markup.
-          */
-         mountComponent: function (rootID, transaction, context) {
-           this._rootNodeID = rootID;
+         var warnHyphenatedStyleName = function (name, owner) {
+           if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {
+             return;
+           }
        
-           var props = this._currentElement.props;
+           warnedStyleNames[name] = true;
+           process.env.NODE_ENV !== 'production' ? warning(false, 'Unsupported style property %s. Did you mean %s?%s', name, camelizeStyleName(name), checkRenderMessage(owner)) : void 0;
+         };
        
-           switch (this._tag) {
-             case 'iframe':
-             case 'img':
-             case 'form':
-             case 'video':
-             case 'audio':
-               this._wrapperState = {
-                 listeners: null
-               };
-               transaction.getReactMountReady().enqueue(trapBubbledEventsLocal, this);
-               break;
-             case 'button':
-               props = ReactDOMButton.getNativeProps(this, props, context);
-               break;
-             case 'input':
-               ReactDOMInput.mountWrapper(this, props, context);
-               props = ReactDOMInput.getNativeProps(this, props, context);
-               break;
-             case 'option':
-               ReactDOMOption.mountWrapper(this, props, context);
-               props = ReactDOMOption.getNativeProps(this, props, context);
-               break;
-             case 'select':
-               ReactDOMSelect.mountWrapper(this, props, context);
-               props = ReactDOMSelect.getNativeProps(this, props, context);
-               context = ReactDOMSelect.processChildContext(this, props, context);
-               break;
-             case 'textarea':
-               ReactDOMTextarea.mountWrapper(this, props, context);
-               props = ReactDOMTextarea.getNativeProps(this, props, context);
-               break;
+         var warnBadVendoredStyleName = function (name, owner) {
+           if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {
+             return;
            }
        
-           assertValidProps(this, props);
-           if (process.env.NODE_ENV !== 'production') {
-             if (context[validateDOMNesting.ancestorInfoContextKey]) {
-               validateDOMNesting(this._tag, this, context[validateDOMNesting.ancestorInfoContextKey]);
-             }
+           warnedStyleNames[name] = true;
+           process.env.NODE_ENV !== 'production' ? warning(false, 'Unsupported vendor-prefixed style property %s. Did you mean %s?%s', name, name.charAt(0).toUpperCase() + name.slice(1), checkRenderMessage(owner)) : void 0;
+         };
+       
+         var warnStyleValueWithSemicolon = function (name, value, owner) {
+           if (warnedStyleValues.hasOwnProperty(value) && warnedStyleValues[value]) {
+             return;
            }
        
-           if (process.env.NODE_ENV !== 'production') {
-             this._unprocessedContextDev = context;
-             this._processedContextDev = processChildContextDev(context, this);
-             context = this._processedContextDev;
+           warnedStyleValues[value] = true;
+           process.env.NODE_ENV !== 'production' ? warning(false, 'Style property values shouldn\'t contain a semicolon.%s ' + 'Try "%s: %s" instead.', checkRenderMessage(owner), name, value.replace(badStyleValueWithSemicolonPattern, '')) : void 0;
+         };
+       
+         var warnStyleValueIsNaN = function (name, value, owner) {
+           if (warnedForNaNValue) {
+             return;
            }
        
-           var mountImage;
-           if (transaction.useCreateElement) {
-             var ownerDocument = context[ReactMount.ownerDocumentContextKey];
-             var el = ownerDocument.createElement(this._currentElement.type);
-             DOMPropertyOperations.setAttributeForID(el, this._rootNodeID);
-             // Populate node cache
-             ReactMount.getID(el);
-             this._updateDOMProperties({}, props, transaction, el);
-             this._createInitialChildren(transaction, props, context, el);
-             mountImage = el;
-           } else {
-             var tagOpen = this._createOpenTagMarkupAndPutListeners(transaction, props);
-             var tagContent = this._createContentMarkup(transaction, props, context);
-             if (!tagContent && omittedCloseTags[this._tag]) {
-               mountImage = tagOpen + '/>';
-             } else {
-               mountImage = tagOpen + '>' + tagContent + '</' + this._currentElement.type + '>';
+           warnedForNaNValue = true;
+           process.env.NODE_ENV !== 'production' ? warning(false, '`NaN` is an invalid value for the `%s` css style property.%s', name, checkRenderMessage(owner)) : void 0;
+         };
+       
+         var checkRenderMessage = function (owner) {
+           if (owner) {
+             var name = owner.getName();
+             if (name) {
+               return ' Check the render method of `' + name + '`.';
              }
            }
+           return '';
+         };
        
-           switch (this._tag) {
-             case 'input':
-               transaction.getReactMountReady().enqueue(mountReadyInputWrapper, this);
-             // falls through
-             case 'button':
-             case 'select':
-             case 'textarea':
-               if (props.autoFocus) {
-                 transaction.getReactMountReady().enqueue(AutoFocusUtils.focusDOMComponent, this);
-               }
-               break;
+         /**
+          * @param {string} name
+          * @param {*} value
+          * @param {ReactDOMComponent} component
+          */
+         var warnValidStyle = function (name, value, component) {
+           var owner;
+           if (component) {
+             owner = component._currentElement._owner;
+           }
+           if (name.indexOf('-') > -1) {
+             warnHyphenatedStyleName(name, owner);
+           } else if (badVendoredStyleNamePattern.test(name)) {
+             warnBadVendoredStyleName(name, owner);
+           } else if (badStyleValueWithSemicolonPattern.test(value)) {
+             warnStyleValueWithSemicolon(name, value, owner);
            }
        
-           return mountImage;
-         },
+           if (typeof value === 'number' && isNaN(value)) {
+             warnStyleValueIsNaN(name, value, owner);
+           }
+         };
+       }
+       
+       /**
+        * Operations for dealing with CSS properties.
+        */
+       var CSSPropertyOperations = {
        
          /**
-          * Creates markup for the open tag and all attributes.
+          * Serializes a mapping of style properties for use as inline styles:
           *
-          * This method has side effects because events get registered.
+          *   > createMarkupForStyles({width: '200px', height: 0})
+          *   "width:200px;height:0;"
           *
-          * Iterating over object properties is faster than iterating over arrays.
-          * @see http://jsperf.com/obj-vs-arr-iteration
+          * Undefined values are ignored so that declarative programming is easier.
+          * The result should be HTML-escaped before insertion into the DOM.
           *
-          * @private
-          * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction
-          * @param {object} props
-          * @return {string} Markup of opening tag.
+          * @param {object} styles
+          * @param {ReactDOMComponent} component
+          * @return {?string}
           */
-         _createOpenTagMarkupAndPutListeners: function (transaction, props) {
-           var ret = '<' + this._currentElement.type;
-       
-           for (var propKey in props) {
-             if (!props.hasOwnProperty(propKey)) {
+         createMarkupForStyles: function (styles, component) {
+           var serialized = '';
+           for (var styleName in styles) {
+             if (!styles.hasOwnProperty(styleName)) {
                continue;
              }
-             var propValue = props[propKey];
-             if (propValue == null) {
-               continue;
+             var styleValue = styles[styleName];
+             if (process.env.NODE_ENV !== 'production') {
+               warnValidStyle(styleName, styleValue, component);
              }
-             if (registrationNameModules.hasOwnProperty(propKey)) {
-               if (propValue) {
-                 enqueuePutListener(this._rootNodeID, propKey, propValue, transaction);
-               }
-             } else {
-               if (propKey === STYLE) {
-                 if (propValue) {
-                   if (process.env.NODE_ENV !== 'production') {
-                     // See `_updateDOMProperties`. style block
-                     this._previousStyle = propValue;
-                   }
-                   propValue = this._previousStyleCopy = assign({}, props.style);
-                 }
-                 propValue = CSSPropertyOperations.createMarkupForStyles(propValue);
-               }
-               var markup = null;
-               if (this._tag != null && isCustomComponent(this._tag, props)) {
-                 if (propKey !== CHILDREN) {
-                   markup = DOMPropertyOperations.createMarkupForCustomAttribute(propKey, propValue);
-                 }
-               } else {
-                 markup = DOMPropertyOperations.createMarkupForProperty(propKey, propValue);
-               }
-               if (markup) {
-                 ret += ' ' + markup;
-               }
+             if (styleValue != null) {
+               serialized += processStyleName(styleName) + ':';
+               serialized += dangerousStyleValue(styleName, styleValue, component) + ';';
              }
            }
-       
-           // For static pages, no need to put React ID and checksum. Saves lots of
-           // bytes.
-           if (transaction.renderToStaticMarkup) {
-             return ret;
-           }
-       
-           var markupForID = DOMPropertyOperations.createMarkupForID(this._rootNodeID);
-           return ret + ' ' + markupForID;
+           return serialized || null;
          },
        
          /**
-          * Creates markup for the content between the tags.
+          * Sets the value for multiple styles on a node.  If a value is specified as
+          * '' (empty string), the corresponding style property will be unset.
           *
-          * @private
-          * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction
-          * @param {object} props
-          * @param {object} context
-          * @return {string} Content markup.
+          * @param {DOMElement} node
+          * @param {object} styles
+          * @param {ReactDOMComponent} component
           */
-         _createContentMarkup: function (transaction, props, context) {
-           var ret = '';
+         setValueForStyles: function (node, styles, component) {
+           if (process.env.NODE_ENV !== 'production') {
+             ReactInstrumentation.debugTool.onHostOperation(component._debugID, 'update styles', styles);
+           }
        
-           // Intentional use of != to avoid catching zero/false.
-           var innerHTML = props.dangerouslySetInnerHTML;
-           if (innerHTML != null) {
-             if (innerHTML.__html != null) {
-               ret = innerHTML.__html;
+           var style = node.style;
+           for (var styleName in styles) {
+             if (!styles.hasOwnProperty(styleName)) {
+               continue;
              }
-           } else {
-             var contentToUse = CONTENT_TYPES[typeof props.children] ? props.children : null;
-             var childrenToUse = contentToUse != null ? null : props.children;
-             if (contentToUse != null) {
-               // TODO: Validate that text is allowed as a child of this node
-               ret = escapeTextContentForBrowser(contentToUse);
-             } else if (childrenToUse != null) {
-               var mountImages = this.mountChildren(childrenToUse, transaction, context);
-               ret = mountImages.join('');
+             if (process.env.NODE_ENV !== 'production') {
+               warnValidStyle(styleName, styles[styleName], component);
              }
-           }
-           if (newlineEatingTags[this._tag] && ret.charAt(0) === '\n') {
-             // text/html ignores the first character in these tags if it's a newline
-             // Prefer to break application/xml over text/html (for now) by adding
-             // a newline specifically to get eaten by the parser. (Alternately for
-             // textareas, replacing "^\n" with "\r\n" doesn't get eaten, and the first
-             // \r is normalized out by HTMLTextAreaElement#value.)
-             // See: <http://www.w3.org/TR/html-polyglot/#newlines-in-textarea-and-pre>
-             // See: <http://www.w3.org/TR/html5/syntax.html#element-restrictions>
-             // See: <http://www.w3.org/TR/html5/syntax.html#newlines>
-             // See: Parsing of "textarea" "listing" and "pre" elements
-             //  from <http://www.w3.org/TR/html5/syntax.html#parsing-main-inbody>
-             return '\n' + ret;
-           } else {
-             return ret;
-           }
-         },
-       
-         _createInitialChildren: function (transaction, props, context, el) {
-           // Intentional use of != to avoid catching zero/false.
-           var innerHTML = props.dangerouslySetInnerHTML;
-           if (innerHTML != null) {
-             if (innerHTML.__html != null) {
-               setInnerHTML(el, innerHTML.__html);
+             var styleValue = dangerousStyleValue(styleName, styles[styleName], component);
+             if (styleName === 'float' || styleName === 'cssFloat') {
+               styleName = styleFloatAccessor;
              }
-           } else {
-             var contentToUse = CONTENT_TYPES[typeof props.children] ? props.children : null;
-             var childrenToUse = contentToUse != null ? null : props.children;
-             if (contentToUse != null) {
-               // TODO: Validate that text is allowed as a child of this node
-               setTextContent(el, contentToUse);
-             } else if (childrenToUse != null) {
-               var mountImages = this.mountChildren(childrenToUse, transaction, context);
-               for (var i = 0; i < mountImages.length; i++) {
-                 el.appendChild(mountImages[i]);
+             if (styleValue) {
+               style[styleName] = styleValue;
+             } else {
+               var expansion = hasShorthandPropertyBug && CSSProperty.shorthandPropertyExpansions[styleName];
+               if (expansion) {
+                 // Shorthand property that IE8 won't like unsetting, so unset each
+                 // component to placate it
+                 for (var individualStyleName in expansion) {
+                   style[individualStyleName] = '';
+                 }
+               } else {
+                 style[styleName] = '';
                }
              }
            }
-         },
-       
-         /**
-          * Receives a next element and updates the component.
-          *
-          * @internal
-          * @param {ReactElement} nextElement
-          * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction
-          * @param {object} context
-          */
-         receiveComponent: function (nextElement, transaction, context) {
-           var prevElement = this._currentElement;
-           this._currentElement = nextElement;
-           this.updateComponent(transaction, prevElement, nextElement, context);
-         },
+         }
        
-         /**
-          * Updates a native DOM component after it has already been allocated and
-          * attached to the DOM. Reconciles the root DOM node, then recurses.
-          *
-          * @param {ReactReconcileTransaction} transaction
-          * @param {ReactElement} prevElement
-          * @param {ReactElement} nextElement
-          * @internal
-          * @overridable
-          */
-         updateComponent: function (transaction, prevElement, nextElement, context) {
-           var lastProps = prevElement.props;
-           var nextProps = this._currentElement.props;
+       };
        
-           switch (this._tag) {
-             case 'button':
-               lastProps = ReactDOMButton.getNativeProps(this, lastProps);
-               nextProps = ReactDOMButton.getNativeProps(this, nextProps);
-               break;
-             case 'input':
-               ReactDOMInput.updateWrapper(this);
-               lastProps = ReactDOMInput.getNativeProps(this, lastProps);
-               nextProps = ReactDOMInput.getNativeProps(this, nextProps);
-               break;
-             case 'option':
-               lastProps = ReactDOMOption.getNativeProps(this, lastProps);
-               nextProps = ReactDOMOption.getNativeProps(this, nextProps);
-               break;
-             case 'select':
-               lastProps = ReactDOMSelect.getNativeProps(this, lastProps);
-               nextProps = ReactDOMSelect.getNativeProps(this, nextProps);
-               break;
-             case 'textarea':
-               ReactDOMTextarea.updateWrapper(this);
-               lastProps = ReactDOMTextarea.getNativeProps(this, lastProps);
-               nextProps = ReactDOMTextarea.getNativeProps(this, nextProps);
-               break;
-           }
+       module.exports = CSSPropertyOperations;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
+
+/***/ },
+/* 101 */
+/***/ function(module, exports) {
+
+       /**
+        * Copyright 2013-present, 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.
+        *
+        * @providesModule CSSProperty
+        */
        
-           if (process.env.NODE_ENV !== 'production') {
-             // If the context is reference-equal to the old one, pass down the same
-             // processed object so the update bailout in ReactReconciler behaves
-             // correctly (and identically in dev and prod). See #5005.
-             if (this._unprocessedContextDev !== context) {
-               this._unprocessedContextDev = context;
-               this._processedContextDev = processChildContextDev(context, this);
-             }
-             context = this._processedContextDev;
-           }
+       'use strict';
        
-           assertValidProps(this, nextProps);
-           this._updateDOMProperties(lastProps, nextProps, transaction, null);
-           this._updateDOMChildren(lastProps, nextProps, transaction, context);
-       
-           if (!canDefineProperty && this._nodeWithLegacyProperties) {
-             this._nodeWithLegacyProperties.props = nextProps;
-           }
-       
-           if (this._tag === 'select') {
-             // <select> value update needs to occur after <option> children
-             // reconciliation
-             transaction.getReactMountReady().enqueue(postUpdateSelectWrapper, this);
-           }
-         },
+       /**
+        * CSS properties which accept numbers but are not in units of "px".
+        */
        
-         /**
-          * Reconciles the properties by detecting differences in property values and
-          * updating the DOM as necessary. This function is probably the single most
-          * critical path for performance optimization.
-          *
-          * TODO: Benchmark whether checking for changed values in memory actually
-          *       improves performance (especially statically positioned elements).
-          * TODO: Benchmark the effects of putting this at the top since 99% of props
-          *       do not change for a given reconciliation.
-          * TODO: Benchmark areas that can be improved with caching.
-          *
-          * @private
-          * @param {object} lastProps
-          * @param {object} nextProps
-          * @param {ReactReconcileTransaction} transaction
-          * @param {?DOMElement} node
-          */
-         _updateDOMProperties: function (lastProps, nextProps, transaction, node) {
-           var propKey;
-           var styleName;
-           var styleUpdates;
-           for (propKey in lastProps) {
-             if (nextProps.hasOwnProperty(propKey) || !lastProps.hasOwnProperty(propKey)) {
-               continue;
-             }
-             if (propKey === STYLE) {
-               var lastStyle = this._previousStyleCopy;
-               for (styleName in lastStyle) {
-                 if (lastStyle.hasOwnProperty(styleName)) {
-                   styleUpdates = styleUpdates || {};
-                   styleUpdates[styleName] = '';
-                 }
-               }
-               this._previousStyleCopy = null;
-             } else if (registrationNameModules.hasOwnProperty(propKey)) {
-               if (lastProps[propKey]) {
-                 // Only call deleteListener if there was a listener previously or
-                 // else willDeleteListener gets called when there wasn't actually a
-                 // listener (e.g., onClick={null})
-                 deleteListener(this._rootNodeID, propKey);
-               }
-             } else if (DOMProperty.properties[propKey] || DOMProperty.isCustomAttribute(propKey)) {
-               if (!node) {
-                 node = ReactMount.getNode(this._rootNodeID);
-               }
-               DOMPropertyOperations.deleteValueForProperty(node, propKey);
-             }
-           }
-           for (propKey in nextProps) {
-             var nextProp = nextProps[propKey];
-             var lastProp = propKey === STYLE ? this._previousStyleCopy : lastProps[propKey];
-             if (!nextProps.hasOwnProperty(propKey) || nextProp === lastProp) {
-               continue;
-             }
-             if (propKey === STYLE) {
-               if (nextProp) {
-                 if (process.env.NODE_ENV !== 'production') {
-                   checkAndWarnForMutatedStyle(this._previousStyleCopy, this._previousStyle, this);
-                   this._previousStyle = nextProp;
-                 }
-                 nextProp = this._previousStyleCopy = assign({}, nextProp);
-               } else {
-                 this._previousStyleCopy = null;
-               }
-               if (lastProp) {
-                 // Unset styles on `lastProp` but not on `nextProp`.
-                 for (styleName in lastProp) {
-                   if (lastProp.hasOwnProperty(styleName) && (!nextProp || !nextProp.hasOwnProperty(styleName))) {
-                     styleUpdates = styleUpdates || {};
-                     styleUpdates[styleName] = '';
-                   }
-                 }
-                 // Update styles that changed since `lastProp`.
-                 for (styleName in nextProp) {
-                   if (nextProp.hasOwnProperty(styleName) && lastProp[styleName] !== nextProp[styleName]) {
-                     styleUpdates = styleUpdates || {};
-                     styleUpdates[styleName] = nextProp[styleName];
-                   }
-                 }
-               } else {
-                 // Relies on `updateStylesByID` not mutating `styleUpdates`.
-                 styleUpdates = nextProp;
-               }
-             } else if (registrationNameModules.hasOwnProperty(propKey)) {
-               if (nextProp) {
-                 enqueuePutListener(this._rootNodeID, propKey, nextProp, transaction);
-               } else if (lastProp) {
-                 deleteListener(this._rootNodeID, propKey);
-               }
-             } else if (isCustomComponent(this._tag, nextProps)) {
-               if (!node) {
-                 node = ReactMount.getNode(this._rootNodeID);
-               }
-               if (propKey === CHILDREN) {
-                 nextProp = null;
-               }
-               DOMPropertyOperations.setValueForAttribute(node, propKey, nextProp);
-             } else if (DOMProperty.properties[propKey] || DOMProperty.isCustomAttribute(propKey)) {
-               if (!node) {
-                 node = ReactMount.getNode(this._rootNodeID);
-               }
-               // If we're updating to null or undefined, we should remove the property
-               // from the DOM node instead of inadvertantly setting to a string. This
-               // brings us in line with the same behavior we have on initial render.
-               if (nextProp != null) {
-                 DOMPropertyOperations.setValueForProperty(node, propKey, nextProp);
-               } else {
-                 DOMPropertyOperations.deleteValueForProperty(node, propKey);
-               }
-             }
-           }
-           if (styleUpdates) {
-             if (!node) {
-               node = ReactMount.getNode(this._rootNodeID);
-             }
-             CSSPropertyOperations.setValueForStyles(node, styleUpdates);
-           }
-         },
+       var isUnitlessNumber = {
+         animationIterationCount: true,
+         borderImageOutset: true,
+         borderImageSlice: true,
+         borderImageWidth: true,
+         boxFlex: true,
+         boxFlexGroup: true,
+         boxOrdinalGroup: true,
+         columnCount: true,
+         flex: true,
+         flexGrow: true,
+         flexPositive: true,
+         flexShrink: true,
+         flexNegative: true,
+         flexOrder: true,
+         gridRow: true,
+         gridColumn: true,
+         fontWeight: true,
+         lineClamp: true,
+         lineHeight: true,
+         opacity: true,
+         order: true,
+         orphans: true,
+         tabSize: true,
+         widows: true,
+         zIndex: true,
+         zoom: true,
        
-         /**
-          * Reconciles the children with the various properties that affect the
-          * children content.
-          *
-          * @param {object} lastProps
-          * @param {object} nextProps
-          * @param {ReactReconcileTransaction} transaction
-          * @param {object} context
-          */
-         _updateDOMChildren: function (lastProps, nextProps, transaction, context) {
-           var lastContent = CONTENT_TYPES[typeof lastProps.children] ? lastProps.children : null;
-           var nextContent = CONTENT_TYPES[typeof nextProps.children] ? nextProps.children : null;
+         // SVG-related properties
+         fillOpacity: true,
+         floodOpacity: true,
+         stopOpacity: true,
+         strokeDasharray: true,
+         strokeDashoffset: true,
+         strokeMiterlimit: true,
+         strokeOpacity: true,
+         strokeWidth: true
+       };
        
-           var lastHtml = lastProps.dangerouslySetInnerHTML && lastProps.dangerouslySetInnerHTML.__html;
-           var nextHtml = nextProps.dangerouslySetInnerHTML && nextProps.dangerouslySetInnerHTML.__html;
+       /**
+        * @param {string} prefix vendor-specific prefix, eg: Webkit
+        * @param {string} key style name, eg: transitionDuration
+        * @return {string} style name prefixed with `prefix`, properly camelCased, eg:
+        * WebkitTransitionDuration
+        */
+       function prefixKey(prefix, key) {
+         return prefix + key.charAt(0).toUpperCase() + key.substring(1);
+       }
        
-           // Note the use of `!=` which checks for null or undefined.
-           var lastChildren = lastContent != null ? null : lastProps.children;
-           var nextChildren = nextContent != null ? null : nextProps.children;
+       /**
+        * Support style names that may come passed in prefixed by adding permutations
+        * of vendor prefixes.
+        */
+       var prefixes = ['Webkit', 'ms', 'Moz', 'O'];
        
-           // If we're switching from children to content/html or vice versa, remove
-           // the old content
-           var lastHasContentOrHtml = lastContent != null || lastHtml != null;
-           var nextHasContentOrHtml = nextContent != null || nextHtml != null;
-           if (lastChildren != null && nextChildren == null) {
-             this.updateChildren(null, transaction, context);
-           } else if (lastHasContentOrHtml && !nextHasContentOrHtml) {
-             this.updateTextContent('');
-           }
+       // Using Object.keys here, or else the vanilla for-in loop makes IE8 go into an
+       // infinite loop, because it iterates over the newly added props too.
+       Object.keys(isUnitlessNumber).forEach(function (prop) {
+         prefixes.forEach(function (prefix) {
+           isUnitlessNumber[prefixKey(prefix, prop)] = isUnitlessNumber[prop];
+         });
+       });
        
-           if (nextContent != null) {
-             if (lastContent !== nextContent) {
-               this.updateTextContent('' + nextContent);
-             }
-           } else if (nextHtml != null) {
-             if (lastHtml !== nextHtml) {
-               this.updateMarkup('' + nextHtml);
-             }
-           } else if (nextChildren != null) {
-             this.updateChildren(nextChildren, transaction, context);
-           }
+       /**
+        * Most style properties can be unset by doing .style[prop] = '' but IE8
+        * doesn't like doing that with shorthand properties so for the properties that
+        * IE8 breaks on, which are listed here, we instead unset each of the
+        * individual properties. See http://bugs.jquery.com/ticket/12385.
+        * The 4-value 'clock' properties like margin, padding, border-width seem to
+        * behave without any problems. Curiously, list-style works too without any
+        * special prodding.
+        */
+       var shorthandPropertyExpansions = {
+         background: {
+           backgroundAttachment: true,
+           backgroundColor: true,
+           backgroundImage: true,
+           backgroundPositionX: true,
+           backgroundPositionY: true,
+           backgroundRepeat: true
          },
-       
-         /**
-          * Destroys all event registrations for this instance. Does not remove from
-          * the DOM. That must be done by the parent.
-          *
-          * @internal
-          */
-         unmountComponent: function () {
-           switch (this._tag) {
-             case 'iframe':
-             case 'img':
-             case 'form':
-             case 'video':
-             case 'audio':
-               var listeners = this._wrapperState.listeners;
-               if (listeners) {
-                 for (var i = 0; i < listeners.length; i++) {
-                   listeners[i].remove();
-                 }
-               }
-               break;
-             case 'input':
-               ReactDOMInput.unmountWrapper(this);
-               break;
-             case 'html':
-             case 'head':
-             case 'body':
-               /**
-                * Components like <html> <head> and <body> can't be removed or added
-                * easily in a cross-browser way, however it's valuable to be able to
-                * take advantage of React's reconciliation for styling and <title>
-                * management. So we just document it and throw in dangerous cases.
-                */
-                true ? process.env.NODE_ENV !== 'production' ? invariant(false, '<%s> tried to unmount. Because of cross-browser quirks it is ' + 'impossible to unmount some top-level components (eg <html>, ' + '<head>, and <body>) reliably and efficiently. To fix this, have a ' + 'single top-level component that never unmounts render these ' + 'elements.', this._tag) : invariant(false) : undefined;
-               break;
-           }
-       
-           this.unmountChildren();
-           ReactBrowserEventEmitter.deleteAllListeners(this._rootNodeID);
-           ReactComponentBrowserEnvironment.unmountIDFromEnvironment(this._rootNodeID);
-           this._rootNodeID = null;
-           this._wrapperState = null;
-           if (this._nodeWithLegacyProperties) {
-             var node = this._nodeWithLegacyProperties;
-             node._reactInternalComponent = null;
-             this._nodeWithLegacyProperties = null;
-           }
+         backgroundPosition: {
+           backgroundPositionX: true,
+           backgroundPositionY: true
          },
-       
-         getPublicInstance: function () {
-           if (!this._nodeWithLegacyProperties) {
-             var node = ReactMount.getNode(this._rootNodeID);
-       
-             node._reactInternalComponent = this;
-             node.getDOMNode = legacyGetDOMNode;
-             node.isMounted = legacyIsMounted;
-             node.setState = legacySetStateEtc;
-             node.replaceState = legacySetStateEtc;
-             node.forceUpdate = legacySetStateEtc;
-             node.setProps = legacySetProps;
-             node.replaceProps = legacyReplaceProps;
-       
-             if (process.env.NODE_ENV !== 'production') {
-               if (canDefineProperty) {
-                 Object.defineProperties(node, legacyPropsDescriptor);
-               } else {
-                 // updateComponent will update this property on subsequent renders
-                 node.props = this._currentElement.props;
-               }
-             } else {
-               // updateComponent will update this property on subsequent renders
-               node.props = this._currentElement.props;
-             }
-       
-             this._nodeWithLegacyProperties = node;
-           }
-           return this._nodeWithLegacyProperties;
+         border: {
+           borderWidth: true,
+           borderStyle: true,
+           borderColor: true
+         },
+         borderBottom: {
+           borderBottomWidth: true,
+           borderBottomStyle: true,
+           borderBottomColor: true
+         },
+         borderLeft: {
+           borderLeftWidth: true,
+           borderLeftStyle: true,
+           borderLeftColor: true
+         },
+         borderRight: {
+           borderRightWidth: true,
+           borderRightStyle: true,
+           borderRightColor: true
+         },
+         borderTop: {
+           borderTopWidth: true,
+           borderTopStyle: true,
+           borderTopColor: true
+         },
+         font: {
+           fontStyle: true,
+           fontVariant: true,
+           fontWeight: true,
+           fontSize: true,
+           lineHeight: true,
+           fontFamily: true
+         },
+         outline: {
+           outlineWidth: true,
+           outlineStyle: true,
+           outlineColor: true
          }
-       
        };
        
-       ReactPerf.measureMethods(ReactDOMComponent, 'ReactDOMComponent', {
-         mountComponent: 'mountComponent',
-         updateComponent: 'updateComponent'
-       });
-       
-       assign(ReactDOMComponent.prototype, ReactDOMComponent.Mixin, ReactMultiChild.Mixin);
+       var CSSProperty = {
+         isUnitlessNumber: isUnitlessNumber,
+         shorthandPropertyExpansions: shorthandPropertyExpansions
+       };
        
-       module.exports = ReactDOMComponent;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
+       module.exports = CSSProperty;
 
 /***/ },
-/* 96 */
+/* 102 */
 /***/ function(module, exports, __webpack_require__) {
 
        /**
-        * Copyright 2013-2015, Facebook, Inc.
+        * Copyright (c) 2013-present, 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.
         *
-        * @providesModule AutoFocusUtils
-        * @typechecks static-only
+        * @typechecks
         */
        
        'use strict';
        
-       var ReactMount = __webpack_require__(30);
-       
-       var findDOMNode = __webpack_require__(93);
-       var focusNode = __webpack_require__(97);
-       
-       var Mixin = {
-         componentDidMount: function () {
-           if (this.props.autoFocus) {
-             focusNode(findDOMNode(this));
-           }
-         }
-       };
+       var camelize = __webpack_require__(103);
        
-       var AutoFocusUtils = {
-         Mixin: Mixin,
+       var msPattern = /^-ms-/;
        
-         focusDOMComponent: function () {
-           focusNode(ReactMount.getNode(this._rootNodeID));
-         }
-       };
+       /**
+        * Camelcases a hyphenated CSS property name, for example:
+        *
+        *   > camelizeStyleName('background-color')
+        *   < "backgroundColor"
+        *   > camelizeStyleName('-moz-transition')
+        *   < "MozTransition"
+        *   > camelizeStyleName('-ms-transition')
+        *   < "msTransition"
+        *
+        * As Andi Smith suggests
+        * (http://www.andismith.com/blog/2012/02/modernizr-prefixed/), an `-ms` prefix
+        * is converted to lowercase `ms`.
+        *
+        * @param {string} string
+        * @return {string}
+        */
+       function camelizeStyleName(string) {
+         return camelize(string.replace(msPattern, 'ms-'));
+       }
        
-       module.exports = AutoFocusUtils;
+       module.exports = camelizeStyleName;
 
 /***/ },
-/* 97 */
+/* 103 */
 /***/ function(module, exports) {
 
+       "use strict";
+       
        /**
-        * Copyright 2013-2015, Facebook, Inc.
+        * Copyright (c) 2013-present, 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.
         *
-        * @providesModule focusNode
+        * @typechecks
         */
        
-       'use strict';
+       var _hyphenPattern = /-(.)/g;
        
        /**
-        * @param {DOMElement} node input/textarea to focus
+        * Camelcases a hyphenated string, for example:
+        *
+        *   > camelize('background-color')
+        *   < "backgroundColor"
+        *
+        * @param {string} string
+        * @return {string}
         */
-       function focusNode(node) {
-         // IE8 can throw "Can't move focus to the control because it is invisible,
-         // not enabled, or of a type that does not accept the focus." for all kinds of
-         // reasons that are too expensive and fragile to test.
-         try {
-           node.focus();
-         } catch (e) {}
+       function camelize(string) {
+         return string.replace(_hyphenPattern, function (_, character) {
+           return character.toUpperCase();
+         });
        }
        
-       module.exports = focusNode;
+       module.exports = camelize;
 
 /***/ },
-/* 98 */
+/* 104 */
 /***/ function(module, exports, __webpack_require__) {
 
        /* WEBPACK VAR INJECTION */(function(process) {/**
-        * Copyright 2013-2015, Facebook, Inc.
+        * Copyright 2013-present, 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.
         *
-        * @providesModule CSSPropertyOperations
-        * @typechecks static-only
+        * @providesModule dangerousStyleValue
         */
        
        'use strict';
        
-       var CSSProperty = __webpack_require__(99);
-       var ExecutionEnvironment = __webpack_require__(11);
-       var ReactPerf = __webpack_require__(20);
+       var CSSProperty = __webpack_require__(101);
+       var warning = __webpack_require__(13);
        
-       var camelizeStyleName = __webpack_require__(100);
-       var dangerousStyleValue = __webpack_require__(102);
-       var hyphenateStyleName = __webpack_require__(103);
-       var memoizeStringOnly = __webpack_require__(105);
-       var warning = __webpack_require__(27);
+       var isUnitlessNumber = CSSProperty.isUnitlessNumber;
+       var styleWarnings = {};
        
-       var processStyleName = memoizeStringOnly(function (styleName) {
-         return hyphenateStyleName(styleName);
-       });
+       /**
+        * Convert a value into the proper css writable value. The style name `name`
+        * should be logical (no hyphens), as specified
+        * in `CSSProperty.isUnitlessNumber`.
+        *
+        * @param {string} name CSS property name such as `topMargin`.
+        * @param {*} value CSS property value such as `10px`.
+        * @param {ReactDOMComponent} component
+        * @return {string} Normalized style value with dimensions applied.
+        */
+       function dangerousStyleValue(name, value, component) {
+         // Note that we've removed escapeTextForBrowser() calls here since the
+         // whole string will be escaped when the attribute is injected into
+         // the markup. If you provide unsafe user data here they can inject
+         // arbitrary CSS which may be problematic (I couldn't repro this):
+         // https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet
+         // http://www.thespanner.co.uk/2007/11/26/ultimate-xss-css-injection/
+         // This is not an XSS hole but instead a potential CSS injection issue
+         // which has lead to a greater discussion about how we're going to
+         // trust URLs moving forward. See #2115901
        
-       var hasShorthandPropertyBug = false;
-       var styleFloatAccessor = 'cssFloat';
-       if (ExecutionEnvironment.canUseDOM) {
-         var tempStyle = document.createElement('div').style;
-         try {
-           // IE8 throws "Invalid argument." if resetting shorthand style properties.
-           tempStyle.font = '';
-         } catch (e) {
-           hasShorthandPropertyBug = true;
-         }
-         // IE8 only supports accessing cssFloat (standard) as styleFloat
-         if (document.documentElement.style.cssFloat === undefined) {
-           styleFloatAccessor = 'styleFloat';
+         var isEmpty = value == null || typeof value === 'boolean' || value === '';
+         if (isEmpty) {
+           return '';
          }
-       }
-       
-       if (process.env.NODE_ENV !== 'production') {
-         // 'msTransform' is correct, but the other prefixes should be capitalized
-         var badVendoredStyleNamePattern = /^(?:webkit|moz|o)[A-Z]/;
-       
-         // style values shouldn't contain a semicolon
-         var badStyleValueWithSemicolonPattern = /;\s*$/;
-       
-         var warnedStyleNames = {};
-         var warnedStyleValues = {};
-       
-         var warnHyphenatedStyleName = function (name) {
-           if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {
-             return;
-           }
        
-           warnedStyleNames[name] = true;
-           process.env.NODE_ENV !== 'production' ? warning(false, 'Unsupported style property %s. Did you mean %s?', name, camelizeStyleName(name)) : undefined;
-         };
+         var isNonNumeric = isNaN(value);
+         if (isNonNumeric || value === 0 || isUnitlessNumber.hasOwnProperty(name) && isUnitlessNumber[name]) {
+           return '' + value; // cast to string
+         }
        
-         var warnBadVendoredStyleName = function (name) {
-           if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {
-             return;
+         if (typeof value === 'string') {
+           if (process.env.NODE_ENV !== 'production') {
+             // Allow '0' to pass through without warning. 0 is already special and
+             // doesn't require units, so we don't need to warn about it.
+             if (component && value !== '0') {
+               var owner = component._currentElement._owner;
+               var ownerName = owner ? owner.getName() : null;
+               if (ownerName && !styleWarnings[ownerName]) {
+                 styleWarnings[ownerName] = {};
+               }
+               var warned = false;
+               if (ownerName) {
+                 var warnings = styleWarnings[ownerName];
+                 warned = warnings[name];
+                 if (!warned) {
+                   warnings[name] = true;
+                 }
+               }
+               if (!warned) {
+                 process.env.NODE_ENV !== 'production' ? warning(false, 'a `%s` tag (owner: `%s`) was passed a numeric string value ' + 'for CSS property `%s` (value: `%s`) which will be treated ' + 'as a unitless number in a future version of React.', component._currentElement.type, ownerName || 'unknown', name, value) : void 0;
+               }
+             }
            }
+           value = value.trim();
+         }
+         return value + 'px';
+       }
        
-           warnedStyleNames[name] = true;
-           process.env.NODE_ENV !== 'production' ? warning(false, 'Unsupported vendor-prefixed style property %s. Did you mean %s?', name, name.charAt(0).toUpperCase() + name.slice(1)) : undefined;
-         };
+       module.exports = dangerousStyleValue;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
+
+/***/ },
+/* 105 */
+/***/ function(module, exports, __webpack_require__) {
+
+       /**
+        * Copyright (c) 2013-present, 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.
+        *
+        * @typechecks
+        */
        
-         var warnStyleValueWithSemicolon = function (name, value) {
-           if (warnedStyleValues.hasOwnProperty(value) && warnedStyleValues[value]) {
-             return;
-           }
+       'use strict';
        
-           warnedStyleValues[value] = true;
-           process.env.NODE_ENV !== 'production' ? warning(false, 'Style property values shouldn\'t contain a semicolon. ' + 'Try "%s: %s" instead.', name, value.replace(badStyleValueWithSemicolonPattern, '')) : undefined;
-         };
+       var hyphenate = __webpack_require__(106);
        
-         /**
-          * @param {string} name
-          * @param {*} value
-          */
-         var warnValidStyle = function (name, value) {
-           if (name.indexOf('-') > -1) {
-             warnHyphenatedStyleName(name);
-           } else if (badVendoredStyleNamePattern.test(name)) {
-             warnBadVendoredStyleName(name);
-           } else if (badStyleValueWithSemicolonPattern.test(value)) {
-             warnStyleValueWithSemicolon(name, value);
-           }
-         };
-       }
+       var msPattern = /^ms-/;
        
        /**
-        * Operations for dealing with CSS properties.
+        * Hyphenates a camelcased CSS property name, for example:
+        *
+        *   > hyphenateStyleName('backgroundColor')
+        *   < "background-color"
+        *   > hyphenateStyleName('MozTransition')
+        *   < "-moz-transition"
+        *   > hyphenateStyleName('msTransition')
+        *   < "-ms-transition"
+        *
+        * As Modernizr suggests (http://modernizr.com/docs/#prefixed), an `ms` prefix
+        * is converted to `-ms-`.
+        *
+        * @param {string} string
+        * @return {string}
         */
-       var CSSPropertyOperations = {
+       function hyphenateStyleName(string) {
+         return hyphenate(string).replace(msPattern, '-ms-');
+       }
        
-         /**
-          * Serializes a mapping of style properties for use as inline styles:
-          *
-          *   > createMarkupForStyles({width: '200px', height: 0})
-          *   "width:200px;height:0;"
-          *
-          * Undefined values are ignored so that declarative programming is easier.
-          * The result should be HTML-escaped before insertion into the DOM.
-          *
-          * @param {object} styles
-          * @return {?string}
-          */
-         createMarkupForStyles: function (styles) {
-           var serialized = '';
-           for (var styleName in styles) {
-             if (!styles.hasOwnProperty(styleName)) {
-               continue;
-             }
-             var styleValue = styles[styleName];
-             if (process.env.NODE_ENV !== 'production') {
-               warnValidStyle(styleName, styleValue);
-             }
-             if (styleValue != null) {
-               serialized += processStyleName(styleName) + ':';
-               serialized += dangerousStyleValue(styleName, styleValue) + ';';
-             }
-           }
-           return serialized || null;
-         },
-       
-         /**
-          * Sets the value for multiple styles on a node.  If a value is specified as
-          * '' (empty string), the corresponding style property will be unset.
-          *
-          * @param {DOMElement} node
-          * @param {object} styles
-          */
-         setValueForStyles: function (node, styles) {
-           var style = node.style;
-           for (var styleName in styles) {
-             if (!styles.hasOwnProperty(styleName)) {
-               continue;
-             }
-             if (process.env.NODE_ENV !== 'production') {
-               warnValidStyle(styleName, styles[styleName]);
-             }
-             var styleValue = dangerousStyleValue(styleName, styles[styleName]);
-             if (styleName === 'float') {
-               styleName = styleFloatAccessor;
-             }
-             if (styleValue) {
-               style[styleName] = styleValue;
-             } else {
-               var expansion = hasShorthandPropertyBug && CSSProperty.shorthandPropertyExpansions[styleName];
-               if (expansion) {
-                 // Shorthand property that IE8 won't like unsetting, so unset each
-                 // component to placate it
-                 for (var individualStyleName in expansion) {
-                   style[individualStyleName] = '';
-                 }
-               } else {
-                 style[styleName] = '';
-               }
-             }
-           }
-         }
-       
-       };
-       
-       ReactPerf.measureMethods(CSSPropertyOperations, 'CSSPropertyOperations', {
-         setValueForStyles: 'setValueForStyles'
-       });
-       
-       module.exports = CSSPropertyOperations;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
+       module.exports = hyphenateStyleName;
 
 /***/ },
-/* 99 */
+/* 106 */
 /***/ function(module, exports) {
 
+       'use strict';
+       
        /**
-        * Copyright 2013-2015, Facebook, Inc.
+        * Copyright (c) 2013-present, 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.
         *
-        * @providesModule CSSProperty
-        */
-       
-       'use strict';
-       
-       /**
-        * CSS properties which accept numbers but are not in units of "px".
+        * @typechecks
         */
-       var isUnitlessNumber = {
-         animationIterationCount: true,
-         boxFlex: true,
-         boxFlexGroup: true,
-         boxOrdinalGroup: true,
-         columnCount: true,
-         flex: true,
-         flexGrow: true,
-         flexPositive: true,
-         flexShrink: true,
-         flexNegative: true,
-         flexOrder: true,
-         fontWeight: true,
-         lineClamp: true,
-         lineHeight: true,
-         opacity: true,
-         order: true,
-         orphans: true,
-         tabSize: true,
-         widows: true,
-         zIndex: true,
-         zoom: true,
        
-         // SVG-related properties
-         fillOpacity: true,
-         stopOpacity: true,
-         strokeDashoffset: true,
-         strokeOpacity: true,
-         strokeWidth: true
-       };
+       var _uppercasePattern = /([A-Z])/g;
        
        /**
-        * @param {string} prefix vendor-specific prefix, eg: Webkit
-        * @param {string} key style name, eg: transitionDuration
-        * @return {string} style name prefixed with `prefix`, properly camelCased, eg:
-        * WebkitTransitionDuration
+        * Hyphenates a camelcased string, for example:
+        *
+        *   > hyphenate('backgroundColor')
+        *   < "background-color"
+        *
+        * For CSS style names, use `hyphenateStyleName` instead which works properly
+        * with all vendor prefixes, including `ms`.
+        *
+        * @param {string} string
+        * @return {string}
         */
-       function prefixKey(prefix, key) {
-         return prefix + key.charAt(0).toUpperCase() + key.substring(1);
+       function hyphenate(string) {
+         return string.replace(_uppercasePattern, '-$1').toLowerCase();
        }
        
-       /**
-        * Support style names that may come passed in prefixed by adding permutations
-        * of vendor prefixes.
-        */
-       var prefixes = ['Webkit', 'ms', 'Moz', 'O'];
-       
-       // Using Object.keys here, or else the vanilla for-in loop makes IE8 go into an
-       // infinite loop, because it iterates over the newly added props too.
-       Object.keys(isUnitlessNumber).forEach(function (prop) {
-         prefixes.forEach(function (prefix) {
-           isUnitlessNumber[prefixKey(prefix, prop)] = isUnitlessNumber[prop];
-         });
-       });
-       
-       /**
-        * Most style properties can be unset by doing .style[prop] = '' but IE8
-        * doesn't like doing that with shorthand properties so for the properties that
-        * IE8 breaks on, which are listed here, we instead unset each of the
-        * individual properties. See http://bugs.jquery.com/ticket/12385.
-        * The 4-value 'clock' properties like margin, padding, border-width seem to
-        * behave without any problems. Curiously, list-style works too without any
-        * special prodding.
-        */
-       var shorthandPropertyExpansions = {
-         background: {
-           backgroundAttachment: true,
-           backgroundColor: true,
-           backgroundImage: true,
-           backgroundPositionX: true,
-           backgroundPositionY: true,
-           backgroundRepeat: true
-         },
-         backgroundPosition: {
-           backgroundPositionX: true,
-           backgroundPositionY: true
-         },
-         border: {
-           borderWidth: true,
-           borderStyle: true,
-           borderColor: true
-         },
-         borderBottom: {
-           borderBottomWidth: true,
-           borderBottomStyle: true,
-           borderBottomColor: true
-         },
-         borderLeft: {
-           borderLeftWidth: true,
-           borderLeftStyle: true,
-           borderLeftColor: true
-         },
-         borderRight: {
-           borderRightWidth: true,
-           borderRightStyle: true,
-           borderRightColor: true
-         },
-         borderTop: {
-           borderTopWidth: true,
-           borderTopStyle: true,
-           borderTopColor: true
-         },
-         font: {
-           fontStyle: true,
-           fontVariant: true,
-           fontWeight: true,
-           fontSize: true,
-           lineHeight: true,
-           fontFamily: true
-         },
-         outline: {
-           outlineWidth: true,
-           outlineStyle: true,
-           outlineColor: true
-         }
-       };
-       
-       var CSSProperty = {
-         isUnitlessNumber: isUnitlessNumber,
-         shorthandPropertyExpansions: shorthandPropertyExpansions
-       };
-       
-       module.exports = CSSProperty;
+       module.exports = hyphenate;
 
 /***/ },
-/* 100 */
-/***/ function(module, exports, __webpack_require__) {
+/* 107 */
+/***/ function(module, exports) {
 
        /**
-        * Copyright 2013-2015, Facebook, Inc.
+        * Copyright (c) 2013-present, 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.
         *
-        * @providesModule camelizeStyleName
-        * @typechecks
+        * 
+        * @typechecks static-only
         */
        
        'use strict';
        
-       var camelize = __webpack_require__(101);
-       
-       var msPattern = /^-ms-/;
-       
        /**
-        * Camelcases a hyphenated CSS property name, for example:
-        *
-        *   > camelizeStyleName('background-color')
-        *   < "backgroundColor"
-        *   > camelizeStyleName('-moz-transition')
-        *   < "MozTransition"
-        *   > camelizeStyleName('-ms-transition')
-        *   < "msTransition"
-        *
-        * As Andi Smith suggests
-        * (http://www.andismith.com/blog/2012/02/modernizr-prefixed/), an `-ms` prefix
-        * is converted to lowercase `ms`.
-        *
-        * @param {string} string
-        * @return {string}
+        * Memoizes the return value of a function that accepts one string argument.
         */
-       function camelizeStyleName(string) {
-         return camelize(string.replace(msPattern, 'ms-'));
+       
+       function memoizeStringOnly(callback) {
+         var cache = {};
+         return function (string) {
+           if (!cache.hasOwnProperty(string)) {
+             cache[string] = callback.call(this, string);
+           }
+           return cache[string];
+         };
        }
        
-       module.exports = camelizeStyleName;
+       module.exports = memoizeStringOnly;
 
 /***/ },
-/* 101 */
-/***/ function(module, exports) {
+/* 108 */
+/***/ function(module, exports, __webpack_require__) {
 
-       /**
-        * Copyright 2013-2015, Facebook, Inc.
+       /* WEBPACK VAR INJECTION */(function(process) {/**
+        * Copyright 2013-present, 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.
         *
-        * @providesModule camelize
-        * @typechecks
+        * @providesModule DOMPropertyOperations
         */
        
-       "use strict";
+       'use strict';
        
-       var _hyphenPattern = /-(.)/g;
+       var DOMProperty = __webpack_require__(40);
+       var ReactDOMComponentTree = __webpack_require__(39);
+       var ReactDOMInstrumentation = __webpack_require__(109);
+       var ReactInstrumentation = __webpack_require__(65);
+       
+       var quoteAttributeValueForBrowser = __webpack_require__(113);
+       var warning = __webpack_require__(13);
+       
+       var VALID_ATTRIBUTE_NAME_REGEX = new RegExp('^[' + DOMProperty.ATTRIBUTE_NAME_START_CHAR + '][' + DOMProperty.ATTRIBUTE_NAME_CHAR + ']*$');
+       var illegalAttributeNameCache = {};
+       var validatedAttributeNameCache = {};
+       
+       function isAttributeNameSafe(attributeName) {
+         if (validatedAttributeNameCache.hasOwnProperty(attributeName)) {
+           return true;
+         }
+         if (illegalAttributeNameCache.hasOwnProperty(attributeName)) {
+           return false;
+         }
+         if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName)) {
+           validatedAttributeNameCache[attributeName] = true;
+           return true;
+         }
+         illegalAttributeNameCache[attributeName] = true;
+         process.env.NODE_ENV !== 'production' ? warning(false, 'Invalid attribute name: `%s`', attributeName) : void 0;
+         return false;
+       }
+       
+       function shouldIgnoreValue(propertyInfo, value) {
+         return value == null || propertyInfo.hasBooleanValue && !value || propertyInfo.hasNumericValue && isNaN(value) || propertyInfo.hasPositiveNumericValue && value < 1 || propertyInfo.hasOverloadedBooleanValue && value === false;
+       }
        
        /**
-        * Camelcases a hyphenated string, for example:
-        *
-        *   > camelize('background-color')
-        *   < "backgroundColor"
-        *
-        * @param {string} string
-        * @return {string}
+        * Operations for dealing with DOM properties.
         */
-       function camelize(string) {
-         return string.replace(_hyphenPattern, function (_, character) {
-           return character.toUpperCase();
-         });
-       }
+       var DOMPropertyOperations = {
        
-       module.exports = camelize;
+         /**
+          * Creates markup for the ID property.
+          *
+          * @param {string} id Unescaped ID.
+          * @return {string} Markup string.
+          */
+         createMarkupForID: function (id) {
+           return DOMProperty.ID_ATTRIBUTE_NAME + '=' + quoteAttributeValueForBrowser(id);
+         },
+       
+         setAttributeForID: function (node, id) {
+           node.setAttribute(DOMProperty.ID_ATTRIBUTE_NAME, id);
+         },
+       
+         createMarkupForRoot: function () {
+           return DOMProperty.ROOT_ATTRIBUTE_NAME + '=""';
+         },
+       
+         setAttributeForRoot: function (node) {
+           node.setAttribute(DOMProperty.ROOT_ATTRIBUTE_NAME, '');
+         },
+       
+         /**
+          * Creates markup for a property.
+          *
+          * @param {string} name
+          * @param {*} value
+          * @return {?string} Markup string, or null if the property was invalid.
+          */
+         createMarkupForProperty: function (name, value) {
+           if (process.env.NODE_ENV !== 'production') {
+             ReactDOMInstrumentation.debugTool.onCreateMarkupForProperty(name, value);
+           }
+           var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null;
+           if (propertyInfo) {
+             if (shouldIgnoreValue(propertyInfo, value)) {
+               return '';
+             }
+             var attributeName = propertyInfo.attributeName;
+             if (propertyInfo.hasBooleanValue || propertyInfo.hasOverloadedBooleanValue && value === true) {
+               return attributeName + '=""';
+             }
+             return attributeName + '=' + quoteAttributeValueForBrowser(value);
+           } else if (DOMProperty.isCustomAttribute(name)) {
+             if (value == null) {
+               return '';
+             }
+             return name + '=' + quoteAttributeValueForBrowser(value);
+           }
+           return null;
+         },
+       
+         /**
+          * Creates markup for a custom property.
+          *
+          * @param {string} name
+          * @param {*} value
+          * @return {string} Markup string, or empty string if the property was invalid.
+          */
+         createMarkupForCustomAttribute: function (name, value) {
+           if (!isAttributeNameSafe(name) || value == null) {
+             return '';
+           }
+           return name + '=' + quoteAttributeValueForBrowser(value);
+         },
+       
+         /**
+          * Sets the value for a property on a node.
+          *
+          * @param {DOMElement} node
+          * @param {string} name
+          * @param {*} value
+          */
+         setValueForProperty: function (node, name, value) {
+           var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null;
+           if (propertyInfo) {
+             var mutationMethod = propertyInfo.mutationMethod;
+             if (mutationMethod) {
+               mutationMethod(node, value);
+             } else if (shouldIgnoreValue(propertyInfo, value)) {
+               this.deleteValueForProperty(node, name);
+               return;
+             } else if (propertyInfo.mustUseProperty) {
+               // Contrary to `setAttribute`, object properties are properly
+               // `toString`ed by IE8/9.
+               node[propertyInfo.propertyName] = value;
+             } else {
+               var attributeName = propertyInfo.attributeName;
+               var namespace = propertyInfo.attributeNamespace;
+               // `setAttribute` with objects becomes only `[object]` in IE8/9,
+               // ('' + value) makes it output the correct toString()-value.
+               if (namespace) {
+                 node.setAttributeNS(namespace, attributeName, '' + value);
+               } else if (propertyInfo.hasBooleanValue || propertyInfo.hasOverloadedBooleanValue && value === true) {
+                 node.setAttribute(attributeName, '');
+               } else {
+                 node.setAttribute(attributeName, '' + value);
+               }
+             }
+           } else if (DOMProperty.isCustomAttribute(name)) {
+             DOMPropertyOperations.setValueForAttribute(node, name, value);
+             return;
+           }
+       
+           if (process.env.NODE_ENV !== 'production') {
+             ReactDOMInstrumentation.debugTool.onSetValueForProperty(node, name, value);
+             var payload = {};
+             payload[name] = value;
+             ReactInstrumentation.debugTool.onHostOperation(ReactDOMComponentTree.getInstanceFromNode(node)._debugID, 'update attribute', payload);
+           }
+         },
+       
+         setValueForAttribute: function (node, name, value) {
+           if (!isAttributeNameSafe(name)) {
+             return;
+           }
+           if (value == null) {
+             node.removeAttribute(name);
+           } else {
+             node.setAttribute(name, '' + value);
+           }
+       
+           if (process.env.NODE_ENV !== 'production') {
+             var payload = {};
+             payload[name] = value;
+             ReactInstrumentation.debugTool.onHostOperation(ReactDOMComponentTree.getInstanceFromNode(node)._debugID, 'update attribute', payload);
+           }
+         },
+       
+         /**
+          * Deletes an attributes from a node.
+          *
+          * @param {DOMElement} node
+          * @param {string} name
+          */
+         deleteValueForAttribute: function (node, name) {
+           node.removeAttribute(name);
+           if (process.env.NODE_ENV !== 'production') {
+             ReactDOMInstrumentation.debugTool.onDeleteValueForProperty(node, name);
+             ReactInstrumentation.debugTool.onHostOperation(ReactDOMComponentTree.getInstanceFromNode(node)._debugID, 'remove attribute', name);
+           }
+         },
+       
+         /**
+          * Deletes the value for a property on a node.
+          *
+          * @param {DOMElement} node
+          * @param {string} name
+          */
+         deleteValueForProperty: function (node, name) {
+           var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null;
+           if (propertyInfo) {
+             var mutationMethod = propertyInfo.mutationMethod;
+             if (mutationMethod) {
+               mutationMethod(node, undefined);
+             } else if (propertyInfo.mustUseProperty) {
+               var propName = propertyInfo.propertyName;
+               if (propertyInfo.hasBooleanValue) {
+                 node[propName] = false;
+               } else {
+                 node[propName] = '';
+               }
+             } else {
+               node.removeAttribute(propertyInfo.attributeName);
+             }
+           } else if (DOMProperty.isCustomAttribute(name)) {
+             node.removeAttribute(name);
+           }
+       
+           if (process.env.NODE_ENV !== 'production') {
+             ReactDOMInstrumentation.debugTool.onDeleteValueForProperty(node, name);
+             ReactInstrumentation.debugTool.onHostOperation(ReactDOMComponentTree.getInstanceFromNode(node)._debugID, 'remove attribute', name);
+           }
+         }
+       
+       };
+       
+       module.exports = DOMPropertyOperations;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
 
 /***/ },
-/* 102 */
+/* 109 */
 /***/ function(module, exports, __webpack_require__) {
 
-       /**
-        * Copyright 2013-2015, Facebook, Inc.
+       /* WEBPACK VAR INJECTION */(function(process) {/**
+        * Copyright 2013-present, 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.
         *
-        * @providesModule dangerousStyleValue
-        * @typechecks static-only
+        * @providesModule ReactDOMInstrumentation
         */
        
        'use strict';
        
-       var CSSProperty = __webpack_require__(99);
-       
-       var isUnitlessNumber = CSSProperty.isUnitlessNumber;
-       
-       /**
-        * Convert a value into the proper css writable value. The style name `name`
-        * should be logical (no hyphens), as specified
-        * in `CSSProperty.isUnitlessNumber`.
-        *
-        * @param {string} name CSS property name such as `topMargin`.
-        * @param {*} value CSS property value such as `10px`.
-        * @return {string} Normalized style value with dimensions applied.
-        */
-       function dangerousStyleValue(name, value) {
-         // Note that we've removed escapeTextForBrowser() calls here since the
-         // whole string will be escaped when the attribute is injected into
-         // the markup. If you provide unsafe user data here they can inject
-         // arbitrary CSS which may be problematic (I couldn't repro this):
-         // https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet
-         // http://www.thespanner.co.uk/2007/11/26/ultimate-xss-css-injection/
-         // This is not an XSS hole but instead a potential CSS injection issue
-         // which has lead to a greater discussion about how we're going to
-         // trust URLs moving forward. See #2115901
-       
-         var isEmpty = value == null || typeof value === 'boolean' || value === '';
-         if (isEmpty) {
-           return '';
-         }
-       
-         var isNonNumeric = isNaN(value);
-         if (isNonNumeric || value === 0 || isUnitlessNumber.hasOwnProperty(name) && isUnitlessNumber[name]) {
-           return '' + value; // cast to string
-         }
+       var debugTool = null;
        
-         if (typeof value === 'string') {
-           value = value.trim();
-         }
-         return value + 'px';
+       if (process.env.NODE_ENV !== 'production') {
+         var ReactDOMDebugTool = __webpack_require__(110);
+         debugTool = ReactDOMDebugTool;
        }
        
-       module.exports = dangerousStyleValue;
+       module.exports = { debugTool: debugTool };
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
 
 /***/ },
-/* 103 */
+/* 110 */
 /***/ function(module, exports, __webpack_require__) {
 
-       /**
-        * Copyright 2013-2015, Facebook, Inc.
+       /* WEBPACK VAR INJECTION */(function(process) {/**
+        * Copyright 2013-present, 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.
         *
-        * @providesModule hyphenateStyleName
-        * @typechecks
+        * @providesModule ReactDOMDebugTool
         */
        
        'use strict';
        
-       var hyphenate = __webpack_require__(104);
+       var ReactDOMNullInputValuePropDevtool = __webpack_require__(111);
+       var ReactDOMUnknownPropertyDevtool = __webpack_require__(112);
+       var ReactDebugTool = __webpack_require__(66);
        
-       var msPattern = /^ms-/;
+       var warning = __webpack_require__(13);
        
-       /**
-        * Hyphenates a camelcased CSS property name, for example:
-        *
-        *   > hyphenateStyleName('backgroundColor')
-        *   < "background-color"
-        *   > hyphenateStyleName('MozTransition')
-        *   < "-moz-transition"
-        *   > hyphenateStyleName('msTransition')
-        *   < "-ms-transition"
-        *
-        * As Modernizr suggests (http://modernizr.com/docs/#prefixed), an `ms` prefix
-        * is converted to `-ms-`.
-        *
-        * @param {string} string
-        * @return {string}
-        */
-       function hyphenateStyleName(string) {
-         return hyphenate(string).replace(msPattern, '-ms-');
+       var eventHandlers = [];
+       var handlerDoesThrowForEvent = {};
+       
+       function emitEvent(handlerFunctionName, arg1, arg2, arg3, arg4, arg5) {
+         eventHandlers.forEach(function (handler) {
+           try {
+             if (handler[handlerFunctionName]) {
+               handler[handlerFunctionName](arg1, arg2, arg3, arg4, arg5);
+             }
+           } catch (e) {
+             process.env.NODE_ENV !== 'production' ? warning(handlerDoesThrowForEvent[handlerFunctionName], 'exception thrown by devtool while handling %s: %s', handlerFunctionName, e + '\n' + e.stack) : void 0;
+             handlerDoesThrowForEvent[handlerFunctionName] = true;
+           }
+         });
        }
        
-       module.exports = hyphenateStyleName;
+       var ReactDOMDebugTool = {
+         addDevtool: function (devtool) {
+           ReactDebugTool.addDevtool(devtool);
+           eventHandlers.push(devtool);
+         },
+         removeDevtool: function (devtool) {
+           ReactDebugTool.removeDevtool(devtool);
+           for (var i = 0; i < eventHandlers.length; i++) {
+             if (eventHandlers[i] === devtool) {
+               eventHandlers.splice(i, 1);
+               i--;
+             }
+           }
+         },
+         onCreateMarkupForProperty: function (name, value) {
+           emitEvent('onCreateMarkupForProperty', name, value);
+         },
+         onSetValueForProperty: function (node, name, value) {
+           emitEvent('onSetValueForProperty', node, name, value);
+         },
+         onDeleteValueForProperty: function (node, name) {
+           emitEvent('onDeleteValueForProperty', node, name);
+         },
+         onTestEvent: function () {
+           emitEvent('onTestEvent');
+         }
+       };
+       
+       ReactDOMDebugTool.addDevtool(ReactDOMUnknownPropertyDevtool);
+       ReactDOMDebugTool.addDevtool(ReactDOMNullInputValuePropDevtool);
+       
+       module.exports = ReactDOMDebugTool;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
 
 /***/ },
-/* 104 */
-/***/ function(module, exports) {
+/* 111 */
+/***/ function(module, exports, __webpack_require__) {
 
-       /**
-        * Copyright 2013-2015, Facebook, Inc.
+       /* WEBPACK VAR INJECTION */(function(process) {/**
+        * Copyright 2013-present, 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.
         *
-        * @providesModule hyphenate
-        * @typechecks
+        * @providesModule ReactDOMNullInputValuePropDevtool
         */
        
        'use strict';
        
-       var _uppercasePattern = /([A-Z])/g;
+       var ReactComponentTreeDevtool = __webpack_require__(31);
        
-       /**
-        * Hyphenates a camelcased string, for example:
-        *
-        *   > hyphenate('backgroundColor')
-        *   < "background-color"
-        *
-        * For CSS style names, use `hyphenateStyleName` instead which works properly
-        * with all vendor prefixes, including `ms`.
-        *
-        * @param {string} string
-        * @return {string}
-        */
-       function hyphenate(string) {
-         return string.replace(_uppercasePattern, '-$1').toLowerCase();
+       var warning = __webpack_require__(13);
+       
+       var didWarnValueNull = false;
+       
+       function handleElement(debugID, element) {
+         if (element == null) {
+           return;
+         }
+         if (element.type !== 'input' && element.type !== 'textarea' && element.type !== 'select') {
+           return;
+         }
+         if (element.props != null && element.props.value === null && !didWarnValueNull) {
+           process.env.NODE_ENV !== 'production' ? warning(false, '`value` prop on `%s` should not be null. ' + 'Consider using the empty string to clear the component or `undefined` ' + 'for uncontrolled components.%s', element.type, ReactComponentTreeDevtool.getStackAddendumByID(debugID)) : void 0;
+       
+           didWarnValueNull = true;
+         }
        }
        
-       module.exports = hyphenate;
+       var ReactDOMUnknownPropertyDevtool = {
+         onBeforeMountComponent: function (debugID, element) {
+           handleElement(debugID, element);
+         },
+         onBeforeUpdateComponent: function (debugID, element) {
+           handleElement(debugID, element);
+         }
+       };
+       
+       module.exports = ReactDOMUnknownPropertyDevtool;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
 
 /***/ },
-/* 105 */
-/***/ function(module, exports) {
+/* 112 */
+/***/ function(module, exports, __webpack_require__) {
 
-       /**
-        * Copyright 2013-2015, Facebook, Inc.
+       /* WEBPACK VAR INJECTION */(function(process) {/**
+        * Copyright 2013-present, 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.
         *
-        * @providesModule memoizeStringOnly
-        * @typechecks static-only
+        * @providesModule ReactDOMUnknownPropertyDevtool
         */
        
        'use strict';
        
-       /**
-        * Memoizes the return value of a function that accepts one string argument.
-        *
-        * @param {function} callback
-        * @return {function}
-        */
-       function memoizeStringOnly(callback) {
-         var cache = {};
-         return function (string) {
-           if (!cache.hasOwnProperty(string)) {
-             cache[string] = callback.call(this, string);
+       var DOMProperty = __webpack_require__(40);
+       var EventPluginRegistry = __webpack_require__(47);
+       var ReactComponentTreeDevtool = __webpack_require__(31);
+       
+       var warning = __webpack_require__(13);
+       
+       if (process.env.NODE_ENV !== 'production') {
+         var reactProps = {
+           children: true,
+           dangerouslySetInnerHTML: true,
+           key: true,
+           ref: true,
+       
+           autoFocus: true,
+           defaultValue: true,
+           valueLink: true,
+           defaultChecked: true,
+           checkedLink: true,
+           innerHTML: true,
+           suppressContentEditableWarning: true,
+           onFocusIn: true,
+           onFocusOut: true
+         };
+         var warnedProperties = {};
+       
+         var validateProperty = function (tagName, name, debugID) {
+           if (DOMProperty.properties.hasOwnProperty(name) || DOMProperty.isCustomAttribute(name)) {
+             return true;
+           }
+           if (reactProps.hasOwnProperty(name) && reactProps[name] || warnedProperties.hasOwnProperty(name) && warnedProperties[name]) {
+             return true;
+           }
+           if (EventPluginRegistry.registrationNameModules.hasOwnProperty(name)) {
+             return true;
+           }
+           warnedProperties[name] = true;
+           var lowerCasedName = name.toLowerCase();
+       
+           // data-* attributes should be lowercase; suggest the lowercase version
+           var standardName = DOMProperty.isCustomAttribute(lowerCasedName) ? lowerCasedName : DOMProperty.getPossibleStandardName.hasOwnProperty(lowerCasedName) ? DOMProperty.getPossibleStandardName[lowerCasedName] : null;
+       
+           var registrationName = EventPluginRegistry.possibleRegistrationNames.hasOwnProperty(lowerCasedName) ? EventPluginRegistry.possibleRegistrationNames[lowerCasedName] : null;
+       
+           if (standardName != null) {
+             process.env.NODE_ENV !== 'production' ? warning(standardName == null, 'Unknown DOM property %s. Did you mean %s?%s', name, standardName, ReactComponentTreeDevtool.getStackAddendumByID(debugID)) : void 0;
+             return true;
+           } else if (registrationName != null) {
+             process.env.NODE_ENV !== 'production' ? warning(registrationName == null, 'Unknown event handler property %s. Did you mean `%s`?%s', name, registrationName, ReactComponentTreeDevtool.getStackAddendumByID(debugID)) : void 0;
+             return true;
+           } else {
+             // We were unable to guess which prop the user intended.
+             // It is likely that the user was just blindly spreading/forwarding props
+             // Components should be careful to only render valid props/attributes.
+             // Warning will be invoked in warnUnknownProperties to allow grouping.
+             return false;
            }
-           return cache[string];
          };
        }
        
-       module.exports = memoizeStringOnly;
+       var warnUnknownProperties = function (debugID, element) {
+         var unknownProps = [];
+         for (var key in element.props) {
+           var isValid = validateProperty(element.type, key, debugID);
+           if (!isValid) {
+             unknownProps.push(key);
+           }
+         }
+       
+         var unknownPropString = unknownProps.map(function (prop) {
+           return '`' + prop + '`';
+         }).join(', ');
+       
+         if (unknownProps.length === 1) {
+           process.env.NODE_ENV !== 'production' ? warning(false, 'Unknown prop %s on <%s> tag. Remove this prop from the element. ' + 'For details, see https://fb.me/react-unknown-prop%s', unknownPropString, element.type, ReactComponentTreeDevtool.getStackAddendumByID(debugID)) : void 0;
+         } else if (unknownProps.length > 1) {
+           process.env.NODE_ENV !== 'production' ? warning(false, 'Unknown props %s on <%s> tag. Remove these props from the element. ' + 'For details, see https://fb.me/react-unknown-prop%s', unknownPropString, element.type, ReactComponentTreeDevtool.getStackAddendumByID(debugID)) : void 0;
+         }
+       };
+       
+       function handleElement(debugID, element) {
+         if (element == null || typeof element.type !== 'string') {
+           return;
+         }
+         if (element.type.indexOf('-') >= 0 || element.props.is) {
+           return;
+         }
+         warnUnknownProperties(debugID, element);
+       }
+       
+       var ReactDOMUnknownPropertyDevtool = {
+         onBeforeMountComponent: function (debugID, element) {
+           handleElement(debugID, element);
+         },
+         onBeforeUpdateComponent: function (debugID, element) {
+           handleElement(debugID, element);
+         }
+       };
+       
+       module.exports = ReactDOMUnknownPropertyDevtool;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
 
 /***/ },
-/* 106 */
-/***/ function(module, exports) {
+/* 113 */
+/***/ function(module, exports, __webpack_require__) {
 
        /**
-        * Copyright 2013-2015, Facebook, Inc.
+        * Copyright 2013-present, 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.
         *
-        * @providesModule ReactDOMButton
+        * @providesModule quoteAttributeValueForBrowser
         */
        
        'use strict';
        
-       var mouseListenerNames = {
-         onClick: true,
-         onDoubleClick: true,
-         onMouseDown: true,
-         onMouseMove: true,
-         onMouseUp: true,
-       
-         onClickCapture: true,
-         onDoubleClickCapture: true,
-         onMouseDownCapture: true,
-         onMouseMoveCapture: true,
-         onMouseUpCapture: true
-       };
+       var escapeTextContentForBrowser = __webpack_require__(90);
        
        /**
-        * Implements a <button> native component that does not receive mouse events
-        * when `disabled` is set.
+        * Escapes attribute value to prevent scripting attacks.
+        *
+        * @param {*} value Value to escape.
+        * @return {string} An escaped string.
         */
-       var ReactDOMButton = {
-         getNativeProps: function (inst, props, context) {
-           if (!props.disabled) {
-             return props;
-           }
-       
-           // Copy the props, except the mouse listeners
-           var nativeProps = {};
-           for (var key in props) {
-             if (props.hasOwnProperty(key) && !mouseListenerNames[key]) {
-               nativeProps[key] = props[key];
-             }
-           }
-       
-           return nativeProps;
-         }
-       };
+       function quoteAttributeValueForBrowser(value) {
+         return '"' + escapeTextContentForBrowser(value) + '"';
+       }
        
-       module.exports = ReactDOMButton;
+       module.exports = quoteAttributeValueForBrowser;
 
 /***/ },
-/* 107 */
+/* 114 */
 /***/ function(module, exports, __webpack_require__) {
 
-       /* WEBPACK VAR INJECTION */(function(process) {/**
-        * Copyright 2013-2015, Facebook, Inc.
+       /**
+        * Copyright 2013-present, 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.
         *
-        * @providesModule ReactDOMInput
+        * @providesModule ReactBrowserEventEmitter
         */
        
        'use strict';
        
-       var ReactDOMIDOperations = __webpack_require__(29);
-       var LinkedValueUtils = __webpack_require__(108);
-       var ReactMount = __webpack_require__(30);
-       var ReactUpdates = __webpack_require__(56);
-       
-       var assign = __webpack_require__(41);
-       var invariant = __webpack_require__(15);
+       var _assign = __webpack_require__(6);
        
-       var instancesByReactID = {};
+       var EventConstants = __webpack_require__(44);
+       var EventPluginRegistry = __webpack_require__(47);
+       var ReactEventEmitterMixin = __webpack_require__(115);
+       var ViewportMetrics = __webpack_require__(80);
        
-       function forceUpdateIfMounted() {
-         if (this._rootNodeID) {
-           // DOM component is still mounted; update
-           ReactDOMInput.updateWrapper(this);
-         }
-       }
+       var getVendorPrefixedEventName = __webpack_require__(116);
+       var isEventSupported = __webpack_require__(74);
        
        /**
-        * Implements an <input> native component that allows setting these optional
-        * props: `checked`, `value`, `defaultChecked`, and `defaultValue`.
+        * Summary of `ReactBrowserEventEmitter` event handling:
         *
-        * If `checked` or `value` are not supplied (or null/undefined), user actions
-        * that affect the checked state or value will trigger updates to the element.
+        *  - Top-level delegation is used to trap most native browser events. This
+        *    may only occur in the main thread and is the responsibility of
+        *    ReactEventListener, which is injected and can therefore support pluggable
+        *    event sources. This is the only work that occurs in the main thread.
         *
-        * If they are supplied (and not null/undefined), the rendered element will not
-        * trigger updates to the element. Instead, the props must change in order for
-        * the rendered element to be updated.
+        *  - We normalize and de-duplicate events to account for browser quirks. This
+        *    may be done in the worker thread.
         *
-        * The rendered element will be initialized as unchecked (or `defaultChecked`)
-        * with an empty value (or `defaultValue`).
+        *  - Forward these native events (with the associated top-level type used to
+        *    trap it) to `EventPluginHub`, which in turn will ask plugins if they want
+        *    to extract any synthetic events.
         *
-        * @see http://www.w3.org/TR/2012/WD-html5-20121025/the-input-element.html
+        *  - The `EventPluginHub` will then process each event by annotating them with
+        *    "dispatches", a sequence of listeners and IDs that care about that event.
+        *
+        *  - The `EventPluginHub` then dispatches the events.
+        *
+        * Overview of React and the event system:
+        *
+        * +------------+    .
+        * |    DOM     |    .
+        * +------------+    .
+        *       |           .
+        *       v           .
+        * +------------+    .
+        * | ReactEvent |    .
+        * |  Listener  |    .
+        * +------------+    .                         +-----------+
+        *       |           .               +--------+|SimpleEvent|
+        *       |           .               |         |Plugin     |
+        * +-----|------+    .               v         +-----------+
+        * |     |      |    .    +--------------+                    +------------+
+        * |     +-----------.--->|EventPluginHub|                    |    Event   |
+        * |            |    .    |              |     +-----------+  | Propagators|
+        * | ReactEvent |    .    |              |     |TapEvent   |  |------------|
+        * |  Emitter   |    .    |              |<---+|Plugin     |  |other plugin|
+        * |            |    .    |              |     +-----------+  |  utilities |
+        * |     +-----------.--->|              |                    +------------+
+        * |     |      |    .    +--------------+
+        * +-----|------+    .                ^        +-----------+
+        *       |           .                |        |Enter/Leave|
+        *       +           .                +-------+|Plugin     |
+        * +-------------+   .                         +-----------+
+        * | application |   .
+        * |-------------|   .
+        * |             |   .
+        * |             |   .
+        * +-------------+   .
+        *                   .
+        *    React Core     .  General Purpose Event Plugin System
         */
-       var ReactDOMInput = {
-         getNativeProps: function (inst, props, context) {
-           var value = LinkedValueUtils.getValue(props);
-           var checked = LinkedValueUtils.getChecked(props);
-       
-           var nativeProps = assign({}, props, {
-             defaultChecked: undefined,
-             defaultValue: undefined,
-             value: value != null ? value : inst._wrapperState.initialValue,
-             checked: checked != null ? checked : inst._wrapperState.initialChecked,
-             onChange: inst._wrapperState.onChange
-           });
-       
-           return nativeProps;
-         },
-       
-         mountWrapper: function (inst, props) {
-           if (process.env.NODE_ENV !== 'production') {
-             LinkedValueUtils.checkPropTypes('input', props, inst._currentElement._owner);
-           }
-       
-           var defaultValue = props.defaultValue;
-           inst._wrapperState = {
-             initialChecked: props.defaultChecked || false,
-             initialValue: defaultValue != null ? defaultValue : null,
-             onChange: _handleChange.bind(inst)
-           };
-         },
-       
-         mountReadyWrapper: function (inst) {
-           // Can't be in mountWrapper or else server rendering leaks.
-           instancesByReactID[inst._rootNodeID] = inst;
-         },
        
-         unmountWrapper: function (inst) {
-           delete instancesByReactID[inst._rootNodeID];
-         },
+       var hasEventPageXY;
+       var alreadyListeningTo = {};
+       var isMonitoringScrollValue = false;
+       var reactTopListenersCounter = 0;
        
-         updateWrapper: function (inst) {
-           var props = inst._currentElement.props;
+       // For events like 'submit' which don't consistently bubble (which we trap at a
+       // lower node than `document`), binding at `document` would cause duplicate
+       // events so we don't include them here
+       var topEventMapping = {
+         topAbort: 'abort',
+         topAnimationEnd: getVendorPrefixedEventName('animationend') || 'animationend',
+         topAnimationIteration: getVendorPrefixedEventName('animationiteration') || 'animationiteration',
+         topAnimationStart: getVendorPrefixedEventName('animationstart') || 'animationstart',
+         topBlur: 'blur',
+         topCanPlay: 'canplay',
+         topCanPlayThrough: 'canplaythrough',
+         topChange: 'change',
+         topClick: 'click',
+         topCompositionEnd: 'compositionend',
+         topCompositionStart: 'compositionstart',
+         topCompositionUpdate: 'compositionupdate',
+         topContextMenu: 'contextmenu',
+         topCopy: 'copy',
+         topCut: 'cut',
+         topDoubleClick: 'dblclick',
+         topDrag: 'drag',
+         topDragEnd: 'dragend',
+         topDragEnter: 'dragenter',
+         topDragExit: 'dragexit',
+         topDragLeave: 'dragleave',
+         topDragOver: 'dragover',
+         topDragStart: 'dragstart',
+         topDrop: 'drop',
+         topDurationChange: 'durationchange',
+         topEmptied: 'emptied',
+         topEncrypted: 'encrypted',
+         topEnded: 'ended',
+         topError: 'error',
+         topFocus: 'focus',
+         topInput: 'input',
+         topKeyDown: 'keydown',
+         topKeyPress: 'keypress',
+         topKeyUp: 'keyup',
+         topLoadedData: 'loadeddata',
+         topLoadedMetadata: 'loadedmetadata',
+         topLoadStart: 'loadstart',
+         topMouseDown: 'mousedown',
+         topMouseMove: 'mousemove',
+         topMouseOut: 'mouseout',
+         topMouseOver: 'mouseover',
+         topMouseUp: 'mouseup',
+         topPaste: 'paste',
+         topPause: 'pause',
+         topPlay: 'play',
+         topPlaying: 'playing',
+         topProgress: 'progress',
+         topRateChange: 'ratechange',
+         topScroll: 'scroll',
+         topSeeked: 'seeked',
+         topSeeking: 'seeking',
+         topSelectionChange: 'selectionchange',
+         topStalled: 'stalled',
+         topSuspend: 'suspend',
+         topTextInput: 'textInput',
+         topTimeUpdate: 'timeupdate',
+         topTouchCancel: 'touchcancel',
+         topTouchEnd: 'touchend',
+         topTouchMove: 'touchmove',
+         topTouchStart: 'touchstart',
+         topTransitionEnd: getVendorPrefixedEventName('transitionend') || 'transitionend',
+         topVolumeChange: 'volumechange',
+         topWaiting: 'waiting',
+         topWheel: 'wheel'
+       };
        
-           // TODO: Shouldn't this be getChecked(props)?
-           var checked = props.checked;
-           if (checked != null) {
-             ReactDOMIDOperations.updatePropertyByID(inst._rootNodeID, 'checked', checked || false);
+       /**
+        * To ensure no conflicts with other potential React instances on the page
+        */
+       var topListenersIDKey = '_reactListenersID' + String(Math.random()).slice(2);
+       
+       function getListeningForDocument(mountAt) {
+         // In IE8, `mountAt` is a host object and doesn't have `hasOwnProperty`
+         // directly.
+         if (!Object.prototype.hasOwnProperty.call(mountAt, topListenersIDKey)) {
+           mountAt[topListenersIDKey] = reactTopListenersCounter++;
+           alreadyListeningTo[mountAt[topListenersIDKey]] = {};
+         }
+         return alreadyListeningTo[mountAt[topListenersIDKey]];
+       }
+       
+       /**
+        * `ReactBrowserEventEmitter` is used to attach top-level event listeners. For
+        * example:
+        *
+        *   EventPluginHub.putListener('myID', 'onClick', myFunction);
+        *
+        * This would allocate a "registration" of `('onClick', myFunction)` on 'myID'.
+        *
+        * @internal
+        */
+       var ReactBrowserEventEmitter = _assign({}, ReactEventEmitterMixin, {
+       
+         /**
+          * Injectable event backend
+          */
+         ReactEventListener: null,
+       
+         injection: {
+           /**
+            * @param {object} ReactEventListener
+            */
+           injectReactEventListener: function (ReactEventListener) {
+             ReactEventListener.setHandleTopLevel(ReactBrowserEventEmitter.handleTopLevel);
+             ReactBrowserEventEmitter.ReactEventListener = ReactEventListener;
            }
+         },
        
-           var value = LinkedValueUtils.getValue(props);
-           if (value != null) {
-             // Cast `value` to a string to ensure the value is set correctly. While
-             // browsers typically do this as necessary, jsdom doesn't.
-             ReactDOMIDOperations.updatePropertyByID(inst._rootNodeID, 'value', '' + value);
+         /**
+          * Sets whether or not any created callbacks should be enabled.
+          *
+          * @param {boolean} enabled True if callbacks should be enabled.
+          */
+         setEnabled: function (enabled) {
+           if (ReactBrowserEventEmitter.ReactEventListener) {
+             ReactBrowserEventEmitter.ReactEventListener.setEnabled(enabled);
            }
-         }
-       };
+         },
        
-       function _handleChange(event) {
-         var props = this._currentElement.props;
+         /**
+          * @return {boolean} True if callbacks are enabled.
+          */
+         isEnabled: function () {
+           return !!(ReactBrowserEventEmitter.ReactEventListener && ReactBrowserEventEmitter.ReactEventListener.isEnabled());
+         },
        
-         var returnValue = LinkedValueUtils.executeOnChange(props, event);
+         /**
+          * We listen for bubbled touch events on the document object.
+          *
+          * Firefox v8.01 (and possibly others) exhibited strange behavior when
+          * mounting `onmousemove` events at some node that was not the document
+          * element. The symptoms were that if your mouse is not moving over something
+          * contained within that mount point (for example on the background) the
+          * top-level listeners for `onmousemove` won't be called. However, if you
+          * register the `mousemove` on the document object, then it will of course
+          * catch all `mousemove`s. This along with iOS quirks, justifies restricting
+          * top-level listeners to the document object only, at least for these
+          * movement types of events and possibly all events.
+          *
+          * @see http://www.quirksmode.org/blog/archives/2010/09/click_event_del.html
+          *
+          * Also, `keyup`/`keypress`/`keydown` do not bubble to the window on IE, but
+          * they bubble to document.
+          *
+          * @param {string} registrationName Name of listener (e.g. `onClick`).
+          * @param {object} contentDocumentHandle Document which owns the container
+          */
+         listenTo: function (registrationName, contentDocumentHandle) {
+           var mountAt = contentDocumentHandle;
+           var isListening = getListeningForDocument(mountAt);
+           var dependencies = EventPluginRegistry.registrationNameDependencies[registrationName];
        
-         // Here we use asap to wait until all updates have propagated, which
-         // is important when using controlled components within layers:
-         // https://github.com/facebook/react/issues/1698
-         ReactUpdates.asap(forceUpdateIfMounted, this);
+           var topLevelTypes = EventConstants.topLevelTypes;
+           for (var i = 0; i < dependencies.length; i++) {
+             var dependency = dependencies[i];
+             if (!(isListening.hasOwnProperty(dependency) && isListening[dependency])) {
+               if (dependency === topLevelTypes.topWheel) {
+                 if (isEventSupported('wheel')) {
+                   ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topWheel, 'wheel', mountAt);
+                 } else if (isEventSupported('mousewheel')) {
+                   ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topWheel, 'mousewheel', mountAt);
+                 } else {
+                   // Firefox needs to capture a different mouse scroll event.
+                   // @see http://www.quirksmode.org/dom/events/tests/scroll.html
+                   ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topWheel, 'DOMMouseScroll', mountAt);
+                 }
+               } else if (dependency === topLevelTypes.topScroll) {
        
-         var name = props.name;
-         if (props.type === 'radio' && name != null) {
-           var rootNode = ReactMount.getNode(this._rootNodeID);
-           var queryRoot = rootNode;
+                 if (isEventSupported('scroll', true)) {
+                   ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelTypes.topScroll, 'scroll', mountAt);
+                 } else {
+                   ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topScroll, 'scroll', ReactBrowserEventEmitter.ReactEventListener.WINDOW_HANDLE);
+                 }
+               } else if (dependency === topLevelTypes.topFocus || dependency === topLevelTypes.topBlur) {
        
-           while (queryRoot.parentNode) {
-             queryRoot = queryRoot.parentNode;
-           }
+                 if (isEventSupported('focus', true)) {
+                   ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelTypes.topFocus, 'focus', mountAt);
+                   ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelTypes.topBlur, 'blur', mountAt);
+                 } else if (isEventSupported('focusin')) {
+                   // IE has `focusin` and `focusout` events which bubble.
+                   // @see http://www.quirksmode.org/blog/archives/2008/04/delegating_the.html
+                   ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topFocus, 'focusin', mountAt);
+                   ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topBlur, 'focusout', mountAt);
+                 }
        
-           // If `rootNode.form` was non-null, then we could try `form.elements`,
-           // but that sometimes behaves strangely in IE8. We could also try using
-           // `form.getElementsByName`, but that will only return direct children
-           // and won't include inputs that use the HTML5 `form=` attribute. Since
-           // the input might not even be in a form, let's just use the global
-           // `querySelectorAll` to ensure we don't miss anything.
-           var group = queryRoot.querySelectorAll('input[name=' + JSON.stringify('' + name) + '][type="radio"]');
+                 // to make sure blur and focus event listeners are only attached once
+                 isListening[topLevelTypes.topBlur] = true;
+                 isListening[topLevelTypes.topFocus] = true;
+               } else if (topEventMapping.hasOwnProperty(dependency)) {
+                 ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(dependency, topEventMapping[dependency], mountAt);
+               }
        
-           for (var i = 0; i < group.length; i++) {
-             var otherNode = group[i];
-             if (otherNode === rootNode || otherNode.form !== rootNode.form) {
-               continue;
+               isListening[dependency] = true;
              }
-             // This will throw if radio buttons rendered by different copies of React
-             // and the same name are rendered into the same form (same as #1939).
-             // That's probably okay; we don't support it just as we don't support
-             // mixing React with non-React.
-             var otherID = ReactMount.getID(otherNode);
-             !otherID ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactDOMInput: Mixing React and non-React radio inputs with the ' + 'same `name` is not supported.') : invariant(false) : undefined;
-             var otherInstance = instancesByReactID[otherID];
-             !otherInstance ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactDOMInput: Unknown radio button ID %s.', otherID) : invariant(false) : undefined;
-             // If this is a controlled radio button group, forcing the input that
-             // was previously checked to update will cause it to be come re-checked
-             // as appropriate.
-             ReactUpdates.asap(forceUpdateIfMounted, otherInstance);
+           }
+         },
+       
+         trapBubbledEvent: function (topLevelType, handlerBaseName, handle) {
+           return ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelType, handlerBaseName, handle);
+         },
+       
+         trapCapturedEvent: function (topLevelType, handlerBaseName, handle) {
+           return ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelType, handlerBaseName, handle);
+         },
+       
+         /**
+          * Listens to window scroll and resize events. We cache scroll values so that
+          * application code can access them without triggering reflows.
+          *
+          * ViewportMetrics is only used by SyntheticMouse/TouchEvent and only when
+          * pageX/pageY isn't supported (legacy browsers).
+          *
+          * NOTE: Scroll events do not bubble.
+          *
+          * @see http://www.quirksmode.org/dom/events/scroll.html
+          */
+         ensureScrollValueMonitoring: function () {
+           if (hasEventPageXY === undefined) {
+             hasEventPageXY = document.createEvent && 'pageX' in document.createEvent('MouseEvent');
+           }
+           if (!hasEventPageXY && !isMonitoringScrollValue) {
+             var refresh = ViewportMetrics.refreshScrollValues;
+             ReactBrowserEventEmitter.ReactEventListener.monitorScrollValue(refresh);
+             isMonitoringScrollValue = true;
            }
          }
        
-         return returnValue;
-       }
+       });
        
-       module.exports = ReactDOMInput;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
+       module.exports = ReactBrowserEventEmitter;
 
 /***/ },
-/* 108 */
+/* 115 */
 /***/ function(module, exports, __webpack_require__) {
 
-       /* WEBPACK VAR INJECTION */(function(process) {/**
-        * Copyright 2013-2015, Facebook, Inc.
+       /**
+        * Copyright 2013-present, 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.
         *
-        * @providesModule LinkedValueUtils
-        * @typechecks static-only
+        * @providesModule ReactEventEmitterMixin
         */
        
        'use strict';
        
-       var ReactPropTypes = __webpack_require__(109);
-       var ReactPropTypeLocations = __webpack_require__(67);
+       var EventPluginHub = __webpack_require__(46);
        
-       var invariant = __webpack_require__(15);
-       var warning = __webpack_require__(27);
+       function runEventQueueInBatch(events) {
+         EventPluginHub.enqueueEvents(events);
+         EventPluginHub.processEventQueue(false);
+       }
        
-       var hasReadOnlyValue = {
-         'button': true,
-         'checkbox': true,
-         'image': true,
-         'hidden': true,
-         'radio': true,
-         'reset': true,
-         'submit': true
+       var ReactEventEmitterMixin = {
+       
+         /**
+          * Streams a fired top-level event to `EventPluginHub` where plugins have the
+          * opportunity to create `ReactEvent`s to be dispatched.
+          */
+         handleTopLevel: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {
+           var events = EventPluginHub.extractEvents(topLevelType, targetInst, nativeEvent, nativeEventTarget);
+           runEventQueueInBatch(events);
+         }
        };
        
-       function _assertSingleLink(inputProps) {
-         !(inputProps.checkedLink == null || inputProps.valueLink == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Cannot provide a checkedLink and a valueLink. If you want to use ' + 'checkedLink, you probably don\'t want to use valueLink and vice versa.') : invariant(false) : undefined;
-       }
-       function _assertValueLink(inputProps) {
-         _assertSingleLink(inputProps);
-         !(inputProps.value == null && inputProps.onChange == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Cannot provide a valueLink and a value or onChange event. If you want ' + 'to use value or onChange, you probably don\'t want to use valueLink.') : invariant(false) : undefined;
-       }
+       module.exports = ReactEventEmitterMixin;
+
+/***/ },
+/* 116 */
+/***/ function(module, exports, __webpack_require__) {
+
+       /**
+        * Copyright 2013-present, 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.
+        *
+        * @providesModule getVendorPrefixedEventName
+        */
        
-       function _assertCheckedLink(inputProps) {
-         _assertSingleLink(inputProps);
-         !(inputProps.checked == null && inputProps.onChange == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Cannot provide a checkedLink and a checked property or onChange event. ' + 'If you want to use checked or onChange, you probably don\'t want to ' + 'use checkedLink') : invariant(false) : undefined;
+       'use strict';
+       
+       var ExecutionEnvironment = __webpack_require__(52);
+       
+       /**
+        * Generate a mapping of standard vendor prefixes using the defined style property and event name.
+        *
+        * @param {string} styleProp
+        * @param {string} eventName
+        * @returns {object}
+        */
+       function makePrefixMap(styleProp, eventName) {
+         var prefixes = {};
+       
+         prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();
+         prefixes['Webkit' + styleProp] = 'webkit' + eventName;
+         prefixes['Moz' + styleProp] = 'moz' + eventName;
+         prefixes['ms' + styleProp] = 'MS' + eventName;
+         prefixes['O' + styleProp] = 'o' + eventName.toLowerCase();
+       
+         return prefixes;
        }
        
-       var propTypes = {
-         value: function (props, propName, componentName) {
-           if (!props[propName] || hasReadOnlyValue[props.type] || props.onChange || props.readOnly || props.disabled) {
-             return null;
-           }
-           return new Error('You provided a `value` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultValue`. Otherwise, ' + 'set either `onChange` or `readOnly`.');
-         },
-         checked: function (props, propName, componentName) {
-           if (!props[propName] || props.onChange || props.readOnly || props.disabled) {
-             return null;
-           }
-           return new Error('You provided a `checked` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultChecked`. Otherwise, ' + 'set either `onChange` or `readOnly`.');
-         },
-         onChange: ReactPropTypes.func
+       /**
+        * A list of event names to a configurable list of vendor prefixes.
+        */
+       var vendorPrefixes = {
+         animationend: makePrefixMap('Animation', 'AnimationEnd'),
+         animationiteration: makePrefixMap('Animation', 'AnimationIteration'),
+         animationstart: makePrefixMap('Animation', 'AnimationStart'),
+         transitionend: makePrefixMap('Transition', 'TransitionEnd')
        };
        
-       var loggedTypeFailures = {};
-       function getDeclarationErrorAddendum(owner) {
-         if (owner) {
-           var name = owner.getName();
-           if (name) {
-             return ' Check the render method of `' + name + '`.';
-           }
-         }
-         return '';
-       }
+       /**
+        * Event names that have already been detected and prefixed (if applicable).
+        */
+       var prefixedEventNames = {};
        
        /**
-        * Provide a linked `value` attribute for controlled forms. You should not use
-        * this outside of the ReactDOM controlled form components.
+        * Element to check for prefixes on.
         */
-       var LinkedValueUtils = {
-         checkPropTypes: function (tagName, props, owner) {
-           for (var propName in propTypes) {
-             if (propTypes.hasOwnProperty(propName)) {
-               var error = propTypes[propName](props, propName, tagName, ReactPropTypeLocations.prop);
-             }
-             if (error instanceof Error && !(error.message in loggedTypeFailures)) {
-               // Only monitor this failure once because there tends to be a lot of the
-               // same error.
-               loggedTypeFailures[error.message] = true;
+       var style = {};
        
-               var addendum = getDeclarationErrorAddendum(owner);
-               process.env.NODE_ENV !== 'production' ? warning(false, 'Failed form propType: %s%s', error.message, addendum) : undefined;
-             }
-           }
-         },
+       /**
+        * Bootstrap if a DOM exists.
+        */
+       if (ExecutionEnvironment.canUseDOM) {
+         style = document.createElement('div').style;
        
-         /**
-          * @param {object} inputProps Props for form component
-          * @return {*} current value of the input either from value prop or link.
-          */
-         getValue: function (inputProps) {
-           if (inputProps.valueLink) {
-             _assertValueLink(inputProps);
-             return inputProps.valueLink.value;
-           }
-           return inputProps.value;
-         },
+         // On some platforms, in particular some releases of Android 4.x,
+         // the un-prefixed "animation" and "transition" properties are defined on the
+         // style object but the events that fire will still be prefixed, so we need
+         // to check if the un-prefixed events are usable, and if not remove them from the map.
+         if (!('AnimationEvent' in window)) {
+           delete vendorPrefixes.animationend.animation;
+           delete vendorPrefixes.animationiteration.animation;
+           delete vendorPrefixes.animationstart.animation;
+         }
        
-         /**
-          * @param {object} inputProps Props for form component
-          * @return {*} current checked status of the input either from checked prop
-          *             or link.
-          */
-         getChecked: function (inputProps) {
-           if (inputProps.checkedLink) {
-             _assertCheckedLink(inputProps);
-             return inputProps.checkedLink.value;
-           }
-           return inputProps.checked;
-         },
+         // Same as above
+         if (!('TransitionEvent' in window)) {
+           delete vendorPrefixes.transitionend.transition;
+         }
+       }
        
-         /**
-          * @param {object} inputProps Props for form component
-          * @param {SyntheticEvent} event change event to handle
-          */
-         executeOnChange: function (inputProps, event) {
-           if (inputProps.valueLink) {
-             _assertValueLink(inputProps);
-             return inputProps.valueLink.requestChange(event.target.value);
-           } else if (inputProps.checkedLink) {
-             _assertCheckedLink(inputProps);
-             return inputProps.checkedLink.requestChange(event.target.checked);
-           } else if (inputProps.onChange) {
-             return inputProps.onChange.call(undefined, event);
+       /**
+        * Attempts to determine the correct vendor prefixed event name.
+        *
+        * @param {string} eventName
+        * @returns {string}
+        */
+       function getVendorPrefixedEventName(eventName) {
+         if (prefixedEventNames[eventName]) {
+           return prefixedEventNames[eventName];
+         } else if (!vendorPrefixes[eventName]) {
+           return eventName;
+         }
+       
+         var prefixMap = vendorPrefixes[eventName];
+       
+         for (var styleProp in prefixMap) {
+           if (prefixMap.hasOwnProperty(styleProp) && styleProp in style) {
+             return prefixedEventNames[eventName] = prefixMap[styleProp];
            }
          }
-       };
        
-       module.exports = LinkedValueUtils;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
+         return '';
+       }
+       
+       module.exports = getVendorPrefixedEventName;
 
 /***/ },
-/* 109 */
+/* 117 */
 /***/ function(module, exports, __webpack_require__) {
 
        /**
-        * Copyright 2013-2015, Facebook, Inc.
+        * Copyright 2013-present, 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.
         *
-        * @providesModule ReactPropTypes
+        * @providesModule ReactDOMButton
         */
        
        'use strict';
        
-       var ReactElement = __webpack_require__(44);
-       var ReactPropTypeLocationNames = __webpack_require__(68);
+       var DisabledInputUtils = __webpack_require__(118);
        
-       var emptyFunction = __webpack_require__(17);
-       var getIteratorFn = __webpack_require__(110);
+       /**
+        * Implements a <button> host component that does not receive mouse events
+        * when `disabled` is set.
+        */
+       var ReactDOMButton = {
+         getHostProps: DisabledInputUtils.getHostProps
+       };
        
+       module.exports = ReactDOMButton;
+
+/***/ },
+/* 118 */
+/***/ function(module, exports) {
+
        /**
-        * Collection of methods that allow declaration and validation of props that are
-        * supplied to React components. Example usage:
-        *
-        *   var Props = require('ReactPropTypes');
-        *   var MyArticle = React.createClass({
-        *     propTypes: {
-        *       // An optional string prop named "description".
-        *       description: Props.string,
-        *
-        *       // A required enum prop named "category".
-        *       category: Props.oneOf(['News','Photos']).isRequired,
-        *
-        *       // A prop named "dialog" that requires an instance of Dialog.
-        *       dialog: Props.instanceOf(Dialog).isRequired
-        *     },
-        *     render: function() { ... }
-        *   });
-        *
-        * A more formal specification of how these methods are used:
-        *
-        *   type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)
-        *   decl := ReactPropTypes.{type}(.isRequired)?
-        *
-        * Each and every declaration produces a function with the same signature. This
-        * allows the creation of custom validation functions. For example:
+        * Copyright 2013-present, Facebook, Inc.
+        * All rights reserved.
         *
-        *  var MyLink = React.createClass({
-        *    propTypes: {
-        *      // An optional string or URI prop named "href".
-        *      href: function(props, propName, componentName) {
-        *        var propValue = props[propName];
-        *        if (propValue != null && typeof propValue !== 'string' &&
-        *            !(propValue instanceof URI)) {
-        *          return new Error(
-        *            'Expected a string or an URI for ' + propName + ' in ' +
-        *            componentName
-        *          );
-        *        }
-        *      }
-        *    },
-        *    render: function() {...}
-        *  });
+        * 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.
         *
-        * @internal
+        * @providesModule DisabledInputUtils
         */
        
-       var ANONYMOUS = '<<anonymous>>';
+       'use strict';
        
-       var ReactPropTypes = {
-         array: createPrimitiveTypeChecker('array'),
-         bool: createPrimitiveTypeChecker('boolean'),
-         func: createPrimitiveTypeChecker('function'),
-         number: createPrimitiveTypeChecker('number'),
-         object: createPrimitiveTypeChecker('object'),
-         string: createPrimitiveTypeChecker('string'),
+       var disableableMouseListenerNames = {
+         onClick: true,
+         onDoubleClick: true,
+         onMouseDown: true,
+         onMouseMove: true,
+         onMouseUp: true,
        
-         any: createAnyTypeChecker(),
-         arrayOf: createArrayOfTypeChecker,
-         element: createElementTypeChecker(),
-         instanceOf: createInstanceTypeChecker,
-         node: createNodeChecker(),
-         objectOf: createObjectOfTypeChecker,
-         oneOf: createEnumTypeChecker,
-         oneOfType: createUnionTypeChecker,
-         shape: createShapeTypeChecker
+         onClickCapture: true,
+         onDoubleClickCapture: true,
+         onMouseDownCapture: true,
+         onMouseMoveCapture: true,
+         onMouseUpCapture: true
        };
        
-       function createChainableTypeChecker(validate) {
-         function checkType(isRequired, props, propName, componentName, location, propFullName) {
-           componentName = componentName || ANONYMOUS;
-           propFullName = propFullName || propName;
-           if (props[propName] == null) {
-             var locationName = ReactPropTypeLocationNames[location];
-             if (isRequired) {
-               return new Error('Required ' + locationName + ' `' + propFullName + '` was not specified in ' + ('`' + componentName + '`.'));
-             }
-             return null;
-           } else {
-             return validate(props, propName, componentName, location, propFullName);
+       /**
+        * Implements a host component that does not receive mouse events
+        * when `disabled` is set.
+        */
+       var DisabledInputUtils = {
+         getHostProps: function (inst, props) {
+           if (!props.disabled) {
+             return props;
            }
-         }
        
-         var chainedCheckType = checkType.bind(null, false);
-         chainedCheckType.isRequired = checkType.bind(null, true);
+           // Copy the props, except the mouse listeners
+           var hostProps = {};
+           for (var key in props) {
+             if (!disableableMouseListenerNames[key] && props.hasOwnProperty(key)) {
+               hostProps[key] = props[key];
+             }
+           }
        
-         return chainedCheckType;
-       }
+           return hostProps;
+         }
+       };
        
-       function createPrimitiveTypeChecker(expectedType) {
-         function validate(props, propName, componentName, location, propFullName) {
-           var propValue = props[propName];
-           var propType = getPropType(propValue);
-           if (propType !== expectedType) {
-             var locationName = ReactPropTypeLocationNames[location];
-             // `propValue` being instance of, say, date/regexp, pass the 'object'
-             // check, but we can offer a more precise error message here rather than
-             // 'of type `object`'.
-             var preciseType = getPreciseType(propValue);
+       module.exports = DisabledInputUtils;
+
+/***/ },
+/* 119 */
+/***/ function(module, exports, __webpack_require__) {
+
+       /* WEBPACK VAR INJECTION */(function(process) {/**
+        * Copyright 2013-present, 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.
+        *
+        * @providesModule ReactDOMInput
+        */
        
-             return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'));
-           }
-           return null;
-         }
-         return createChainableTypeChecker(validate);
-       }
+       'use strict';
        
-       function createAnyTypeChecker() {
-         return createChainableTypeChecker(emptyFunction.thatReturns(null));
-       }
+       var _prodInvariant = __webpack_require__(9),
+           _assign = __webpack_require__(6);
        
-       function createArrayOfTypeChecker(typeChecker) {
-         function validate(props, propName, componentName, location, propFullName) {
-           var propValue = props[propName];
-           if (!Array.isArray(propValue)) {
-             var locationName = ReactPropTypeLocationNames[location];
-             var propType = getPropType(propValue);
-             return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));
-           }
-           for (var i = 0; i < propValue.length; i++) {
-             var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']');
-             if (error instanceof Error) {
-               return error;
-             }
-           }
-           return null;
-         }
-         return createChainableTypeChecker(validate);
-       }
+       var DisabledInputUtils = __webpack_require__(118);
+       var DOMPropertyOperations = __webpack_require__(108);
+       var LinkedValueUtils = __webpack_require__(120);
+       var ReactDOMComponentTree = __webpack_require__(39);
+       var ReactUpdates = __webpack_require__(59);
        
-       function createElementTypeChecker() {
-         function validate(props, propName, componentName, location, propFullName) {
-           if (!ReactElement.isValidElement(props[propName])) {
-             var locationName = ReactPropTypeLocationNames[location];
-             return new Error('Invalid ' + locationName + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a single ReactElement.'));
-           }
-           return null;
+       var invariant = __webpack_require__(10);
+       var warning = __webpack_require__(13);
+       
+       var didWarnValueLink = false;
+       var didWarnCheckedLink = false;
+       var didWarnValueDefaultValue = false;
+       var didWarnCheckedDefaultChecked = false;
+       var didWarnControlledToUncontrolled = false;
+       var didWarnUncontrolledToControlled = false;
+       
+       function forceUpdateIfMounted() {
+         if (this._rootNodeID) {
+           // DOM component is still mounted; update
+           ReactDOMInput.updateWrapper(this);
          }
-         return createChainableTypeChecker(validate);
        }
        
-       function createInstanceTypeChecker(expectedClass) {
-         function validate(props, propName, componentName, location, propFullName) {
-           if (!(props[propName] instanceof expectedClass)) {
-             var locationName = ReactPropTypeLocationNames[location];
-             var expectedClassName = expectedClass.name || ANONYMOUS;
-             var actualClassName = getClassName(props[propName]);
-             return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));
-           }
-           return null;
-         }
-         return createChainableTypeChecker(validate);
+       function isControlled(props) {
+         var usesChecked = props.type === 'checkbox' || props.type === 'radio';
+         return usesChecked ? props.checked !== undefined : props.value !== undefined;
        }
        
-       function createEnumTypeChecker(expectedValues) {
-         if (!Array.isArray(expectedValues)) {
-           return createChainableTypeChecker(function () {
-             return new Error('Invalid argument supplied to oneOf, expected an instance of array.');
+       /**
+        * Implements an <input> host component that allows setting these optional
+        * props: `checked`, `value`, `defaultChecked`, and `defaultValue`.
+        *
+        * If `checked` or `value` are not supplied (or null/undefined), user actions
+        * that affect the checked state or value will trigger updates to the element.
+        *
+        * If they are supplied (and not null/undefined), the rendered element will not
+        * trigger updates to the element. Instead, the props must change in order for
+        * the rendered element to be updated.
+        *
+        * The rendered element will be initialized as unchecked (or `defaultChecked`)
+        * with an empty value (or `defaultValue`).
+        *
+        * @see http://www.w3.org/TR/2012/WD-html5-20121025/the-input-element.html
+        */
+       var ReactDOMInput = {
+         getHostProps: function (inst, props) {
+           var value = LinkedValueUtils.getValue(props);
+           var checked = LinkedValueUtils.getChecked(props);
+       
+           var hostProps = _assign({
+             // Make sure we set .type before any other properties (setting .value
+             // before .type means .value is lost in IE11 and below)
+             type: undefined,
+             // Make sure we set .step before .value (setting .value before .step
+             // means .value is rounded on mount, based upon step precision)
+             step: undefined
+           }, DisabledInputUtils.getHostProps(inst, props), {
+             defaultChecked: undefined,
+             defaultValue: undefined,
+             value: value != null ? value : inst._wrapperState.initialValue,
+             checked: checked != null ? checked : inst._wrapperState.initialChecked,
+             onChange: inst._wrapperState.onChange
            });
-         }
        
-         function validate(props, propName, componentName, location, propFullName) {
-           var propValue = props[propName];
-           for (var i = 0; i < expectedValues.length; i++) {
-             if (propValue === expectedValues[i]) {
-               return null;
+           return hostProps;
+         },
+       
+         mountWrapper: function (inst, props) {
+           if (process.env.NODE_ENV !== 'production') {
+             LinkedValueUtils.checkPropTypes('input', props, inst._currentElement._owner);
+       
+             var owner = inst._currentElement._owner;
+       
+             if (props.valueLink !== undefined && !didWarnValueLink) {
+               process.env.NODE_ENV !== 'production' ? warning(false, '`valueLink` prop on `input` is deprecated; set `value` and `onChange` instead.') : void 0;
+               didWarnValueLink = true;
+             }
+             if (props.checkedLink !== undefined && !didWarnCheckedLink) {
+               process.env.NODE_ENV !== 'production' ? warning(false, '`checkedLink` prop on `input` is deprecated; set `value` and `onChange` instead.') : void 0;
+               didWarnCheckedLink = true;
+             }
+             if (props.checked !== undefined && props.defaultChecked !== undefined && !didWarnCheckedDefaultChecked) {
+               process.env.NODE_ENV !== 'production' ? warning(false, '%s contains an input of type %s with both checked and defaultChecked props. ' + 'Input elements must be either controlled or uncontrolled ' + '(specify either the checked prop, or the defaultChecked prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components', owner && owner.getName() || 'A component', props.type) : void 0;
+               didWarnCheckedDefaultChecked = true;
+             }
+             if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValueDefaultValue) {
+               process.env.NODE_ENV !== 'production' ? warning(false, '%s contains an input of type %s with both value and defaultValue props. ' + 'Input elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components', owner && owner.getName() || 'A component', props.type) : void 0;
+               didWarnValueDefaultValue = true;
              }
            }
        
-           var locationName = ReactPropTypeLocationNames[location];
-           var valuesString = JSON.stringify(expectedValues);
-           return new Error('Invalid ' + locationName + ' `' + propFullName + '` of value `' + propValue + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));
-         }
-         return createChainableTypeChecker(validate);
-       }
+           var defaultValue = props.defaultValue;
+           inst._wrapperState = {
+             initialChecked: props.checked != null ? props.checked : props.defaultChecked,
+             initialValue: props.value != null ? props.value : defaultValue,
+             listeners: null,
+             onChange: _handleChange.bind(inst)
+           };
        
-       function createObjectOfTypeChecker(typeChecker) {
-         function validate(props, propName, componentName, location, propFullName) {
-           var propValue = props[propName];
-           var propType = getPropType(propValue);
-           if (propType !== 'object') {
-             var locationName = ReactPropTypeLocationNames[location];
-             return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));
+           if (process.env.NODE_ENV !== 'production') {
+             inst._wrapperState.controlled = isControlled(props);
            }
-           for (var key in propValue) {
-             if (propValue.hasOwnProperty(key)) {
-               var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key);
-               if (error instanceof Error) {
-                 return error;
-               }
+         },
+       
+         updateWrapper: function (inst) {
+           var props = inst._currentElement.props;
+       
+           if (process.env.NODE_ENV !== 'production') {
+             var controlled = isControlled(props);
+             var owner = inst._currentElement._owner;
+       
+             if (!inst._wrapperState.controlled && controlled && !didWarnUncontrolledToControlled) {
+               process.env.NODE_ENV !== 'production' ? warning(false, '%s is changing an uncontrolled input of type %s to be controlled. ' + 'Input elements should not switch from uncontrolled to controlled (or vice versa). ' + 'Decide between using a controlled or uncontrolled input ' + 'element for the lifetime of the component. More info: https://fb.me/react-controlled-components', owner && owner.getName() || 'A component', props.type) : void 0;
+               didWarnUncontrolledToControlled = true;
+             }
+             if (inst._wrapperState.controlled && !controlled && !didWarnControlledToUncontrolled) {
+               process.env.NODE_ENV !== 'production' ? warning(false, '%s is changing a controlled input of type %s to be uncontrolled. ' + 'Input elements should not switch from controlled to uncontrolled (or vice versa). ' + 'Decide between using a controlled or uncontrolled input ' + 'element for the lifetime of the component. More info: https://fb.me/react-controlled-components', owner && owner.getName() || 'A component', props.type) : void 0;
+               didWarnControlledToUncontrolled = true;
              }
            }
-           return null;
-         }
-         return createChainableTypeChecker(validate);
-       }
        
-       function createUnionTypeChecker(arrayOfTypeCheckers) {
-         if (!Array.isArray(arrayOfTypeCheckers)) {
-           return createChainableTypeChecker(function () {
-             return new Error('Invalid argument supplied to oneOfType, expected an instance of array.');
-           });
-         }
+           // TODO: Shouldn't this be getChecked(props)?
+           var checked = props.checked;
+           if (checked != null) {
+             DOMPropertyOperations.setValueForProperty(ReactDOMComponentTree.getNodeFromInstance(inst), 'checked', checked || false);
+           }
        
-         function validate(props, propName, componentName, location, propFullName) {
-           for (var i = 0; i < arrayOfTypeCheckers.length; i++) {
-             var checker = arrayOfTypeCheckers[i];
-             if (checker(props, propName, componentName, location, propFullName) == null) {
-               return null;
+           var node = ReactDOMComponentTree.getNodeFromInstance(inst);
+           var value = LinkedValueUtils.getValue(props);
+           if (value != null) {
+       
+             // Cast `value` to a string to ensure the value is set correctly. While
+             // browsers typically do this as necessary, jsdom doesn't.
+             var newValue = '' + value;
+       
+             // To avoid side effects (such as losing text selection), only set value if changed
+             if (newValue !== node.value) {
+               node.value = newValue;
+             }
+           } else {
+             if (props.value == null && props.defaultValue != null) {
+               node.defaultValue = '' + props.defaultValue;
+             }
+             if (props.checked == null && props.defaultChecked != null) {
+               node.defaultChecked = !!props.defaultChecked;
              }
            }
+         },
        
-           var locationName = ReactPropTypeLocationNames[location];
-           return new Error('Invalid ' + locationName + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`.'));
-         }
-         return createChainableTypeChecker(validate);
-       }
+         postMountWrapper: function (inst) {
+           var props = inst._currentElement.props;
        
-       function createNodeChecker() {
-         function validate(props, propName, componentName, location, propFullName) {
-           if (!isNode(props[propName])) {
-             var locationName = ReactPropTypeLocationNames[location];
-             return new Error('Invalid ' + locationName + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));
+           // This is in postMount because we need access to the DOM node, which is not
+           // available until after the component has mounted.
+           var node = ReactDOMComponentTree.getNodeFromInstance(inst);
+       
+           // Detach value from defaultValue. We won't do anything if we're working on
+           // submit or reset inputs as those values & defaultValues are linked. They
+           // are not resetable nodes so this operation doesn't matter and actually
+           // removes browser-default values (eg "Submit Query") when no value is
+           // provided.
+           if (props.type !== 'submit' && props.type !== 'reset') {
+             node.value = node.value;
+           }
+       
+           // Normally, we'd just do `node.checked = node.checked` upon initial mount, less this bug
+           // this is needed to work around a chrome bug where setting defaultChecked
+           // will sometimes influence the value of checked (even after detachment).
+           // Reference: https://bugs.chromium.org/p/chromium/issues/detail?id=608416
+           // We need to temporarily unset name to avoid disrupting radio button groups.
+           var name = node.name;
+           if (name !== '') {
+             node.name = '';
+           }
+           node.defaultChecked = !node.defaultChecked;
+           node.defaultChecked = !node.defaultChecked;
+           if (name !== '') {
+             node.name = name;
            }
-           return null;
          }
-         return createChainableTypeChecker(validate);
-       }
+       };
        
-       function createShapeTypeChecker(shapeTypes) {
-         function validate(props, propName, componentName, location, propFullName) {
-           var propValue = props[propName];
-           var propType = getPropType(propValue);
-           if (propType !== 'object') {
-             var locationName = ReactPropTypeLocationNames[location];
-             return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));
+       function _handleChange(event) {
+         var props = this._currentElement.props;
+       
+         var returnValue = LinkedValueUtils.executeOnChange(props, event);
+       
+         // Here we use asap to wait until all updates have propagated, which
+         // is important when using controlled components within layers:
+         // https://github.com/facebook/react/issues/1698
+         ReactUpdates.asap(forceUpdateIfMounted, this);
+       
+         var name = props.name;
+         if (props.type === 'radio' && name != null) {
+           var rootNode = ReactDOMComponentTree.getNodeFromInstance(this);
+           var queryRoot = rootNode;
+       
+           while (queryRoot.parentNode) {
+             queryRoot = queryRoot.parentNode;
            }
-           for (var key in shapeTypes) {
-             var checker = shapeTypes[key];
-             if (!checker) {
+       
+           // If `rootNode.form` was non-null, then we could try `form.elements`,
+           // but that sometimes behaves strangely in IE8. We could also try using
+           // `form.getElementsByName`, but that will only return direct children
+           // and won't include inputs that use the HTML5 `form=` attribute. Since
+           // the input might not even be in a form, let's just use the global
+           // `querySelectorAll` to ensure we don't miss anything.
+           var group = queryRoot.querySelectorAll('input[name=' + JSON.stringify('' + name) + '][type="radio"]');
+       
+           for (var i = 0; i < group.length; i++) {
+             var otherNode = group[i];
+             if (otherNode === rootNode || otherNode.form !== rootNode.form) {
                continue;
              }
-             var error = checker(propValue, key, componentName, location, propFullName + '.' + key);
-             if (error) {
-               return error;
-             }
+             // This will throw if radio buttons rendered by different copies of React
+             // and the same name are rendered into the same form (same as #1939).
+             // That's probably okay; we don't support it just as we don't support
+             // mixing React radio buttons with non-React ones.
+             var otherInstance = ReactDOMComponentTree.getInstanceFromNode(otherNode);
+             !otherInstance ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactDOMInput: Mixing React and non-React radio inputs with the same `name` is not supported.') : _prodInvariant('90') : void 0;
+             // If this is a controlled radio button group, forcing the input that
+             // was previously checked to update will cause it to be come re-checked
+             // as appropriate.
+             ReactUpdates.asap(forceUpdateIfMounted, otherInstance);
            }
-           return null;
          }
-         return createChainableTypeChecker(validate);
+       
+         return returnValue;
        }
        
-       function isNode(propValue) {
-         switch (typeof propValue) {
-           case 'number':
-           case 'string':
-           case 'undefined':
-             return true;
-           case 'boolean':
-             return !propValue;
-           case 'object':
-             if (Array.isArray(propValue)) {
-               return propValue.every(isNode);
-             }
-             if (propValue === null || ReactElement.isValidElement(propValue)) {
-               return true;
-             }
-       
-             var iteratorFn = getIteratorFn(propValue);
-             if (iteratorFn) {
-               var iterator = iteratorFn.call(propValue);
-               var step;
-               if (iteratorFn !== propValue.entries) {
-                 while (!(step = iterator.next()).done) {
-                   if (!isNode(step.value)) {
-                     return false;
-                   }
-                 }
-               } else {
-                 // Iterator will provide entry [k,v] tuples rather than values.
-                 while (!(step = iterator.next()).done) {
-                   var entry = step.value;
-                   if (entry) {
-                     if (!isNode(entry[1])) {
-                       return false;
-                     }
-                   }
-                 }
-               }
-             } else {
-               return false;
-             }
-       
-             return true;
-           default:
-             return false;
-         }
-       }
-       
-       // Equivalent of `typeof` but with special handling for array and regexp.
-       function getPropType(propValue) {
-         var propType = typeof propValue;
-         if (Array.isArray(propValue)) {
-           return 'array';
-         }
-         if (propValue instanceof RegExp) {
-           // Old webkits (at least until Android 4.0) return 'function' rather than
-           // 'object' for typeof a RegExp. We'll normalize this here so that /bla/
-           // passes PropTypes.object.
-           return 'object';
-         }
-         return propType;
-       }
-       
-       // This handles more types than `getPropType`. Only used for error messages.
-       // See `createPrimitiveTypeChecker`.
-       function getPreciseType(propValue) {
-         var propType = getPropType(propValue);
-         if (propType === 'object') {
-           if (propValue instanceof Date) {
-             return 'date';
-           } else if (propValue instanceof RegExp) {
-             return 'regexp';
-           }
-         }
-         return propType;
-       }
-       
-       // Returns class name of the object, if any.
-       function getClassName(propValue) {
-         if (!propValue.constructor || !propValue.constructor.name) {
-           return '<<anonymous>>';
-         }
-         return propValue.constructor.name;
-       }
-       
-       module.exports = ReactPropTypes;
+       module.exports = ReactDOMInput;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
 
 /***/ },
-/* 110 */
-/***/ function(module, exports) {
+/* 120 */
+/***/ function(module, exports, __webpack_require__) {
 
-       /**
-        * Copyright 2013-2015, Facebook, Inc.
+       /* WEBPACK VAR INJECTION */(function(process) {/**
+        * Copyright 2013-present, 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.
         *
-        * @providesModule getIteratorFn
-        * @typechecks static-only
+        * @providesModule LinkedValueUtils
         */
        
        'use strict';
        
-       /* global Symbol */
-       var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;
-       var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.
+       var _prodInvariant = __webpack_require__(9);
+       
+       var ReactPropTypes = __webpack_require__(34);
+       var ReactPropTypeLocations = __webpack_require__(24);
+       var ReactPropTypesSecret = __webpack_require__(33);
+       
+       var invariant = __webpack_require__(10);
+       var warning = __webpack_require__(13);
+       
+       var hasReadOnlyValue = {
+         'button': true,
+         'checkbox': true,
+         'image': true,
+         'hidden': true,
+         'radio': true,
+         'reset': true,
+         'submit': true
+       };
+       
+       function _assertSingleLink(inputProps) {
+         !(inputProps.checkedLink == null || inputProps.valueLink == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Cannot provide a checkedLink and a valueLink. If you want to use checkedLink, you probably don\'t want to use valueLink and vice versa.') : _prodInvariant('87') : void 0;
+       }
+       function _assertValueLink(inputProps) {
+         _assertSingleLink(inputProps);
+         !(inputProps.value == null && inputProps.onChange == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Cannot provide a valueLink and a value or onChange event. If you want to use value or onChange, you probably don\'t want to use valueLink.') : _prodInvariant('88') : void 0;
+       }
+       
+       function _assertCheckedLink(inputProps) {
+         _assertSingleLink(inputProps);
+         !(inputProps.checked == null && inputProps.onChange == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Cannot provide a checkedLink and a checked property or onChange event. If you want to use checked or onChange, you probably don\'t want to use checkedLink') : _prodInvariant('89') : void 0;
+       }
+       
+       var propTypes = {
+         value: function (props, propName, componentName) {
+           if (!props[propName] || hasReadOnlyValue[props.type] || props.onChange || props.readOnly || props.disabled) {
+             return null;
+           }
+           return new Error('You provided a `value` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultValue`. Otherwise, ' + 'set either `onChange` or `readOnly`.');
+         },
+         checked: function (props, propName, componentName) {
+           if (!props[propName] || props.onChange || props.readOnly || props.disabled) {
+             return null;
+           }
+           return new Error('You provided a `checked` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultChecked`. Otherwise, ' + 'set either `onChange` or `readOnly`.');
+         },
+         onChange: ReactPropTypes.func
+       };
+       
+       var loggedTypeFailures = {};
+       function getDeclarationErrorAddendum(owner) {
+         if (owner) {
+           var name = owner.getName();
+           if (name) {
+             return ' Check the render method of `' + name + '`.';
+           }
+         }
+         return '';
+       }
        
        /**
-        * Returns the iterator method function contained on the iterable object.
-        *
-        * Be sure to invoke the function with the iterable as context:
-        *
-        *     var iteratorFn = getIteratorFn(myIterable);
-        *     if (iteratorFn) {
-        *       var iterator = iteratorFn.call(myIterable);
-        *       ...
-        *     }
-        *
-        * @param {?object} maybeIterable
-        * @return {?function}
+        * Provide a linked `value` attribute for controlled forms. You should not use
+        * this outside of the ReactDOM controlled form components.
         */
-       function getIteratorFn(maybeIterable) {
-         var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);
-         if (typeof iteratorFn === 'function') {
-           return iteratorFn;
+       var LinkedValueUtils = {
+         checkPropTypes: function (tagName, props, owner) {
+           for (var propName in propTypes) {
+             if (propTypes.hasOwnProperty(propName)) {
+               var error = propTypes[propName](props, propName, tagName, ReactPropTypeLocations.prop, null, ReactPropTypesSecret);
+             }
+             if (error instanceof Error && !(error.message in loggedTypeFailures)) {
+               // Only monitor this failure once because there tends to be a lot of the
+               // same error.
+               loggedTypeFailures[error.message] = true;
+       
+               var addendum = getDeclarationErrorAddendum(owner);
+               process.env.NODE_ENV !== 'production' ? warning(false, 'Failed form propType: %s%s', error.message, addendum) : void 0;
+             }
+           }
+         },
+       
+         /**
+          * @param {object} inputProps Props for form component
+          * @return {*} current value of the input either from value prop or link.
+          */
+         getValue: function (inputProps) {
+           if (inputProps.valueLink) {
+             _assertValueLink(inputProps);
+             return inputProps.valueLink.value;
+           }
+           return inputProps.value;
+         },
+       
+         /**
+          * @param {object} inputProps Props for form component
+          * @return {*} current checked status of the input either from checked prop
+          *             or link.
+          */
+         getChecked: function (inputProps) {
+           if (inputProps.checkedLink) {
+             _assertCheckedLink(inputProps);
+             return inputProps.checkedLink.value;
+           }
+           return inputProps.checked;
+         },
+       
+         /**
+          * @param {object} inputProps Props for form component
+          * @param {SyntheticEvent} event change event to handle
+          */
+         executeOnChange: function (inputProps, event) {
+           if (inputProps.valueLink) {
+             _assertValueLink(inputProps);
+             return inputProps.valueLink.requestChange(event.target.value);
+           } else if (inputProps.checkedLink) {
+             _assertCheckedLink(inputProps);
+             return inputProps.checkedLink.requestChange(event.target.checked);
+           } else if (inputProps.onChange) {
+             return inputProps.onChange.call(undefined, event);
+           }
          }
-       }
+       };
        
-       module.exports = getIteratorFn;
+       module.exports = LinkedValueUtils;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
 
 /***/ },
-/* 111 */
+/* 121 */
 /***/ function(module, exports, __webpack_require__) {
 
        /* WEBPACK VAR INJECTION */(function(process) {/**
-        * Copyright 2013-2015, Facebook, Inc.
+        * Copyright 2013-present, Facebook, Inc.
         * All rights reserved.
         *
         * This source code is licensed under the BSD-style license found in the
        
        'use strict';
        
-       var ReactChildren = __webpack_require__(112);
-       var ReactDOMSelect = __webpack_require__(114);
+       var _assign = __webpack_require__(6);
+       
+       var ReactChildren = __webpack_require__(7);
+       var ReactDOMComponentTree = __webpack_require__(39);
+       var ReactDOMSelect = __webpack_require__(122);
+       
+       var warning = __webpack_require__(13);
+       var didWarnInvalidOptionChildren = false;
+       
+       function flattenChildren(children) {
+         var content = '';
        
-       var assign = __webpack_require__(41);
-       var warning = __webpack_require__(27);
+         // Flatten children and warn if they aren't strings or numbers;
+         // invalid types are ignored.
+         ReactChildren.forEach(children, function (child) {
+           if (child == null) {
+             return;
+           }
+           if (typeof child === 'string' || typeof child === 'number') {
+             content += child;
+           } else if (!didWarnInvalidOptionChildren) {
+             didWarnInvalidOptionChildren = true;
+             process.env.NODE_ENV !== 'production' ? warning(false, 'Only strings and numbers are supported as <option> children.') : void 0;
+           }
+         });
        
-       var valueContextKey = ReactDOMSelect.valueContextKey;
+         return content;
+       }
        
        /**
-        * Implements an <option> native component that warns when `selected` is set.
+        * Implements an <option> host component that warns when `selected` is set.
         */
        var ReactDOMOption = {
-         mountWrapper: function (inst, props, context) {
+         mountWrapper: function (inst, props, hostParent) {
            // TODO (yungsters): Remove support for `selected` in <option>.
            if (process.env.NODE_ENV !== 'production') {
-             process.env.NODE_ENV !== 'production' ? warning(props.selected == null, 'Use the `defaultValue` or `value` props on <select> instead of ' + 'setting `selected` on <option>.') : undefined;
+             process.env.NODE_ENV !== 'production' ? warning(props.selected == null, 'Use the `defaultValue` or `value` props on <select> instead of ' + 'setting `selected` on <option>.') : void 0;
            }
        
-           // Look up whether this option is 'selected' via context
-           var selectValue = context[valueContextKey];
+           // Look up whether this option is 'selected'
+           var selectValue = null;
+           if (hostParent != null) {
+             var selectParent = hostParent;
+       
+             if (selectParent._tag === 'optgroup') {
+               selectParent = selectParent._hostParent;
+             }
+       
+             if (selectParent != null && selectParent._tag === 'select') {
+               selectValue = ReactDOMSelect.getSelectValueContext(selectParent);
+             }
+           }
        
-           // If context key is null (e.g., no specified value or after initial mount)
+           // If the value is null (e.g., no specified value or after initial mount)
            // or missing (e.g., for <datalist>), we don't change props.selected
            var selected = null;
            if (selectValue != null) {
+             var value;
+             if (props.value != null) {
+               value = props.value + '';
+             } else {
+               value = flattenChildren(props.children);
+             }
              selected = false;
              if (Array.isArray(selectValue)) {
                // multiple
                for (var i = 0; i < selectValue.length; i++) {
-                 if ('' + selectValue[i] === '' + props.value) {
+                 if ('' + selectValue[i] === value) {
                    selected = true;
                    break;
                  }
                }
              } else {
-               selected = '' + selectValue === '' + props.value;
+               selected = '' + selectValue === value;
              }
            }
        
            inst._wrapperState = { selected: selected };
          },
        
-         getNativeProps: function (inst, props, context) {
-           var nativeProps = assign({ selected: undefined, children: undefined }, props);
+         postMountWrapper: function (inst) {
+           // value="" should make a value attribute (#6219)
+           var props = inst._currentElement.props;
+           if (props.value != null) {
+             var node = ReactDOMComponentTree.getNodeFromInstance(inst);
+             node.setAttribute('value', props.value);
+           }
+         },
+       
+         getHostProps: function (inst, props) {
+           var hostProps = _assign({ selected: undefined, children: undefined }, props);
        
            // Read state only from initial mount because <select> updates value
            // manually; we need the initial state only for server rendering
            if (inst._wrapperState.selected != null) {
-             nativeProps.selected = inst._wrapperState.selected;
+             hostProps.selected = inst._wrapperState.selected;
            }
        
-           var content = '';
+           var content = flattenChildren(props.children);
        
-           // Flatten children and warn if they aren't strings or numbers;
-           // invalid types are ignored.
-           ReactChildren.forEach(props.children, function (child) {
-             if (child == null) {
-               return;
-             }
-             if (typeof child === 'string' || typeof child === 'number') {
-               content += child;
-             } else {
-               process.env.NODE_ENV !== 'production' ? warning(false, 'Only strings and numbers are supported as <option> children.') : undefined;
-             }
-           });
+           if (content) {
+             hostProps.children = content;
+           }
        
-           nativeProps.children = content;
-           return nativeProps;
+           return hostProps;
          }
        
        };
        
        module.exports = ReactDOMOption;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
 
 /***/ },
-/* 112 */
+/* 122 */
 /***/ function(module, exports, __webpack_require__) {
 
-       /**
-        * Copyright 2013-2015, Facebook, Inc.
+       /* WEBPACK VAR INJECTION */(function(process) {/**
+        * Copyright 2013-present, 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.
         *
-        * @providesModule ReactChildren
+        * @providesModule ReactDOMSelect
         */
        
        'use strict';
        
-       var PooledClass = __webpack_require__(58);
-       var ReactElement = __webpack_require__(44);
+       var _assign = __webpack_require__(6);
        
-       var emptyFunction = __webpack_require__(17);
-       var traverseAllChildren = __webpack_require__(113);
+       var DisabledInputUtils = __webpack_require__(118);
+       var LinkedValueUtils = __webpack_require__(120);
+       var ReactDOMComponentTree = __webpack_require__(39);
+       var ReactUpdates = __webpack_require__(59);
        
-       var twoArgumentPooler = PooledClass.twoArgumentPooler;
-       var fourArgumentPooler = PooledClass.fourArgumentPooler;
+       var warning = __webpack_require__(13);
        
-       var userProvidedKeyEscapeRegex = /\/(?!\/)/g;
-       function escapeUserProvidedKey(text) {
-         return ('' + text).replace(userProvidedKeyEscapeRegex, '//');
-       }
+       var didWarnValueLink = false;
+       var didWarnValueDefaultValue = false;
        
-       /**
-        * PooledClass representing the bookkeeping associated with performing a child
-        * traversal. Allows avoiding binding callbacks.
-        *
-        * @constructor ForEachBookKeeping
-        * @param {!function} forEachFunction Function to perform traversal with.
-        * @param {?*} forEachContext Context to perform context with.
-        */
-       function ForEachBookKeeping(forEachFunction, forEachContext) {
-         this.func = forEachFunction;
-         this.context = forEachContext;
-         this.count = 0;
-       }
-       ForEachBookKeeping.prototype.destructor = function () {
-         this.func = null;
-         this.context = null;
-         this.count = 0;
-       };
-       PooledClass.addPoolingTo(ForEachBookKeeping, twoArgumentPooler);
+       function updateOptionsIfPendingUpdateAndMounted() {
+         if (this._rootNodeID && this._wrapperState.pendingUpdate) {
+           this._wrapperState.pendingUpdate = false;
        
-       function forEachSingleChild(bookKeeping, child, name) {
-         var func = bookKeeping.func;
-         var context = bookKeeping.context;
+           var props = this._currentElement.props;
+           var value = LinkedValueUtils.getValue(props);
        
-         func.call(context, child, bookKeeping.count++);
+           if (value != null) {
+             updateOptions(this, Boolean(props.multiple), value);
+           }
+         }
        }
        
-       /**
-        * Iterates through children that are typically specified as `props.children`.
-        *
-        * The provided forEachFunc(child, index) will be called for each
-        * leaf child.
-        *
-        * @param {?*} children Children tree container.
-        * @param {function(*, int)} forEachFunc
-        * @param {*} forEachContext Context for forEachContext.
-        */
-       function forEachChildren(children, forEachFunc, forEachContext) {
-         if (children == null) {
-           return children;
+       function getDeclarationErrorAddendum(owner) {
+         if (owner) {
+           var name = owner.getName();
+           if (name) {
+             return ' Check the render method of `' + name + '`.';
+           }
          }
-         var traverseContext = ForEachBookKeeping.getPooled(forEachFunc, forEachContext);
-         traverseAllChildren(children, forEachSingleChild, traverseContext);
-         ForEachBookKeeping.release(traverseContext);
+         return '';
        }
        
+       var valuePropNames = ['value', 'defaultValue'];
+       
        /**
-        * PooledClass representing the bookkeeping associated with performing a child
-        * mapping. Allows avoiding binding callbacks.
-        *
-        * @constructor MapBookKeeping
-        * @param {!*} mapResult Object containing the ordered map of results.
-        * @param {!function} mapFunction Function to perform mapping with.
-        * @param {?*} mapContext Context to perform mapping with.
+        * Validation function for `value` and `defaultValue`.
+        * @private
         */
-       function MapBookKeeping(mapResult, keyPrefix, mapFunction, mapContext) {
-         this.result = mapResult;
-         this.keyPrefix = keyPrefix;
-         this.func = mapFunction;
-         this.context = mapContext;
-         this.count = 0;
-       }
-       MapBookKeeping.prototype.destructor = function () {
-         this.result = null;
-         this.keyPrefix = null;
-         this.func = null;
-         this.context = null;
-         this.count = 0;
-       };
-       PooledClass.addPoolingTo(MapBookKeeping, fourArgumentPooler);
+       function checkSelectPropTypes(inst, props) {
+         var owner = inst._currentElement._owner;
+         LinkedValueUtils.checkPropTypes('select', props, owner);
        
-       function mapSingleChildIntoContext(bookKeeping, child, childKey) {
-         var result = bookKeeping.result;
-         var keyPrefix = bookKeeping.keyPrefix;
-         var func = bookKeeping.func;
-         var context = bookKeeping.context;
+         if (props.valueLink !== undefined && !didWarnValueLink) {
+           process.env.NODE_ENV !== 'production' ? warning(false, '`valueLink` prop on `select` is deprecated; set `value` and `onChange` instead.') : void 0;
+           didWarnValueLink = true;
+         }
        
-         var mappedChild = func.call(context, child, bookKeeping.count++);
-         if (Array.isArray(mappedChild)) {
-           mapIntoWithKeyPrefixInternal(mappedChild, result, childKey, emptyFunction.thatReturnsArgument);
-         } else if (mappedChild != null) {
-           if (ReactElement.isValidElement(mappedChild)) {
-             mappedChild = ReactElement.cloneAndReplaceKey(mappedChild,
-             // Keep both the (mapped) and old keys if they differ, just as
-             // traverseAllChildren used to do for objects as children
-             keyPrefix + (mappedChild !== child ? escapeUserProvidedKey(mappedChild.key || '') + '/' : '') + childKey);
+         for (var i = 0; i < valuePropNames.length; i++) {
+           var propName = valuePropNames[i];
+           if (props[propName] == null) {
+             continue;
+           }
+           if (props.multiple) {
+             process.env.NODE_ENV !== 'production' ? warning(Array.isArray(props[propName]), 'The `%s` prop supplied to <select> must be an array if ' + '`multiple` is true.%s', propName, getDeclarationErrorAddendum(owner)) : void 0;
+           } else {
+             process.env.NODE_ENV !== 'production' ? warning(!Array.isArray(props[propName]), 'The `%s` prop supplied to <select> must be a scalar ' + 'value if `multiple` is false.%s', propName, getDeclarationErrorAddendum(owner)) : void 0;
            }
-           result.push(mappedChild);
          }
        }
        
-       function mapIntoWithKeyPrefixInternal(children, array, prefix, func, context) {
-         var escapedPrefix = '';
-         if (prefix != null) {
-           escapedPrefix = escapeUserProvidedKey(prefix) + '/';
+       /**
+        * @param {ReactDOMComponent} inst
+        * @param {boolean} multiple
+        * @param {*} propValue A stringable (with `multiple`, a list of stringables).
+        * @private
+        */
+       function updateOptions(inst, multiple, propValue) {
+         var selectedValue, i;
+         var options = ReactDOMComponentTree.getNodeFromInstance(inst).options;
+       
+         if (multiple) {
+           selectedValue = {};
+           for (i = 0; i < propValue.length; i++) {
+             selectedValue['' + propValue[i]] = true;
+           }
+           for (i = 0; i < options.length; i++) {
+             var selected = selectedValue.hasOwnProperty(options[i].value);
+             if (options[i].selected !== selected) {
+               options[i].selected = selected;
+             }
+           }
+         } else {
+           // Do not set `select.value` as exact behavior isn't consistent across all
+           // browsers for all cases.
+           selectedValue = '' + propValue;
+           for (i = 0; i < options.length; i++) {
+             if (options[i].value === selectedValue) {
+               options[i].selected = true;
+               return;
+             }
+           }
+           if (options.length) {
+             options[0].selected = true;
+           }
          }
-         var traverseContext = MapBookKeeping.getPooled(array, escapedPrefix, func, context);
-         traverseAllChildren(children, mapSingleChildIntoContext, traverseContext);
-         MapBookKeeping.release(traverseContext);
        }
        
        /**
-        * Maps children that are typically specified as `props.children`.
+        * Implements a <select> host component that allows optionally setting the
+        * props `value` and `defaultValue`. If `multiple` is false, the prop must be a
+        * stringable. If `multiple` is true, the prop must be an array of stringables.
         *
-        * The provided mapFunction(child, key, index) will be called for each
-        * leaf child.
+        * If `value` is not supplied (or null/undefined), user actions that change the
+        * selected option will trigger updates to the rendered options.
         *
-        * @param {?*} children Children tree container.
-        * @param {function(*, int)} func The map function.
-        * @param {*} context Context for mapFunction.
-        * @return {object} Object containing the ordered map of results.
+        * If it is supplied (and not null/undefined), the rendered options will not
+        * update in response to user actions. Instead, the `value` prop must change in
+        * order for the rendered options to update.
+        *
+        * If `defaultValue` is provided, any options with the supplied values will be
+        * selected.
         */
-       function mapChildren(children, func, context) {
-         if (children == null) {
-           return children;
-         }
-         var result = [];
-         mapIntoWithKeyPrefixInternal(children, result, null, func, context);
-         return result;
-       }
+       var ReactDOMSelect = {
+         getHostProps: function (inst, props) {
+           return _assign({}, DisabledInputUtils.getHostProps(inst, props), {
+             onChange: inst._wrapperState.onChange,
+             value: undefined
+           });
+         },
        
-       function forEachSingleChildDummy(traverseContext, child, name) {
-         return null;
-       }
+         mountWrapper: function (inst, props) {
+           if (process.env.NODE_ENV !== 'production') {
+             checkSelectPropTypes(inst, props);
+           }
        
-       /**
-        * Count the number of children that are typically specified as
-        * `props.children`.
-        *
-        * @param {?*} children Children tree container.
-        * @return {number} The number of children.
-        */
-       function countChildren(children, context) {
-         return traverseAllChildren(children, forEachSingleChildDummy, null);
-       }
+           var value = LinkedValueUtils.getValue(props);
+           inst._wrapperState = {
+             pendingUpdate: false,
+             initialValue: value != null ? value : props.defaultValue,
+             listeners: null,
+             onChange: _handleChange.bind(inst),
+             wasMultiple: Boolean(props.multiple)
+           };
        
-       /**
-        * Flatten a children object (typically specified as `props.children`) and
-        * return an array with appropriately re-keyed children.
-        */
-       function toArray(children) {
-         var result = [];
-         mapIntoWithKeyPrefixInternal(children, result, null, emptyFunction.thatReturnsArgument);
-         return result;
-       }
+           if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValueDefaultValue) {
+             process.env.NODE_ENV !== 'production' ? warning(false, 'Select elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled select ' + 'element and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components') : void 0;
+             didWarnValueDefaultValue = true;
+           }
+         },
        
-       var ReactChildren = {
-         forEach: forEachChildren,
-         map: mapChildren,
-         mapIntoWithKeyPrefixInternal: mapIntoWithKeyPrefixInternal,
-         count: countChildren,
-         toArray: toArray
+         getSelectValueContext: function (inst) {
+           // ReactDOMOption looks at this initial value so the initial generated
+           // markup has correct `selected` attributes
+           return inst._wrapperState.initialValue;
+         },
+       
+         postUpdateWrapper: function (inst) {
+           var props = inst._currentElement.props;
+       
+           // After the initial mount, we control selected-ness manually so don't pass
+           // this value down
+           inst._wrapperState.initialValue = undefined;
+       
+           var wasMultiple = inst._wrapperState.wasMultiple;
+           inst._wrapperState.wasMultiple = Boolean(props.multiple);
+       
+           var value = LinkedValueUtils.getValue(props);
+           if (value != null) {
+             inst._wrapperState.pendingUpdate = false;
+             updateOptions(inst, Boolean(props.multiple), value);
+           } else if (wasMultiple !== Boolean(props.multiple)) {
+             // For simplicity, reapply `defaultValue` if `multiple` is toggled.
+             if (props.defaultValue != null) {
+               updateOptions(inst, Boolean(props.multiple), props.defaultValue);
+             } else {
+               // Revert the select back to its default unselected state.
+               updateOptions(inst, Boolean(props.multiple), props.multiple ? [] : '');
+             }
+           }
+         }
        };
        
-       module.exports = ReactChildren;
+       function _handleChange(event) {
+         var props = this._currentElement.props;
+         var returnValue = LinkedValueUtils.executeOnChange(props, event);
+       
+         if (this._rootNodeID) {
+           this._wrapperState.pendingUpdate = true;
+         }
+         ReactUpdates.asap(updateOptionsIfPendingUpdateAndMounted, this);
+         return returnValue;
+       }
+       
+       module.exports = ReactDOMSelect;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
 
 /***/ },
-/* 113 */
+/* 123 */
 /***/ function(module, exports, __webpack_require__) {
 
        /* WEBPACK VAR INJECTION */(function(process) {/**
-        * Copyright 2013-2015, Facebook, Inc.
+        * Copyright 2013-present, 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.
         *
-        * @providesModule traverseAllChildren
+        * @providesModule ReactDOMTextarea
         */
        
        'use strict';
        
-       var ReactCurrentOwner = __webpack_require__(7);
-       var ReactElement = __webpack_require__(44);
-       var ReactInstanceHandles = __webpack_require__(47);
-       
-       var getIteratorFn = __webpack_require__(110);
-       var invariant = __webpack_require__(15);
-       var warning = __webpack_require__(27);
-       
-       var SEPARATOR = ReactInstanceHandles.SEPARATOR;
-       var SUBSEPARATOR = ':';
-       
-       /**
-        * TODO: Test that a single child and an array with one item have the same key
-        * pattern.
-        */
-       
-       var userProvidedKeyEscaperLookup = {
-         '=': '=0',
-         '.': '=1',
-         ':': '=2'
-       };
+       var _prodInvariant = __webpack_require__(9),
+           _assign = __webpack_require__(6);
        
-       var userProvidedKeyEscapeRegex = /[=.:]/g;
+       var DisabledInputUtils = __webpack_require__(118);
+       var LinkedValueUtils = __webpack_require__(120);
+       var ReactDOMComponentTree = __webpack_require__(39);
+       var ReactUpdates = __webpack_require__(59);
        
-       var didWarnAboutMaps = false;
+       var invariant = __webpack_require__(10);
+       var warning = __webpack_require__(13);
        
-       function userProvidedKeyEscaper(match) {
-         return userProvidedKeyEscaperLookup[match];
-       }
+       var didWarnValueLink = false;
+       var didWarnValDefaultVal = false;
        
-       /**
-        * Generate a key string that identifies a component within a set.
-        *
-        * @param {*} component A component that could contain a manual key.
-        * @param {number} index Index that is used if a manual key is not provided.
-        * @return {string}
-        */
-       function getComponentKey(component, index) {
-         if (component && component.key != null) {
-           // Explicit key
-           return wrapUserProvidedKey(component.key);
+       function forceUpdateIfMounted() {
+         if (this._rootNodeID) {
+           // DOM component is still mounted; update
+           ReactDOMTextarea.updateWrapper(this);
          }
-         // Implicit key determined by the index in the set
-         return index.toString(36);
        }
        
        /**
-        * Escape a component key so that it is safe to use in a reactid.
+        * Implements a <textarea> host component that allows setting `value`, and
+        * `defaultValue`. This differs from the traditional DOM API because value is
+        * usually set as PCDATA children.
         *
-        * @param {*} text Component key to be escaped.
-        * @return {string} An escaped string.
-        */
-       function escapeUserProvidedKey(text) {
-         return ('' + text).replace(userProvidedKeyEscapeRegex, userProvidedKeyEscaper);
-       }
-       
-       /**
-        * Wrap a `key` value explicitly provided by the user to distinguish it from
-        * implicitly-generated keys generated by a component's index in its parent.
+        * If `value` is not supplied (or null/undefined), user actions that affect the
+        * value will trigger updates to the element.
         *
-        * @param {string} key Value of a user-provided `key` attribute
-        * @return {string}
+        * If `value` is supplied (and not null/undefined), the rendered element will
+        * not trigger updates to the element. Instead, the `value` prop must change in
+        * order for the rendered element to be updated.
+        *
+        * The rendered element will be initialized with an empty value, the prop
+        * `defaultValue` if specified, or the children content (deprecated).
         */
-       function wrapUserProvidedKey(key) {
-         return '$' + escapeUserProvidedKey(key);
-       }
+       var ReactDOMTextarea = {
+         getHostProps: function (inst, props) {
+           !(props.dangerouslySetInnerHTML == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, '`dangerouslySetInnerHTML` does not make sense on <textarea>.') : _prodInvariant('91') : void 0;
        
-       /**
-        * @param {?*} children Children tree container.
-        * @param {!string} nameSoFar Name of the key path so far.
-        * @param {!function} callback Callback to invoke with each child found.
-        * @param {?*} traverseContext Used to pass information throughout the traversal
-        * process.
-        * @return {!number} The number of children in this subtree.
-        */
-       function traverseAllChildrenImpl(children, nameSoFar, callback, traverseContext) {
-         var type = typeof children;
+           // Always set children to the same thing. In IE9, the selection range will
+           // get reset if `textContent` is mutated.  We could add a check in setTextContent
+           // to only set the value if/when the value differs from the node value (which would
+           // completely solve this IE9 bug), but Sebastian+Ben seemed to like this solution.
+           // The value can be a boolean or object so that's why it's forced to be a string.
+           var hostProps = _assign({}, DisabledInputUtils.getHostProps(inst, props), {
+             value: undefined,
+             defaultValue: undefined,
+             children: '' + inst._wrapperState.initialValue,
+             onChange: inst._wrapperState.onChange
+           });
        
-         if (type === 'undefined' || type === 'boolean') {
-           // All of the above are perceived as null.
-           children = null;
-         }
+           return hostProps;
+         },
        
-         if (children === null || type === 'string' || type === 'number' || ReactElement.isValidElement(children)) {
-           callback(traverseContext, children,
-           // If it's the only child, treat the name as if it was wrapped in an array
-           // so that it's consistent if the number of children grows.
-           nameSoFar === '' ? SEPARATOR + getComponentKey(children, 0) : nameSoFar);
-           return 1;
-         }
+         mountWrapper: function (inst, props) {
+           if (process.env.NODE_ENV !== 'production') {
+             LinkedValueUtils.checkPropTypes('textarea', props, inst._currentElement._owner);
+             if (props.valueLink !== undefined && !didWarnValueLink) {
+               process.env.NODE_ENV !== 'production' ? warning(false, '`valueLink` prop on `textarea` is deprecated; set `value` and `onChange` instead.') : void 0;
+               didWarnValueLink = true;
+             }
+             if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValDefaultVal) {
+               process.env.NODE_ENV !== 'production' ? warning(false, 'Textarea elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled textarea ' + 'and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components') : void 0;
+               didWarnValDefaultVal = true;
+             }
+           }
        
-         var child;
-         var nextName;
-         var subtreeCount = 0; // Count of children found in the current subtree.
-         var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR;
+           var value = LinkedValueUtils.getValue(props);
+           var initialValue = value;
        
-         if (Array.isArray(children)) {
-           for (var i = 0; i < children.length; i++) {
-             child = children[i];
-             nextName = nextNamePrefix + getComponentKey(child, i);
-             subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);
-           }
-         } else {
-           var iteratorFn = getIteratorFn(children);
-           if (iteratorFn) {
-             var iterator = iteratorFn.call(children);
-             var step;
-             if (iteratorFn !== children.entries) {
-               var ii = 0;
-               while (!(step = iterator.next()).done) {
-                 child = step.value;
-                 nextName = nextNamePrefix + getComponentKey(child, ii++);
-                 subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);
-               }
-             } else {
+           // Only bother fetching default value if we're going to use it
+           if (value == null) {
+             var defaultValue = props.defaultValue;
+             // TODO (yungsters): Remove support for children content in <textarea>.
+             var children = props.children;
+             if (children != null) {
                if (process.env.NODE_ENV !== 'production') {
-                 process.env.NODE_ENV !== 'production' ? warning(didWarnAboutMaps, 'Using Maps as children is not yet fully supported. It is an ' + 'experimental feature that might be removed. Convert it to a ' + 'sequence / iterable of keyed ReactElements instead.') : undefined;
-                 didWarnAboutMaps = true;
+                 process.env.NODE_ENV !== 'production' ? warning(false, 'Use the `defaultValue` or `value` props instead of setting ' + 'children on <textarea>.') : void 0;
                }
-               // Iterator will provide entry [k,v] tuples rather than values.
-               while (!(step = iterator.next()).done) {
-                 var entry = step.value;
-                 if (entry) {
-                   child = entry[1];
-                   nextName = nextNamePrefix + wrapUserProvidedKey(entry[0]) + SUBSEPARATOR + getComponentKey(child, 0);
-                   subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);
-                 }
+               !(defaultValue == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'If you supply `defaultValue` on a <textarea>, do not pass children.') : _prodInvariant('92') : void 0;
+               if (Array.isArray(children)) {
+                 !(children.length <= 1) ? process.env.NODE_ENV !== 'production' ? invariant(false, '<textarea> can only have at most one child.') : _prodInvariant('93') : void 0;
+                 children = children[0];
                }
+       
+               defaultValue = '' + children;
              }
-           } else if (type === 'object') {
-             var addendum = '';
-             if (process.env.NODE_ENV !== 'production') {
-               addendum = ' If you meant to render a collection of children, use an array ' + 'instead or wrap the object using createFragment(object) from the ' + 'React add-ons.';
-               if (children._isReactElement) {
-                 addendum = ' It looks like you\'re using an element created by a different ' + 'version of React. Make sure to use only one copy of React.';
-               }
-               if (ReactCurrentOwner.current) {
-                 var name = ReactCurrentOwner.current.getName();
-                 if (name) {
-                   addendum += ' Check the render method of `' + name + '`.';
-                 }
-               }
+             if (defaultValue == null) {
+               defaultValue = '';
              }
-             var childrenString = String(children);
-              true ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Objects are not valid as a React child (found: %s).%s', childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString, addendum) : invariant(false) : undefined;
+             initialValue = defaultValue;
            }
-         }
        
-         return subtreeCount;
-       }
+           inst._wrapperState = {
+             initialValue: '' + initialValue,
+             listeners: null,
+             onChange: _handleChange.bind(inst)
+           };
+         },
        
-       /**
-        * Traverses children that are typically specified as `props.children`, but
-        * might also be specified through attributes:
-        *
-        * - `traverseAllChildren(this.props.children, ...)`
-        * - `traverseAllChildren(this.props.leftPanelChildren, ...)`
-        *
-        * The `traverseContext` is an optional argument that is passed through the
-        * entire traversal. It can be used to store accumulations or anything else that
-        * the callback might find relevant.
-        *
-        * @param {?*} children Children tree object.
-        * @param {!function} callback To invoke upon traversing each child.
-        * @param {?*} traverseContext Context for traversal.
-        * @return {!number} The number of children in this subtree.
-        */
-       function traverseAllChildren(children, callback, traverseContext) {
-         if (children == null) {
-           return 0;
+         updateWrapper: function (inst) {
+           var props = inst._currentElement.props;
+       
+           var node = ReactDOMComponentTree.getNodeFromInstance(inst);
+           var value = LinkedValueUtils.getValue(props);
+           if (value != null) {
+             // Cast `value` to a string to ensure the value is set correctly. While
+             // browsers typically do this as necessary, jsdom doesn't.
+             var newValue = '' + value;
+       
+             // To avoid side effects (such as losing text selection), only set value if changed
+             if (newValue !== node.value) {
+               node.value = newValue;
+             }
+             if (props.defaultValue == null) {
+               node.defaultValue = newValue;
+             }
+           }
+           if (props.defaultValue != null) {
+             node.defaultValue = props.defaultValue;
+           }
+         },
+       
+         postMountWrapper: function (inst) {
+           // This is in postMount because we need access to the DOM node, which is not
+           // available until after the component has mounted.
+           var node = ReactDOMComponentTree.getNodeFromInstance(inst);
+       
+           // Warning: node.value may be the empty string at this point (IE11) if placeholder is set.
+           node.value = node.textContent; // Detach value from defaultValue
          }
+       };
        
-         return traverseAllChildrenImpl(children, '', callback, traverseContext);
+       function _handleChange(event) {
+         var props = this._currentElement.props;
+         var returnValue = LinkedValueUtils.executeOnChange(props, event);
+         ReactUpdates.asap(forceUpdateIfMounted, this);
+         return returnValue;
        }
        
-       module.exports = traverseAllChildren;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
+       module.exports = ReactDOMTextarea;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
 
 /***/ },
-/* 114 */
+/* 124 */
 /***/ function(module, exports, __webpack_require__) {
 
        /* WEBPACK VAR INJECTION */(function(process) {/**
-        * Copyright 2013-2015, Facebook, Inc.
+        * Copyright 2013-present, 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.
         *
-        * @providesModule ReactDOMSelect
+        * @providesModule ReactMultiChild
         */
        
        'use strict';
        
-       var LinkedValueUtils = __webpack_require__(108);
-       var ReactMount = __webpack_require__(30);
-       var ReactUpdates = __webpack_require__(56);
-       
-       var assign = __webpack_require__(41);
-       var warning = __webpack_require__(27);
+       var _prodInvariant = __webpack_require__(9);
        
-       var valueContextKey = '__ReactDOMSelect_value$' + Math.random().toString(36).slice(2);
+       var ReactComponentEnvironment = __webpack_require__(125);
+       var ReactInstanceMap = __webpack_require__(126);
+       var ReactInstrumentation = __webpack_require__(65);
+       var ReactMultiChildUpdateTypes = __webpack_require__(95);
        
-       function updateOptionsIfPendingUpdateAndMounted() {
-         if (this._rootNodeID && this._wrapperState.pendingUpdate) {
-           this._wrapperState.pendingUpdate = false;
+       var ReactCurrentOwner = __webpack_require__(12);
+       var ReactReconciler = __webpack_require__(62);
+       var ReactChildReconciler = __webpack_require__(127);
        
-           var props = this._currentElement.props;
-           var value = LinkedValueUtils.getValue(props);
+       var emptyFunction = __webpack_require__(14);
+       var flattenChildren = __webpack_require__(135);
+       var invariant = __webpack_require__(10);
        
-           if (value != null) {
-             updateOptions(this, props, value);
-           }
-         }
+       /**
+        * Make an update for markup to be rendered and inserted at a supplied index.
+        *
+        * @param {string} markup Markup that renders into an element.
+        * @param {number} toIndex Destination index.
+        * @private
+        */
+       function makeInsertMarkup(markup, afterNode, toIndex) {
+         // NOTE: Null values reduce hidden classes.
+         return {
+           type: ReactMultiChildUpdateTypes.INSERT_MARKUP,
+           content: markup,
+           fromIndex: null,
+           fromNode: null,
+           toIndex: toIndex,
+           afterNode: afterNode
+         };
        }
        
-       function getDeclarationErrorAddendum(owner) {
-         if (owner) {
-           var name = owner.getName();
-           if (name) {
-             return ' Check the render method of `' + name + '`.';
-           }
-         }
-         return '';
+       /**
+        * Make an update for moving an existing element to another index.
+        *
+        * @param {number} fromIndex Source index of the existing element.
+        * @param {number} toIndex Destination index of the element.
+        * @private
+        */
+       function makeMove(child, afterNode, toIndex) {
+         // NOTE: Null values reduce hidden classes.
+         return {
+           type: ReactMultiChildUpdateTypes.MOVE_EXISTING,
+           content: null,
+           fromIndex: child._mountIndex,
+           fromNode: ReactReconciler.getHostNode(child),
+           toIndex: toIndex,
+           afterNode: afterNode
+         };
        }
        
-       var valuePropNames = ['value', 'defaultValue'];
-       
        /**
-        * Validation function for `value` and `defaultValue`.
+        * Make an update for removing an element at an index.
+        *
+        * @param {number} fromIndex Index of the element to remove.
         * @private
         */
-       function checkSelectPropTypes(inst, props) {
-         var owner = inst._currentElement._owner;
-         LinkedValueUtils.checkPropTypes('select', props, owner);
-       
-         for (var i = 0; i < valuePropNames.length; i++) {
-           var propName = valuePropNames[i];
-           if (props[propName] == null) {
-             continue;
-           }
-           if (props.multiple) {
-             process.env.NODE_ENV !== 'production' ? warning(Array.isArray(props[propName]), 'The `%s` prop supplied to <select> must be an array if ' + '`multiple` is true.%s', propName, getDeclarationErrorAddendum(owner)) : undefined;
-           } else {
-             process.env.NODE_ENV !== 'production' ? warning(!Array.isArray(props[propName]), 'The `%s` prop supplied to <select> must be a scalar ' + 'value if `multiple` is false.%s', propName, getDeclarationErrorAddendum(owner)) : undefined;
-           }
-         }
+       function makeRemove(child, node) {
+         // NOTE: Null values reduce hidden classes.
+         return {
+           type: ReactMultiChildUpdateTypes.REMOVE_NODE,
+           content: null,
+           fromIndex: child._mountIndex,
+           fromNode: node,
+           toIndex: null,
+           afterNode: null
+         };
        }
        
        /**
-        * @param {ReactDOMComponent} inst
-        * @param {boolean} multiple
-        * @param {*} propValue A stringable (with `multiple`, a list of stringables).
+        * Make an update for setting the markup of a node.
+        *
+        * @param {string} markup Markup that renders into an element.
         * @private
         */
-       function updateOptions(inst, multiple, propValue) {
-         var selectedValue, i;
-         var options = ReactMount.getNode(inst._rootNodeID).options;
-       
-         if (multiple) {
-           selectedValue = {};
-           for (i = 0; i < propValue.length; i++) {
-             selectedValue['' + propValue[i]] = true;
-           }
-           for (i = 0; i < options.length; i++) {
-             var selected = selectedValue.hasOwnProperty(options[i].value);
-             if (options[i].selected !== selected) {
-               options[i].selected = selected;
-             }
-           }
-         } else {
-           // Do not set `select.value` as exact behavior isn't consistent across all
-           // browsers for all cases.
-           selectedValue = '' + propValue;
-           for (i = 0; i < options.length; i++) {
-             if (options[i].value === selectedValue) {
-               options[i].selected = true;
-               return;
-             }
-           }
-           if (options.length) {
-             options[0].selected = true;
-           }
-         }
+       function makeSetMarkup(markup) {
+         // NOTE: Null values reduce hidden classes.
+         return {
+           type: ReactMultiChildUpdateTypes.SET_MARKUP,
+           content: markup,
+           fromIndex: null,
+           fromNode: null,
+           toIndex: null,
+           afterNode: null
+         };
        }
        
        /**
-        * Implements a <select> native component that allows optionally setting the
-        * props `value` and `defaultValue`. If `multiple` is false, the prop must be a
-        * stringable. If `multiple` is true, the prop must be an array of stringables.
-        *
-        * If `value` is not supplied (or null/undefined), user actions that change the
-        * selected option will trigger updates to the rendered options.
-        *
-        * If it is supplied (and not null/undefined), the rendered options will not
-        * update in response to user actions. Instead, the `value` prop must change in
-        * order for the rendered options to update.
+        * Make an update for setting the text content.
         *
-        * If `defaultValue` is provided, any options with the supplied values will be
-        * selected.
+        * @param {string} textContent Text content to set.
+        * @private
         */
-       var ReactDOMSelect = {
-         valueContextKey: valueContextKey,
-       
-         getNativeProps: function (inst, props, context) {
-           return assign({}, props, {
-             onChange: inst._wrapperState.onChange,
-             value: undefined
-           });
-         },
-       
-         mountWrapper: function (inst, props) {
-           if (process.env.NODE_ENV !== 'production') {
-             checkSelectPropTypes(inst, props);
-           }
-       
-           var value = LinkedValueUtils.getValue(props);
-           inst._wrapperState = {
-             pendingUpdate: false,
-             initialValue: value != null ? value : props.defaultValue,
-             onChange: _handleChange.bind(inst),
-             wasMultiple: Boolean(props.multiple)
-           };
-         },
-       
-         processChildContext: function (inst, props, context) {
-           // Pass down initial value so initial generated markup has correct
-           // `selected` attributes
-           var childContext = assign({}, context);
-           childContext[valueContextKey] = inst._wrapperState.initialValue;
-           return childContext;
-         },
-       
-         postUpdateWrapper: function (inst) {
-           var props = inst._currentElement.props;
-       
-           // After the initial mount, we control selected-ness manually so don't pass
-           // the context value down
-           inst._wrapperState.initialValue = undefined;
-       
-           var wasMultiple = inst._wrapperState.wasMultiple;
-           inst._wrapperState.wasMultiple = Boolean(props.multiple);
-       
-           var value = LinkedValueUtils.getValue(props);
-           if (value != null) {
-             inst._wrapperState.pendingUpdate = false;
-             updateOptions(inst, Boolean(props.multiple), value);
-           } else if (wasMultiple !== Boolean(props.multiple)) {
-             // For simplicity, reapply `defaultValue` if `multiple` is toggled.
-             if (props.defaultValue != null) {
-               updateOptions(inst, Boolean(props.multiple), props.defaultValue);
-             } else {
-               // Revert the select back to its default unselected state.
-               updateOptions(inst, Boolean(props.multiple), props.multiple ? [] : '');
-             }
-           }
-         }
-       };
-       
-       function _handleChange(event) {
-         var props = this._currentElement.props;
-         var returnValue = LinkedValueUtils.executeOnChange(props, event);
-       
-         this._wrapperState.pendingUpdate = true;
-         ReactUpdates.asap(updateOptionsIfPendingUpdateAndMounted, this);
-         return returnValue;
+       function makeTextContent(textContent) {
+         // NOTE: Null values reduce hidden classes.
+         return {
+           type: ReactMultiChildUpdateTypes.TEXT_CONTENT,
+           content: textContent,
+           fromIndex: null,
+           fromNode: null,
+           toIndex: null,
+           afterNode: null
+         };
        }
        
-       module.exports = ReactDOMSelect;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
-
-/***/ },
-/* 115 */
-/***/ function(module, exports, __webpack_require__) {
-
-       /* WEBPACK VAR INJECTION */(function(process) {/**
-        * 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.
-        *
-        * @providesModule ReactDOMTextarea
+       /**
+        * Push an update, if any, onto the queue. Creates a new queue if none is
+        * passed and always returns the queue. Mutative.
         */
-       
-       'use strict';
-       
-       var LinkedValueUtils = __webpack_require__(108);
-       var ReactDOMIDOperations = __webpack_require__(29);
-       var ReactUpdates = __webpack_require__(56);
-       
-       var assign = __webpack_require__(41);
-       var invariant = __webpack_require__(15);
-       var warning = __webpack_require__(27);
-       
-       function forceUpdateIfMounted() {
-         if (this._rootNodeID) {
-           // DOM component is still mounted; update
-           ReactDOMTextarea.updateWrapper(this);
+       function enqueue(queue, update) {
+         if (update) {
+           queue = queue || [];
+           queue.push(update);
          }
+         return queue;
        }
        
        /**
-        * Implements a <textarea> native component that allows setting `value`, and
-        * `defaultValue`. This differs from the traditional DOM API because value is
-        * usually set as PCDATA children.
-        *
-        * If `value` is not supplied (or null/undefined), user actions that affect the
-        * value will trigger updates to the element.
-        *
-        * If `value` is supplied (and not null/undefined), the rendered element will
-        * not trigger updates to the element. Instead, the `value` prop must change in
-        * order for the rendered element to be updated.
+        * Processes any enqueued updates.
         *
-        * The rendered element will be initialized with an empty value, the prop
-        * `defaultValue` if specified, or the children content (deprecated).
+        * @private
         */
-       var ReactDOMTextarea = {
-         getNativeProps: function (inst, props, context) {
-           !(props.dangerouslySetInnerHTML == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, '`dangerouslySetInnerHTML` does not make sense on <textarea>.') : invariant(false) : undefined;
-       
-           // Always set children to the same thing. In IE9, the selection range will
-           // get reset if `textContent` is mutated.
-           var nativeProps = assign({}, props, {
-             defaultValue: undefined,
-             value: undefined,
-             children: inst._wrapperState.initialValue,
-             onChange: inst._wrapperState.onChange
-           });
-       
-           return nativeProps;
-         },
-       
-         mountWrapper: function (inst, props) {
-           if (process.env.NODE_ENV !== 'production') {
-             LinkedValueUtils.checkPropTypes('textarea', props, inst._currentElement._owner);
-           }
+       function processQueue(inst, updateQueue) {
+         ReactComponentEnvironment.processChildrenUpdates(inst, updateQueue);
+       }
        
-           var defaultValue = props.defaultValue;
-           // TODO (yungsters): Remove support for children content in <textarea>.
-           var children = props.children;
-           if (children != null) {
-             if (process.env.NODE_ENV !== 'production') {
-               process.env.NODE_ENV !== 'production' ? warning(false, 'Use the `defaultValue` or `value` props instead of setting ' + 'children on <textarea>.') : undefined;
-             }
-             !(defaultValue == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'If you supply `defaultValue` on a <textarea>, do not pass children.') : invariant(false) : undefined;
-             if (Array.isArray(children)) {
-               !(children.length <= 1) ? process.env.NODE_ENV !== 'production' ? invariant(false, '<textarea> can only have at most one child.') : invariant(false) : undefined;
-               children = children[0];
+       var setParentForInstrumentation = emptyFunction;
+       var setChildrenForInstrumentation = emptyFunction;
+       if (process.env.NODE_ENV !== 'production') {
+         var getDebugID = function (inst) {
+           if (!inst._debugID) {
+             // Check for ART-like instances. TODO: This is silly/gross.
+             var internal;
+             if (internal = ReactInstanceMap.get(inst)) {
+               inst = internal;
              }
-       
-             defaultValue = '' + children;
            }
-           if (defaultValue == null) {
-             defaultValue = '';
+           return inst._debugID;
+         };
+         setParentForInstrumentation = function (child) {
+           if (child._debugID !== 0) {
+             ReactInstrumentation.debugTool.onSetParent(child._debugID, getDebugID(this));
            }
-           var value = LinkedValueUtils.getValue(props);
-       
-           inst._wrapperState = {
-             // We save the initial value so that `ReactDOMComponent` doesn't update
-             // `textContent` (unnecessary since we update value).
-             // The initial value can be a boolean or object so that's why it's
-             // forced to be a string.
-             initialValue: '' + (value != null ? value : defaultValue),
-             onChange: _handleChange.bind(inst)
-           };
-         },
-       
-         updateWrapper: function (inst) {
-           var props = inst._currentElement.props;
-           var value = LinkedValueUtils.getValue(props);
-           if (value != null) {
-             // Cast `value` to a string to ensure the value is set correctly. While
-             // browsers typically do this as necessary, jsdom doesn't.
-             ReactDOMIDOperations.updatePropertyByID(inst._rootNodeID, 'value', '' + value);
+         };
+         setChildrenForInstrumentation = function (children) {
+           var debugID = getDebugID(this);
+           // TODO: React Native empty components are also multichild.
+           // This means they still get into this method but don't have _debugID.
+           if (debugID !== 0) {
+             ReactInstrumentation.debugTool.onSetChildren(debugID, children ? Object.keys(children).map(function (key) {
+               return children[key]._debugID;
+             }) : []);
            }
-         }
-       };
-       
-       function _handleChange(event) {
-         var props = this._currentElement.props;
-         var returnValue = LinkedValueUtils.executeOnChange(props, event);
-         ReactUpdates.asap(forceUpdateIfMounted, this);
-         return returnValue;
+         };
        }
        
-       module.exports = ReactDOMTextarea;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
-
-/***/ },
-/* 116 */
-/***/ function(module, exports, __webpack_require__) {
-
-       /* WEBPACK VAR INJECTION */(function(process) {/**
-        * 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.
+       /**
+        * ReactMultiChild are capable of reconciling multiple children.
         *
-        * @providesModule ReactMultiChild
-        * @typechecks static-only
+        * @class ReactMultiChild
+        * @internal
         */
+       var ReactMultiChild = {
        
-       'use strict';
-       
-       var ReactComponentEnvironment = __webpack_require__(66);
-       var ReactMultiChildUpdateTypes = __webpack_require__(18);
+         /**
+          * Provides common functionality for components that must reconcile multiple
+          * children. This is used by `ReactDOMComponent` to mount, update, and
+          * unmount child components.
+          *
+          * @lends {ReactMultiChild.prototype}
+          */
+         Mixin: {
        
-       var ReactCurrentOwner = __webpack_require__(7);
-       var ReactReconciler = __webpack_require__(52);
-       var ReactChildReconciler = __webpack_require__(117);
+           _reconcilerInstantiateChildren: function (nestedChildren, transaction, context) {
+             if (process.env.NODE_ENV !== 'production') {
+               if (this._currentElement) {
+                 try {
+                   ReactCurrentOwner.current = this._currentElement._owner;
+                   return ReactChildReconciler.instantiateChildren(nestedChildren, transaction, context, this._debugID);
+                 } finally {
+                   ReactCurrentOwner.current = null;
+                 }
+               }
+             }
+             return ReactChildReconciler.instantiateChildren(nestedChildren, transaction, context);
+           },
        
-       var flattenChildren = __webpack_require__(118);
+           _reconcilerUpdateChildren: function (prevChildren, nextNestedChildrenElements, mountImages, removedNodes, transaction, context) {
+             var nextChildren;
+             if (process.env.NODE_ENV !== 'production') {
+               if (this._currentElement) {
+                 try {
+                   ReactCurrentOwner.current = this._currentElement._owner;
+                   nextChildren = flattenChildren(nextNestedChildrenElements, this._debugID);
+                 } finally {
+                   ReactCurrentOwner.current = null;
+                 }
+                 ReactChildReconciler.updateChildren(prevChildren, nextChildren, mountImages, removedNodes, transaction, this, this._hostContainerInfo, context);
+                 return nextChildren;
+               }
+             }
+             nextChildren = flattenChildren(nextNestedChildrenElements);
+             ReactChildReconciler.updateChildren(prevChildren, nextChildren, mountImages, removedNodes, transaction, this, this._hostContainerInfo, context);
+             return nextChildren;
+           },
        
-       /**
-        * Updating children of a component may trigger recursive updates. The depth is
-        * used to batch recursive updates to render markup more efficiently.
-        *
-        * @type {number}
-        * @private
-        */
-       var updateDepth = 0;
+           /**
+            * Generates a "mount image" for each of the supplied children. In the case
+            * of `ReactDOMComponent`, a mount image is a string of markup.
+            *
+            * @param {?object} nestedChildren Nested child maps.
+            * @return {array} An array of mounted representations.
+            * @internal
+            */
+           mountChildren: function (nestedChildren, transaction, context) {
+             var children = this._reconcilerInstantiateChildren(nestedChildren, transaction, context);
+             this._renderedChildren = children;
        
-       /**
-        * Queue of update configuration objects.
-        *
-        * Each object has a `type` property that is in `ReactMultiChildUpdateTypes`.
-        *
-        * @type {array<object>}
-        * @private
-        */
-       var updateQueue = [];
-       
-       /**
-        * Queue of markup to be rendered.
-        *
-        * @type {array<string>}
-        * @private
-        */
-       var markupQueue = [];
-       
-       /**
-        * Enqueues markup to be rendered and inserted at a supplied index.
-        *
-        * @param {string} parentID ID of the parent component.
-        * @param {string} markup Markup that renders into an element.
-        * @param {number} toIndex Destination index.
-        * @private
-        */
-       function enqueueInsertMarkup(parentID, markup, toIndex) {
-         // NOTE: Null values reduce hidden classes.
-         updateQueue.push({
-           parentID: parentID,
-           parentNode: null,
-           type: ReactMultiChildUpdateTypes.INSERT_MARKUP,
-           markupIndex: markupQueue.push(markup) - 1,
-           content: null,
-           fromIndex: null,
-           toIndex: toIndex
-         });
-       }
-       
-       /**
-        * Enqueues moving an existing element to another index.
-        *
-        * @param {string} parentID ID of the parent component.
-        * @param {number} fromIndex Source index of the existing element.
-        * @param {number} toIndex Destination index of the element.
-        * @private
-        */
-       function enqueueMove(parentID, fromIndex, toIndex) {
-         // NOTE: Null values reduce hidden classes.
-         updateQueue.push({
-           parentID: parentID,
-           parentNode: null,
-           type: ReactMultiChildUpdateTypes.MOVE_EXISTING,
-           markupIndex: null,
-           content: null,
-           fromIndex: fromIndex,
-           toIndex: toIndex
-         });
-       }
-       
-       /**
-        * Enqueues removing an element at an index.
-        *
-        * @param {string} parentID ID of the parent component.
-        * @param {number} fromIndex Index of the element to remove.
-        * @private
-        */
-       function enqueueRemove(parentID, fromIndex) {
-         // NOTE: Null values reduce hidden classes.
-         updateQueue.push({
-           parentID: parentID,
-           parentNode: null,
-           type: ReactMultiChildUpdateTypes.REMOVE_NODE,
-           markupIndex: null,
-           content: null,
-           fromIndex: fromIndex,
-           toIndex: null
-         });
-       }
-       
-       /**
-        * Enqueues setting the markup of a node.
-        *
-        * @param {string} parentID ID of the parent component.
-        * @param {string} markup Markup that renders into an element.
-        * @private
-        */
-       function enqueueSetMarkup(parentID, markup) {
-         // NOTE: Null values reduce hidden classes.
-         updateQueue.push({
-           parentID: parentID,
-           parentNode: null,
-           type: ReactMultiChildUpdateTypes.SET_MARKUP,
-           markupIndex: null,
-           content: markup,
-           fromIndex: null,
-           toIndex: null
-         });
-       }
-       
-       /**
-        * Enqueues setting the text content.
-        *
-        * @param {string} parentID ID of the parent component.
-        * @param {string} textContent Text content to set.
-        * @private
-        */
-       function enqueueTextContent(parentID, textContent) {
-         // NOTE: Null values reduce hidden classes.
-         updateQueue.push({
-           parentID: parentID,
-           parentNode: null,
-           type: ReactMultiChildUpdateTypes.TEXT_CONTENT,
-           markupIndex: null,
-           content: textContent,
-           fromIndex: null,
-           toIndex: null
-         });
-       }
-       
-       /**
-        * Processes any enqueued updates.
-        *
-        * @private
-        */
-       function processQueue() {
-         if (updateQueue.length) {
-           ReactComponentEnvironment.processChildrenUpdates(updateQueue, markupQueue);
-           clearQueue();
-         }
-       }
-       
-       /**
-        * Clears any enqueued updates.
-        *
-        * @private
-        */
-       function clearQueue() {
-         updateQueue.length = 0;
-         markupQueue.length = 0;
-       }
-       
-       /**
-        * ReactMultiChild are capable of reconciling multiple children.
-        *
-        * @class ReactMultiChild
-        * @internal
-        */
-       var ReactMultiChild = {
-       
-         /**
-          * Provides common functionality for components that must reconcile multiple
-          * children. This is used by `ReactDOMComponent` to mount, update, and
-          * unmount child components.
-          *
-          * @lends {ReactMultiChild.prototype}
-          */
-         Mixin: {
-       
-           _reconcilerInstantiateChildren: function (nestedChildren, transaction, context) {
-             if (process.env.NODE_ENV !== 'production') {
-               if (this._currentElement) {
-                 try {
-                   ReactCurrentOwner.current = this._currentElement._owner;
-                   return ReactChildReconciler.instantiateChildren(nestedChildren, transaction, context);
-                 } finally {
-                   ReactCurrentOwner.current = null;
-                 }
-               }
-             }
-             return ReactChildReconciler.instantiateChildren(nestedChildren, transaction, context);
-           },
-       
-           _reconcilerUpdateChildren: function (prevChildren, nextNestedChildrenElements, transaction, context) {
-             var nextChildren;
-             if (process.env.NODE_ENV !== 'production') {
-               if (this._currentElement) {
-                 try {
-                   ReactCurrentOwner.current = this._currentElement._owner;
-                   nextChildren = flattenChildren(nextNestedChildrenElements);
-                 } finally {
-                   ReactCurrentOwner.current = null;
-                 }
-                 return ReactChildReconciler.updateChildren(prevChildren, nextChildren, transaction, context);
-               }
-             }
-             nextChildren = flattenChildren(nextNestedChildrenElements);
-             return ReactChildReconciler.updateChildren(prevChildren, nextChildren, transaction, context);
-           },
-       
-           /**
-            * Generates a "mount image" for each of the supplied children. In the case
-            * of `ReactDOMComponent`, a mount image is a string of markup.
-            *
-            * @param {?object} nestedChildren Nested child maps.
-            * @return {array} An array of mounted representations.
-            * @internal
-            */
-           mountChildren: function (nestedChildren, transaction, context) {
-             var children = this._reconcilerInstantiateChildren(nestedChildren, transaction, context);
-             this._renderedChildren = children;
              var mountImages = [];
              var index = 0;
              for (var name in children) {
                if (children.hasOwnProperty(name)) {
                  var child = children[name];
-                 // Inlined for performance, see `ReactInstanceHandles.createReactID`.
-                 var rootID = this._rootNodeID + name;
-                 var mountImage = ReactReconciler.mountComponent(child, rootID, transaction, context);
+                 if (process.env.NODE_ENV !== 'production') {
+                   setParentForInstrumentation.call(this, child);
+                 }
+                 var mountImage = ReactReconciler.mountComponent(child, transaction, this, this._hostContainerInfo, context);
                  child._mountIndex = index++;
                  mountImages.push(mountImage);
                }
              }
+       
+             if (process.env.NODE_ENV !== 'production') {
+               setChildrenForInstrumentation.call(this, children);
+             }
+       
              return mountImages;
            },
        
             * @internal
             */
            updateTextContent: function (nextContent) {
-             updateDepth++;
-             var errorThrown = true;
-             try {
-               var prevChildren = this._renderedChildren;
-               // Remove any rendered children.
-               ReactChildReconciler.unmountChildren(prevChildren);
-               // TODO: The setTextContent operation should be enough
-               for (var name in prevChildren) {
-                 if (prevChildren.hasOwnProperty(name)) {
-                   this._unmountChild(prevChildren[name]);
-                 }
-               }
-               // Set new text content.
-               this.setTextContent(nextContent);
-               errorThrown = false;
-             } finally {
-               updateDepth--;
-               if (!updateDepth) {
-                 if (errorThrown) {
-                   clearQueue();
-                 } else {
-                   processQueue();
-                 }
+             var prevChildren = this._renderedChildren;
+             // Remove any rendered children.
+             ReactChildReconciler.unmountChildren(prevChildren, false);
+             for (var name in prevChildren) {
+               if (prevChildren.hasOwnProperty(name)) {
+                  true ? process.env.NODE_ENV !== 'production' ? invariant(false, 'updateTextContent called on non-empty component.') : _prodInvariant('118') : void 0;
                }
              }
+             // Set new text content.
+             var updates = [makeTextContent(nextContent)];
+             processQueue(this, updates);
            },
        
            /**
             * @internal
             */
            updateMarkup: function (nextMarkup) {
-             updateDepth++;
-             var errorThrown = true;
-             try {
-               var prevChildren = this._renderedChildren;
-               // Remove any rendered children.
-               ReactChildReconciler.unmountChildren(prevChildren);
-               for (var name in prevChildren) {
-                 if (prevChildren.hasOwnProperty(name)) {
-                   this._unmountChildByName(prevChildren[name], name);
-                 }
-               }
-               this.setMarkup(nextMarkup);
-               errorThrown = false;
-             } finally {
-               updateDepth--;
-               if (!updateDepth) {
-                 if (errorThrown) {
-                   clearQueue();
-                 } else {
-                   processQueue();
-                 }
+             var prevChildren = this._renderedChildren;
+             // Remove any rendered children.
+             ReactChildReconciler.unmountChildren(prevChildren, false);
+             for (var name in prevChildren) {
+               if (prevChildren.hasOwnProperty(name)) {
+                  true ? process.env.NODE_ENV !== 'production' ? invariant(false, 'updateTextContent called on non-empty component.') : _prodInvariant('118') : void 0;
                }
              }
+             var updates = [makeSetMarkup(nextMarkup)];
+             processQueue(this, updates);
            },
        
            /**
             * @internal
             */
            updateChildren: function (nextNestedChildrenElements, transaction, context) {
-             updateDepth++;
-             var errorThrown = true;
-             try {
-               this._updateChildren(nextNestedChildrenElements, transaction, context);
-               errorThrown = false;
-             } finally {
-               updateDepth--;
-               if (!updateDepth) {
-                 if (errorThrown) {
-                   clearQueue();
-                 } else {
-                   processQueue();
-                 }
-               }
-             }
+             // Hook used by React ART
+             this._updateChildren(nextNestedChildrenElements, transaction, context);
            },
        
            /**
-            * Improve performance by isolating this hot code path from the try/catch
-            * block in `updateChildren`.
-            *
             * @param {?object} nextNestedChildrenElements Nested child element maps.
             * @param {ReactReconcileTransaction} transaction
             * @final
             */
            _updateChildren: function (nextNestedChildrenElements, transaction, context) {
              var prevChildren = this._renderedChildren;
-             var nextChildren = this._reconcilerUpdateChildren(prevChildren, nextNestedChildrenElements, transaction, context);
-             this._renderedChildren = nextChildren;
+             var removedNodes = {};
+             var mountImages = [];
+             var nextChildren = this._reconcilerUpdateChildren(prevChildren, nextNestedChildrenElements, mountImages, removedNodes, transaction, context);
              if (!nextChildren && !prevChildren) {
                return;
              }
+             var updates = null;
              var name;
              // `nextIndex` will increment for each child in `nextChildren`, but
              // `lastIndex` will be the last index visited in `prevChildren`.
-             var lastIndex = 0;
              var nextIndex = 0;
+             var lastIndex = 0;
+             // `nextMountIndex` will increment for each newly mounted child.
+             var nextMountIndex = 0;
+             var lastPlacedNode = null;
              for (name in nextChildren) {
                if (!nextChildren.hasOwnProperty(name)) {
                  continue;
                var prevChild = prevChildren && prevChildren[name];
                var nextChild = nextChildren[name];
                if (prevChild === nextChild) {
-                 this.moveChild(prevChild, nextIndex, lastIndex);
+                 updates = enqueue(updates, this.moveChild(prevChild, lastPlacedNode, nextIndex, lastIndex));
                  lastIndex = Math.max(prevChild._mountIndex, lastIndex);
                  prevChild._mountIndex = nextIndex;
                } else {
                  if (prevChild) {
                    // Update `lastIndex` before `_mountIndex` gets unset by unmounting.
                    lastIndex = Math.max(prevChild._mountIndex, lastIndex);
-                   this._unmountChild(prevChild);
+                   // The `removedNodes` loop below will actually remove the child.
                  }
                  // The child must be instantiated before it's mounted.
-                 this._mountChildByNameAtIndex(nextChild, name, nextIndex, transaction, context);
+                 updates = enqueue(updates, this._mountChildAtIndex(nextChild, mountImages[nextMountIndex], lastPlacedNode, nextIndex, transaction, context));
+                 nextMountIndex++;
                }
                nextIndex++;
+               lastPlacedNode = ReactReconciler.getHostNode(nextChild);
              }
              // Remove children that are no longer present.
-             for (name in prevChildren) {
-               if (prevChildren.hasOwnProperty(name) && !(nextChildren && nextChildren.hasOwnProperty(name))) {
-                 this._unmountChild(prevChildren[name]);
+             for (name in removedNodes) {
+               if (removedNodes.hasOwnProperty(name)) {
+                 updates = enqueue(updates, this._unmountChild(prevChildren[name], removedNodes[name]));
                }
              }
+             if (updates) {
+               processQueue(this, updates);
+             }
+             this._renderedChildren = nextChildren;
+       
+             if (process.env.NODE_ENV !== 'production') {
+               setChildrenForInstrumentation.call(this, nextChildren);
+             }
            },
        
            /**
             * Unmounts all rendered children. This should be used to clean up children
-            * when this component is unmounted.
+            * when this component is unmounted. It does not actually perform any
+            * backend operations.
             *
             * @internal
             */
-           unmountChildren: function () {
+           unmountChildren: function (safely) {
              var renderedChildren = this._renderedChildren;
-             ReactChildReconciler.unmountChildren(renderedChildren);
+             ReactChildReconciler.unmountChildren(renderedChildren, safely);
              this._renderedChildren = null;
            },
        
             * @param {number} lastIndex Last index visited of the siblings of `child`.
             * @protected
             */
-           moveChild: function (child, toIndex, lastIndex) {
+           moveChild: function (child, afterNode, toIndex, lastIndex) {
              // If the index of `child` is less than `lastIndex`, then it needs to
              // be moved. Otherwise, we do not need to move it because a child will be
              // inserted or moved before `child`.
              if (child._mountIndex < lastIndex) {
-               enqueueMove(this._rootNodeID, child._mountIndex, toIndex);
+               return makeMove(child, afterNode, toIndex);
              }
            },
        
             * @param {string} mountImage Markup to insert.
             * @protected
             */
-           createChild: function (child, mountImage) {
-             enqueueInsertMarkup(this._rootNodeID, mountImage, child._mountIndex);
+           createChild: function (child, afterNode, mountImage) {
+             return makeInsertMarkup(mountImage, afterNode, child._mountIndex);
            },
        
            /**
             * @param {ReactComponent} child Child to remove.
             * @protected
             */
-           removeChild: function (child) {
-             enqueueRemove(this._rootNodeID, child._mountIndex);
-           },
-       
-           /**
-            * Sets this text content string.
-            *
-            * @param {string} textContent Text content to set.
-            * @protected
-            */
-           setTextContent: function (textContent) {
-             enqueueTextContent(this._rootNodeID, textContent);
-           },
-       
-           /**
-            * Sets this markup string.
-            *
-            * @param {string} markup Markup to set.
-            * @protected
-            */
-           setMarkup: function (markup) {
-             enqueueSetMarkup(this._rootNodeID, markup);
+           removeChild: function (child, node) {
+             return makeRemove(child, node);
            },
        
            /**
             * @param {ReactReconcileTransaction} transaction
             * @private
             */
-           _mountChildByNameAtIndex: function (child, name, index, transaction, context) {
-             // Inlined for performance, see `ReactInstanceHandles.createReactID`.
-             var rootID = this._rootNodeID + name;
-             var mountImage = ReactReconciler.mountComponent(child, rootID, transaction, context);
+           _mountChildAtIndex: function (child, mountImage, afterNode, index, transaction, context) {
              child._mountIndex = index;
-             this.createChild(child, mountImage);
+             return this.createChild(child, afterNode, mountImage);
            },
        
            /**
             * @param {ReactComponent} child Component to unmount.
             * @private
             */
-           _unmountChild: function (child) {
-             this.removeChild(child);
+           _unmountChild: function (child, node) {
+             var update = this.removeChild(child, node);
              child._mountIndex = null;
+             return update;
            }
        
          }
        };
        
        module.exports = ReactMultiChild;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
 
 /***/ },
-/* 117 */
+/* 125 */
 /***/ function(module, exports, __webpack_require__) {
 
        /* WEBPACK VAR INJECTION */(function(process) {/**
-        * Copyright 2014-2015, Facebook, Inc.
+        * Copyright 2014-present, 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.
         *
-        * @providesModule ReactChildReconciler
-        * @typechecks static-only
+        * @providesModule ReactComponentEnvironment
         */
        
        'use strict';
        
-       var ReactReconciler = __webpack_require__(52);
+       var _prodInvariant = __webpack_require__(9);
        
-       var instantiateReactComponent = __webpack_require__(64);
-       var shouldUpdateReactComponent = __webpack_require__(69);
-       var traverseAllChildren = __webpack_require__(113);
-       var warning = __webpack_require__(27);
+       var invariant = __webpack_require__(10);
        
-       function instantiateChild(childInstances, child, name) {
-         // We found a component instance.
-         var keyUnique = childInstances[name] === undefined;
-         if (process.env.NODE_ENV !== 'production') {
-           process.env.NODE_ENV !== 'production' ? warning(keyUnique, 'flattenChildren(...): Encountered two children with the same key, ' + '`%s`. Child keys must be unique; when two children share a key, only ' + 'the first child will be used.', name) : undefined;
-         }
-         if (child != null && keyUnique) {
-           childInstances[name] = instantiateReactComponent(child, null);
-         }
-       }
+       var injected = false;
+       
+       var ReactComponentEnvironment = {
        
-       /**
-        * ReactChildReconciler provides helpers for initializing or updating a set of
-        * children. Its output is suitable for passing it onto ReactMultiChild which
-        * does diffed reordering and insertion.
-        */
-       var ReactChildReconciler = {
          /**
-          * Generates a "mount image" for each of the supplied children. In the case
-          * of `ReactDOMComponent`, a mount image is a string of markup.
-          *
-          * @param {?object} nestedChildNodes Nested child maps.
-          * @return {?object} A set of child instances.
-          * @internal
+          * Optionally injectable environment dependent cleanup hook. (server vs.
+          * browser etc). Example: A browser system caches DOM nodes based on component
+          * ID and must remove that cache entry when this instance is unmounted.
           */
-         instantiateChildren: function (nestedChildNodes, transaction, context) {
-           if (nestedChildNodes == null) {
-             return null;
-           }
-           var childInstances = {};
-           traverseAllChildren(nestedChildNodes, instantiateChild, childInstances);
-           return childInstances;
-         },
+         unmountIDFromEnvironment: null,
        
          /**
-          * Updates the rendered children and returns a new set of children.
-          *
-          * @param {?object} prevChildren Previously initialized set of children.
-          * @param {?object} nextChildren Flat child element maps.
-          * @param {ReactReconcileTransaction} transaction
-          * @param {object} context
-          * @return {?object} A new set of child instances.
-          * @internal
+          * Optionally injectable hook for swapping out mount images in the middle of
+          * the tree.
           */
-         updateChildren: function (prevChildren, nextChildren, transaction, context) {
-           // We currently don't have a way to track moves here but if we use iterators
-           // instead of for..in we can zip the iterators and check if an item has
-           // moved.
-           // TODO: If nothing has changed, return the prevChildren object so that we
-           // can quickly bailout if nothing has changed.
-           if (!nextChildren && !prevChildren) {
-             return null;
+         replaceNodeWithMarkup: null,
+       
+         /**
+          * Optionally injectable hook for processing a queue of child updates. Will
+          * later move into MultiChildComponents.
+          */
+         processChildrenUpdates: null,
+       
+         injection: {
+           injectEnvironment: function (environment) {
+             !!injected ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactCompositeComponent: injectEnvironment() can only be called once.') : _prodInvariant('104') : void 0;
+             ReactComponentEnvironment.unmountIDFromEnvironment = environment.unmountIDFromEnvironment;
+             ReactComponentEnvironment.replaceNodeWithMarkup = environment.replaceNodeWithMarkup;
+             ReactComponentEnvironment.processChildrenUpdates = environment.processChildrenUpdates;
+             injected = true;
            }
-           var name;
-           for (name in nextChildren) {
-             if (!nextChildren.hasOwnProperty(name)) {
+         }
+       
+       };
+       
+       module.exports = ReactComponentEnvironment;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
+
+/***/ },
+/* 126 */
+/***/ function(module, exports) {
+
+       /**
+        * Copyright 2013-present, 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.
+        *
+        * @providesModule ReactInstanceMap
+        */
+       
+       'use strict';
+       
+       /**
+        * `ReactInstanceMap` maintains a mapping from a public facing stateful
+        * instance (key) and the internal representation (value). This allows public
+        * methods to accept the user facing instance as an argument and map them back
+        * to internal methods.
+        */
+       
+       // TODO: Replace this with ES6: var ReactInstanceMap = new Map();
+       
+       var ReactInstanceMap = {
+       
+         /**
+          * This API should be called `delete` but we'd have to make sure to always
+          * transform these to strings for IE support. When this transform is fully
+          * supported we can rename it.
+          */
+         remove: function (key) {
+           key._reactInternalInstance = undefined;
+         },
+       
+         get: function (key) {
+           return key._reactInternalInstance;
+         },
+       
+         has: function (key) {
+           return key._reactInternalInstance !== undefined;
+         },
+       
+         set: function (key, value) {
+           key._reactInternalInstance = value;
+         }
+       
+       };
+       
+       module.exports = ReactInstanceMap;
+
+/***/ },
+/* 127 */
+/***/ function(module, exports, __webpack_require__) {
+
+       /* WEBPACK VAR INJECTION */(function(process) {/**
+        * Copyright 2014-present, 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.
+        *
+        * @providesModule ReactChildReconciler
+        */
+       
+       'use strict';
+       
+       var ReactReconciler = __webpack_require__(62);
+       
+       var instantiateReactComponent = __webpack_require__(128);
+       var KeyEscapeUtils = __webpack_require__(18);
+       var shouldUpdateReactComponent = __webpack_require__(132);
+       var traverseAllChildren = __webpack_require__(16);
+       var warning = __webpack_require__(13);
+       
+       var ReactComponentTreeDevtool;
+       
+       if (typeof process !== 'undefined' && process.env && process.env.NODE_ENV === 'test') {
+         // Temporary hack.
+         // Inline requires don't work well with Jest:
+         // https://github.com/facebook/react/issues/7240
+         // Remove the inline requires when we don't need them anymore:
+         // https://github.com/facebook/react/pull/7178
+         ReactComponentTreeDevtool = __webpack_require__(31);
+       }
+       
+       function instantiateChild(childInstances, child, name, selfDebugID) {
+         // We found a component instance.
+         var keyUnique = childInstances[name] === undefined;
+         if (process.env.NODE_ENV !== 'production') {
+           if (!ReactComponentTreeDevtool) {
+             ReactComponentTreeDevtool = __webpack_require__(31);
+           }
+           process.env.NODE_ENV !== 'production' ? warning(keyUnique, 'flattenChildren(...): Encountered two children with the same key, ' + '`%s`. Child keys must be unique; when two children share a key, only ' + 'the first child will be used.%s', KeyEscapeUtils.unescape(name), ReactComponentTreeDevtool.getStackAddendumByID(selfDebugID)) : void 0;
+         }
+         if (child != null && keyUnique) {
+           childInstances[name] = instantiateReactComponent(child, true);
+         }
+       }
+       
+       /**
+        * ReactChildReconciler provides helpers for initializing or updating a set of
+        * children. Its output is suitable for passing it onto ReactMultiChild which
+        * does diffed reordering and insertion.
+        */
+       var ReactChildReconciler = {
+         /**
+          * Generates a "mount image" for each of the supplied children. In the case
+          * of `ReactDOMComponent`, a mount image is a string of markup.
+          *
+          * @param {?object} nestedChildNodes Nested child maps.
+          * @return {?object} A set of child instances.
+          * @internal
+          */
+         instantiateChildren: function (nestedChildNodes, transaction, context, selfDebugID // __DEV__ only
+         ) {
+           if (nestedChildNodes == null) {
+             return null;
+           }
+           var childInstances = {};
+       
+           if (process.env.NODE_ENV !== 'production') {
+             traverseAllChildren(nestedChildNodes, function (childInsts, child, name) {
+               return instantiateChild(childInsts, child, name, selfDebugID);
+             }, childInstances);
+           } else {
+             traverseAllChildren(nestedChildNodes, instantiateChild, childInstances);
+           }
+           return childInstances;
+         },
+       
+         /**
+          * Updates the rendered children and returns a new set of children.
+          *
+          * @param {?object} prevChildren Previously initialized set of children.
+          * @param {?object} nextChildren Flat child element maps.
+          * @param {ReactReconcileTransaction} transaction
+          * @param {object} context
+          * @return {?object} A new set of child instances.
+          * @internal
+          */
+         updateChildren: function (prevChildren, nextChildren, mountImages, removedNodes, transaction, hostParent, hostContainerInfo, context) {
+           // We currently don't have a way to track moves here but if we use iterators
+           // instead of for..in we can zip the iterators and check if an item has
+           // moved.
+           // TODO: If nothing has changed, return the prevChildren object so that we
+           // can quickly bailout if nothing has changed.
+           if (!nextChildren && !prevChildren) {
+             return;
+           }
+           var name;
+           var prevChild;
+           for (name in nextChildren) {
+             if (!nextChildren.hasOwnProperty(name)) {
                continue;
              }
-             var prevChild = prevChildren && prevChildren[name];
+             prevChild = prevChildren && prevChildren[name];
              var prevElement = prevChild && prevChild._currentElement;
              var nextElement = nextChildren[name];
              if (prevChild != null && shouldUpdateReactComponent(prevElement, nextElement)) {
                nextChildren[name] = prevChild;
              } else {
                if (prevChild) {
-                 ReactReconciler.unmountComponent(prevChild, name);
+                 removedNodes[name] = ReactReconciler.getHostNode(prevChild);
+                 ReactReconciler.unmountComponent(prevChild, false);
                }
                // The child must be instantiated before it's mounted.
-               var nextChildInstance = instantiateReactComponent(nextElement, null);
+               var nextChildInstance = instantiateReactComponent(nextElement, true);
                nextChildren[name] = nextChildInstance;
+               // Creating mount image now ensures refs are resolved in right order
+               // (see https://github.com/facebook/react/pull/7101 for explanation).
+               var nextChildMountImage = ReactReconciler.mountComponent(nextChildInstance, transaction, hostParent, hostContainerInfo, context);
+               mountImages.push(nextChildMountImage);
              }
            }
            // Unmount children that are no longer present.
            for (name in prevChildren) {
              if (prevChildren.hasOwnProperty(name) && !(nextChildren && nextChildren.hasOwnProperty(name))) {
-               ReactReconciler.unmountComponent(prevChildren[name]);
+               prevChild = prevChildren[name];
+               removedNodes[name] = ReactReconciler.getHostNode(prevChild);
+               ReactReconciler.unmountComponent(prevChild, false);
              }
            }
-           return nextChildren;
          },
        
          /**
           * @param {?object} renderedChildren Previously initialized set of children.
           * @internal
           */
-         unmountChildren: function (renderedChildren) {
+         unmountChildren: function (renderedChildren, safely) {
            for (var name in renderedChildren) {
              if (renderedChildren.hasOwnProperty(name)) {
                var renderedChild = renderedChildren[name];
-               ReactReconciler.unmountComponent(renderedChild);
+               ReactReconciler.unmountComponent(renderedChild, safely);
              }
            }
          }
        };
        
        module.exports = ReactChildReconciler;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
 
 /***/ },
-/* 118 */
+/* 128 */
 /***/ function(module, exports, __webpack_require__) {
 
        /* WEBPACK VAR INJECTION */(function(process) {/**
-        * Copyright 2013-2015, Facebook, Inc.
+        * Copyright 2013-present, 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.
         *
-        * @providesModule flattenChildren
+        * @providesModule instantiateReactComponent
         */
        
        'use strict';
        
-       var traverseAllChildren = __webpack_require__(113);
-       var warning = __webpack_require__(27);
+       var _prodInvariant = __webpack_require__(9),
+           _assign = __webpack_require__(6);
        
-       /**
-        * @param {function} traverseContext Context passed through traversal.
-        * @param {?ReactComponent} child React child component.
-        * @param {!string} name String name of key path to child.
-        */
-       function flattenSingleChildIntoContext(traverseContext, child, name) {
-         // We found a component instance.
-         var result = traverseContext;
-         var keyUnique = result[name] === undefined;
-         if (process.env.NODE_ENV !== 'production') {
-           process.env.NODE_ENV !== 'production' ? warning(keyUnique, 'flattenChildren(...): Encountered two children with the same key, ' + '`%s`. Child keys must be unique; when two children share a key, only ' + 'the first child will be used.', name) : undefined;
+       var ReactCompositeComponent = __webpack_require__(129);
+       var ReactEmptyComponent = __webpack_require__(133);
+       var ReactHostComponent = __webpack_require__(134);
+       var ReactInstrumentation = __webpack_require__(65);
+       
+       var invariant = __webpack_require__(10);
+       var warning = __webpack_require__(13);
+       
+       // To avoid a cyclic dependency, we create the final class in this module
+       var ReactCompositeComponentWrapper = function (element) {
+         this.construct(element);
+       };
+       _assign(ReactCompositeComponentWrapper.prototype, ReactCompositeComponent.Mixin, {
+         _instantiateReactComponent: instantiateReactComponent
+       });
+       
+       function getDeclarationErrorAddendum(owner) {
+         if (owner) {
+           var name = owner.getName();
+           if (name) {
+             return ' Check the render method of `' + name + '`.';
+           }
          }
-         if (keyUnique && child != null) {
-           result[name] = child;
+         return '';
+       }
+       
+       function getDisplayName(instance) {
+         var element = instance._currentElement;
+         if (element == null) {
+           return '#empty';
+         } else if (typeof element === 'string' || typeof element === 'number') {
+           return '#text';
+         } else if (typeof element.type === 'string') {
+           return element.type;
+         } else if (instance.getName) {
+           return instance.getName() || 'Unknown';
+         } else {
+           return element.type.displayName || element.type.name || 'Unknown';
          }
        }
        
        /**
-        * Flattens children that are typically specified as `props.children`. Any null
-        * children will not be included in the resulting object.
-        * @return {!object} flattened children keyed by name.
+        * Check if the type reference is a known internal type. I.e. not a user
+        * provided composite type.
+        *
+        * @param {function} type
+        * @return {boolean} Returns true if this is a valid internal type.
         */
-       function flattenChildren(children) {
-         if (children == null) {
-           return children;
-         }
-         var result = {};
-         traverseAllChildren(children, flattenSingleChildIntoContext, result);
-         return result;
+       function isInternalComponentType(type) {
+         return typeof type === 'function' && typeof type.prototype !== 'undefined' && typeof type.prototype.mountComponent === 'function' && typeof type.prototype.receiveComponent === 'function';
        }
        
-       module.exports = flattenChildren;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
-
-/***/ },
-/* 119 */
-/***/ function(module, exports) {
-
+       var nextDebugID = 1;
+       
        /**
-        * 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.
+        * Given a ReactNode, create an instance that will actually be mounted.
         *
-        * @providesModule shallowEqual
-        * @typechecks
-        * 
+        * @param {ReactNode} node
+        * @param {boolean} shouldHaveDebugID
+        * @return {object} A new instance of the element's constructor.
+        * @protected
         */
+       function instantiateReactComponent(node, shouldHaveDebugID) {
+         var instance;
        
-       'use strict';
+         if (node === null || node === false) {
+           instance = ReactEmptyComponent.create(instantiateReactComponent);
+         } else if (typeof node === 'object') {
+           var element = node;
+           !(element && (typeof element.type === 'function' || typeof element.type === 'string')) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s', element.type == null ? element.type : typeof element.type, getDeclarationErrorAddendum(element._owner)) : _prodInvariant('130', element.type == null ? element.type : typeof element.type, getDeclarationErrorAddendum(element._owner)) : void 0;
        
-       var hasOwnProperty = Object.prototype.hasOwnProperty;
+           // Special case string values
+           if (typeof element.type === 'string') {
+             instance = ReactHostComponent.createInternalComponent(element);
+           } else if (isInternalComponentType(element.type)) {
+             // This is temporarily available for custom components that are not string
+             // representations. I.e. ART. Once those are updated to use the string
+             // representation, we can drop this code path.
+             instance = new element.type(element);
        
-       /**
-        * Performs equality by iterating through keys on an object and returning false
-        * when any key has values which are not strictly equal between the arguments.
-        * Returns true when the values of all keys are strictly equal.
-        */
-       function shallowEqual(objA, objB) {
-         if (objA === objB) {
-           return true;
+             // We renamed this. Allow the old name for compat. :(
+             if (!instance.getHostNode) {
+               instance.getHostNode = instance.getNativeNode;
+             }
+           } else {
+             instance = new ReactCompositeComponentWrapper(element);
+           }
+         } else if (typeof node === 'string' || typeof node === 'number') {
+           instance = ReactHostComponent.createInstanceForText(node);
+         } else {
+            true ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Encountered invalid React node of type %s', typeof node) : _prodInvariant('131', typeof node) : void 0;
          }
        
-         if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {
-           return false;
+         if (process.env.NODE_ENV !== 'production') {
+           process.env.NODE_ENV !== 'production' ? warning(typeof instance.mountComponent === 'function' && typeof instance.receiveComponent === 'function' && typeof instance.getHostNode === 'function' && typeof instance.unmountComponent === 'function', 'Only React Components can be mounted.') : void 0;
          }
        
-         var keysA = Object.keys(objA);
-         var keysB = Object.keys(objB);
+         // These two fields are used by the DOM and ART diffing algorithms
+         // respectively. Instead of using expandos on components, we should be
+         // storing the state needed by the diffing algorithms elsewhere.
+         instance._mountIndex = 0;
+         instance._mountImage = null;
        
-         if (keysA.length !== keysB.length) {
-           return false;
+         if (process.env.NODE_ENV !== 'production') {
+           if (shouldHaveDebugID) {
+             var debugID = nextDebugID++;
+             instance._debugID = debugID;
+             var displayName = getDisplayName(instance);
+             ReactInstrumentation.debugTool.onSetDisplayName(debugID, displayName);
+             var owner = node && node._owner;
+             if (owner) {
+               ReactInstrumentation.debugTool.onSetOwner(debugID, owner._debugID);
+             }
+           } else {
+             instance._debugID = 0;
+           }
          }
        
-         // Test for A's keys different from B.
-         var bHasOwnProperty = hasOwnProperty.bind(objB);
-         for (var i = 0; i < keysA.length; i++) {
-           if (!bHasOwnProperty(keysA[i]) || objA[keysA[i]] !== objB[keysA[i]]) {
-             return false;
+         // Internal instances should fully constructed at this point, so they should
+         // not get any new fields added to them at this point.
+         if (process.env.NODE_ENV !== 'production') {
+           if (Object.preventExtensions) {
+             Object.preventExtensions(instance);
            }
          }
        
-         return true;
+         return instance;
        }
        
-       module.exports = shallowEqual;
+       module.exports = instantiateReactComponent;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
 
 /***/ },
-/* 120 */
+/* 129 */
 /***/ function(module, exports, __webpack_require__) {
 
-       /**
-        * Copyright 2013-2015, Facebook, Inc.
+       /* WEBPACK VAR INJECTION */(function(process) {/**
+        * Copyright 2013-present, 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.
         *
-        * @providesModule ReactEventListener
-        * @typechecks static-only
+        * @providesModule ReactCompositeComponent
         */
        
        'use strict';
        
-       var EventListener = __webpack_require__(121);
-       var ExecutionEnvironment = __webpack_require__(11);
-       var PooledClass = __webpack_require__(58);
-       var ReactInstanceHandles = __webpack_require__(47);
-       var ReactMount = __webpack_require__(30);
-       var ReactUpdates = __webpack_require__(56);
-       
-       var assign = __webpack_require__(41);
-       var getEventTarget = __webpack_require__(83);
-       var getUnboundedScrollPosition = __webpack_require__(122);
-       
-       var DOCUMENT_FRAGMENT_NODE_TYPE = 11;
+       var _prodInvariant = __webpack_require__(9),
+           _assign = __webpack_require__(6);
+       
+       var ReactComponentEnvironment = __webpack_require__(125);
+       var ReactCurrentOwner = __webpack_require__(12);
+       var ReactElement = __webpack_require__(11);
+       var ReactErrorUtils = __webpack_require__(49);
+       var ReactInstanceMap = __webpack_require__(126);
+       var ReactInstrumentation = __webpack_require__(65);
+       var ReactNodeTypes = __webpack_require__(130);
+       var ReactPropTypeLocations = __webpack_require__(24);
+       var ReactReconciler = __webpack_require__(62);
+       
+       var checkReactTypeSpec = __webpack_require__(32);
+       var emptyObject = __webpack_require__(21);
+       var invariant = __webpack_require__(10);
+       var shallowEqual = __webpack_require__(131);
+       var shouldUpdateReactComponent = __webpack_require__(132);
+       var warning = __webpack_require__(13);
+       
+       var CompositeTypes = {
+         ImpureClass: 0,
+         PureClass: 1,
+         StatelessFunctional: 2
+       };
        
-       /**
-        * Finds the parent React component of `node`.
-        *
-        * @param {*} node
-        * @return {?DOMEventTarget} Parent container, or `null` if the specified node
-        *                           is not nested.
-        */
-       function findParent(node) {
-         // TODO: It may be a good idea to cache this to prevent unnecessary DOM
-         // traversal, but caching is difficult to do correctly without using a
-         // mutation observer to listen for all DOM changes.
-         var nodeID = ReactMount.getID(node);
-         var rootID = ReactInstanceHandles.getReactRootIDFromNodeID(nodeID);
-         var container = ReactMount.findReactContainerForID(rootID);
-         var parent = ReactMount.getFirstReactDOM(container);
-         return parent;
-       }
+       function StatelessComponent(Component) {}
+       StatelessComponent.prototype.render = function () {
+         var Component = ReactInstanceMap.get(this)._currentElement.type;
+         var element = Component(this.props, this.context, this.updater);
+         warnIfInvalidElement(Component, element);
+         return element;
+       };
        
-       // Used to store ancestor hierarchy in top level callback
-       function TopLevelCallbackBookKeeping(topLevelType, nativeEvent) {
-         this.topLevelType = topLevelType;
-         this.nativeEvent = nativeEvent;
-         this.ancestors = [];
-       }
-       assign(TopLevelCallbackBookKeeping.prototype, {
-         destructor: function () {
-           this.topLevelType = null;
-           this.nativeEvent = null;
-           this.ancestors.length = 0;
+       function warnIfInvalidElement(Component, element) {
+         if (process.env.NODE_ENV !== 'production') {
+           process.env.NODE_ENV !== 'production' ? warning(element === null || element === false || ReactElement.isValidElement(element), '%s(...): A valid React element (or null) must be returned. You may have ' + 'returned undefined, an array or some other invalid object.', Component.displayName || Component.name || 'Component') : void 0;
+           process.env.NODE_ENV !== 'production' ? warning(!Component.childContextTypes, '%s(...): childContextTypes cannot be defined on a functional component.', Component.displayName || Component.name || 'Component') : void 0;
          }
-       });
-       PooledClass.addPoolingTo(TopLevelCallbackBookKeeping, PooledClass.twoArgumentPooler);
-       
-       function handleTopLevelImpl(bookKeeping) {
-         // TODO: Re-enable event.path handling
-         //
-         // if (bookKeeping.nativeEvent.path && bookKeeping.nativeEvent.path.length > 1) {
-         //   // New browsers have a path attribute on native events
-         //   handleTopLevelWithPath(bookKeeping);
-         // } else {
-         //   // Legacy browsers don't have a path attribute on native events
-         //   handleTopLevelWithoutPath(bookKeeping);
-         // }
-       
-         void handleTopLevelWithPath; // temporarily unused
-         handleTopLevelWithoutPath(bookKeeping);
        }
        
-       // Legacy browsers don't have a path attribute on native events
-       function handleTopLevelWithoutPath(bookKeeping) {
-         var topLevelTarget = ReactMount.getFirstReactDOM(getEventTarget(bookKeeping.nativeEvent)) || window;
-       
-         // Loop through the hierarchy, in case there's any nested components.
-         // It's important that we build the array of ancestors before calling any
-         // event handlers, because event handlers can modify the DOM, leading to
-         // inconsistencies with ReactMount's node cache. See #1105.
-         var ancestor = topLevelTarget;
-         while (ancestor) {
-           bookKeeping.ancestors.push(ancestor);
-           ancestor = findParent(ancestor);
+       function invokeComponentDidMountWithTimer() {
+         var publicInstance = this._instance;
+         if (this._debugID !== 0) {
+           ReactInstrumentation.debugTool.onBeginLifeCycleTimer(this._debugID, 'componentDidMount');
          }
-       
-         for (var i = 0; i < bookKeeping.ancestors.length; i++) {
-           topLevelTarget = bookKeeping.ancestors[i];
-           var topLevelTargetID = ReactMount.getID(topLevelTarget) || '';
-           ReactEventListener._handleTopLevel(bookKeeping.topLevelType, topLevelTarget, topLevelTargetID, bookKeeping.nativeEvent, getEventTarget(bookKeeping.nativeEvent));
+         publicInstance.componentDidMount();
+         if (this._debugID !== 0) {
+           ReactInstrumentation.debugTool.onEndLifeCycleTimer(this._debugID, 'componentDidMount');
          }
        }
        
-       // New browsers have a path attribute on native events
-       function handleTopLevelWithPath(bookKeeping) {
-         var path = bookKeeping.nativeEvent.path;
-         var currentNativeTarget = path[0];
-         var eventsFired = 0;
-         for (var i = 0; i < path.length; i++) {
-           var currentPathElement = path[i];
-           if (currentPathElement.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE) {
-             currentNativeTarget = path[i + 1];
-           }
-           // TODO: slow
-           var reactParent = ReactMount.getFirstReactDOM(currentPathElement);
-           if (reactParent === currentPathElement) {
-             var currentPathElementID = ReactMount.getID(currentPathElement);
-             var newRootID = ReactInstanceHandles.getReactRootIDFromNodeID(currentPathElementID);
-             bookKeeping.ancestors.push(currentPathElement);
-       
-             var topLevelTargetID = ReactMount.getID(currentPathElement) || '';
-             eventsFired++;
-             ReactEventListener._handleTopLevel(bookKeeping.topLevelType, currentPathElement, topLevelTargetID, bookKeeping.nativeEvent, currentNativeTarget);
-       
-             // Jump to the root of this React render tree
-             while (currentPathElementID !== newRootID) {
-               i++;
-               currentPathElement = path[i];
-               currentPathElementID = ReactMount.getID(currentPathElement);
-             }
-           }
+       function invokeComponentDidUpdateWithTimer(prevProps, prevState, prevContext) {
+         var publicInstance = this._instance;
+         if (this._debugID !== 0) {
+           ReactInstrumentation.debugTool.onBeginLifeCycleTimer(this._debugID, 'componentDidUpdate');
          }
-         if (eventsFired === 0) {
-           ReactEventListener._handleTopLevel(bookKeeping.topLevelType, window, '', bookKeeping.nativeEvent, getEventTarget(bookKeeping.nativeEvent));
+         publicInstance.componentDidUpdate(prevProps, prevState, prevContext);
+         if (this._debugID !== 0) {
+           ReactInstrumentation.debugTool.onEndLifeCycleTimer(this._debugID, 'componentDidUpdate');
          }
        }
        
-       function scrollValueMonitor(cb) {
-         var scrollPosition = getUnboundedScrollPosition(window);
-         cb(scrollPosition);
+       function shouldConstruct(Component) {
+         return !!(Component.prototype && Component.prototype.isReactComponent);
        }
        
-       var ReactEventListener = {
-         _enabled: true,
-         _handleTopLevel: null,
-       
-         WINDOW_HANDLE: ExecutionEnvironment.canUseDOM ? window : null,
+       function isPureComponent(Component) {
+         return !!(Component.prototype && Component.prototype.isPureReactComponent);
+       }
        
-         setHandleTopLevel: function (handleTopLevel) {
-           ReactEventListener._handleTopLevel = handleTopLevel;
-         },
+       /**
+        * ------------------ The Life-Cycle of a Composite Component ------------------
+        *
+        * - constructor: Initialization of state. The instance is now retained.
+        *   - componentWillMount
+        *   - render
+        *   - [children's constructors]
+        *     - [children's componentWillMount and render]
+        *     - [children's componentDidMount]
+        *     - componentDidMount
+        *
+        *       Update Phases:
+        *       - componentWillReceiveProps (only called if parent updated)
+        *       - shouldComponentUpdate
+        *         - componentWillUpdate
+        *           - render
+        *           - [children's constructors or receive props phases]
+        *         - componentDidUpdate
+        *
+        *     - componentWillUnmount
+        *     - [children's componentWillUnmount]
+        *   - [children destroyed]
+        * - (destroyed): The instance is now blank, released by React and ready for GC.
+        *
+        * -----------------------------------------------------------------------------
+        */
        
-         setEnabled: function (enabled) {
-           ReactEventListener._enabled = !!enabled;
-         },
+       /**
+        * An incrementing ID assigned to each component when it is mounted. This is
+        * used to enforce the order in which `ReactUpdates` updates dirty components.
+        *
+        * @private
+        */
+       var nextMountID = 1;
        
-         isEnabled: function () {
-           return ReactEventListener._enabled;
-         },
+       /**
+        * @lends {ReactCompositeComponent.prototype}
+        */
+       var ReactCompositeComponentMixin = {
        
          /**
-          * Traps top-level events by using event bubbling.
+          * Base constructor for all composite component.
           *
-          * @param {string} topLevelType Record from `EventConstants`.
-          * @param {string} handlerBaseName Event name (e.g. "click").
-          * @param {object} handle Element on which to attach listener.
-          * @return {?object} An object with a remove function which will forcefully
-          *                  remove the listener.
+          * @param {ReactElement} element
+          * @final
           * @internal
           */
-         trapBubbledEvent: function (topLevelType, handlerBaseName, handle) {
-           var element = handle;
-           if (!element) {
-             return null;
+         construct: function (element) {
+           this._currentElement = element;
+           this._rootNodeID = null;
+           this._compositeType = null;
+           this._instance = null;
+           this._hostParent = null;
+           this._hostContainerInfo = null;
+       
+           // See ReactUpdateQueue
+           this._updateBatchNumber = null;
+           this._pendingElement = null;
+           this._pendingStateQueue = null;
+           this._pendingReplaceState = false;
+           this._pendingForceUpdate = false;
+       
+           this._renderedNodeType = null;
+           this._renderedComponent = null;
+           this._context = null;
+           this._mountOrder = 0;
+           this._topLevelWrapper = null;
+       
+           // See ReactUpdates and ReactUpdateQueue.
+           this._pendingCallbacks = null;
+       
+           // ComponentWillUnmount shall only be called once
+           this._calledComponentWillUnmount = false;
+       
+           if (process.env.NODE_ENV !== 'production') {
+             this._warnedAboutRefsInRender = false;
            }
-           return EventListener.listen(element, handlerBaseName, ReactEventListener.dispatchEvent.bind(null, topLevelType));
          },
        
          /**
-          * Traps a top-level event by using event capturing.
+          * Initializes the component, renders markup, and registers event listeners.
           *
-          * @param {string} topLevelType Record from `EventConstants`.
-          * @param {string} handlerBaseName Event name (e.g. "click").
-          * @param {object} handle Element on which to attach listener.
-          * @return {?object} An object with a remove function which will forcefully
-          *                  remove the listener.
+          * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction
+          * @param {?object} hostParent
+          * @param {?object} hostContainerInfo
+          * @param {?object} context
+          * @return {?string} Rendered markup to be inserted into the DOM.
+          * @final
           * @internal
           */
-         trapCapturedEvent: function (topLevelType, handlerBaseName, handle) {
-           var element = handle;
-           if (!element) {
-             return null;
-           }
-           return EventListener.capture(element, handlerBaseName, ReactEventListener.dispatchEvent.bind(null, topLevelType));
-         },
+         mountComponent: function (transaction, hostParent, hostContainerInfo, context) {
+           var _this = this;
        
-         monitorScrollValue: function (refresh) {
-           var callback = scrollValueMonitor.bind(null, refresh);
-           EventListener.listen(window, 'scroll', callback);
-         },
+           this._context = context;
+           this._mountOrder = nextMountID++;
+           this._hostParent = hostParent;
+           this._hostContainerInfo = hostContainerInfo;
        
-         dispatchEvent: function (topLevelType, nativeEvent) {
-           if (!ReactEventListener._enabled) {
-             return;
+           var publicProps = this._currentElement.props;
+           var publicContext = this._processContext(context);
+       
+           var Component = this._currentElement.type;
+       
+           var updateQueue = transaction.getUpdateQueue();
+       
+           // Initialize the public class
+           var doConstruct = shouldConstruct(Component);
+           var inst = this._constructComponent(doConstruct, publicProps, publicContext, updateQueue);
+           var renderedElement;
+       
+           // Support functional components
+           if (!doConstruct && (inst == null || inst.render == null)) {
+             renderedElement = inst;
+             warnIfInvalidElement(Component, renderedElement);
+             !(inst === null || inst === false || ReactElement.isValidElement(inst)) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s(...): A valid React element (or null) must be returned. You may have returned undefined, an array or some other invalid object.', Component.displayName || Component.name || 'Component') : _prodInvariant('105', Component.displayName || Component.name || 'Component') : void 0;
+             inst = new StatelessComponent(Component);
+             this._compositeType = CompositeTypes.StatelessFunctional;
+           } else {
+             if (isPureComponent(Component)) {
+               this._compositeType = CompositeTypes.PureClass;
+             } else {
+               this._compositeType = CompositeTypes.ImpureClass;
+             }
            }
        
-           var bookKeeping = TopLevelCallbackBookKeeping.getPooled(topLevelType, nativeEvent);
-           try {
-             // Event queue being processed in the same cycle allows
-             // `preventDefault`.
-             ReactUpdates.batchedUpdates(handleTopLevelImpl, bookKeeping);
-           } finally {
-             TopLevelCallbackBookKeeping.release(bookKeeping);
+           if (process.env.NODE_ENV !== 'production') {
+             // This will throw later in _renderValidatedComponent, but add an early
+             // warning now to help debugging
+             if (inst.render == null) {
+               process.env.NODE_ENV !== 'production' ? warning(false, '%s(...): No `render` method found on the returned component ' + 'instance: you may have forgotten to define `render`.', Component.displayName || Component.name || 'Component') : void 0;
+             }
+       
+             var propsMutated = inst.props !== publicProps;
+             var componentName = Component.displayName || Component.name || 'Component';
+       
+             process.env.NODE_ENV !== 'production' ? warning(inst.props === undefined || !propsMutated, '%s(...): When calling super() in `%s`, make sure to pass ' + 'up the same props that your component\'s constructor was passed.', componentName, componentName) : void 0;
            }
-         }
-       };
        
-       module.exports = ReactEventListener;
-
-/***/ },
-/* 121 */
-/***/ function(module, exports, __webpack_require__) {
-
-       /* WEBPACK VAR INJECTION */(function(process) {/**
-        * Copyright 2013-2015, Facebook, Inc.
-        *
-        * Licensed under the Apache License, Version 2.0 (the "License");
-        * you may not use this file except in compliance with the License.
-        * You may obtain a copy of the License at
-        *
-        * http://www.apache.org/licenses/LICENSE-2.0
-        *
-        * Unless required by applicable law or agreed to in writing, software
-        * distributed under the License is distributed on an "AS IS" BASIS,
-        * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-        * See the License for the specific language governing permissions and
-        * limitations under the License.
-        *
-        * @providesModule EventListener
-        * @typechecks
-        */
+           // These should be set up in the constructor, but as a convenience for
+           // simpler class abstractions, we set them up after the fact.
+           inst.props = publicProps;
+           inst.context = publicContext;
+           inst.refs = emptyObject;
+           inst.updater = updateQueue;
        
-       'use strict';
+           this._instance = inst;
        
-       var emptyFunction = __webpack_require__(17);
+           // Store a reference from the instance back to the internal representation
+           ReactInstanceMap.set(inst, this);
        
-       /**
-        * Upstream version of event listener. Does not take into account specific
-        * nature of platform.
-        */
-       var EventListener = {
-         /**
-          * Listen to DOM events during the bubble phase.
-          *
-          * @param {DOMEventTarget} target DOM element to register listener on.
-          * @param {string} eventType Event type, e.g. 'click' or 'mouseover'.
-          * @param {function} callback Callback function.
-          * @return {object} Object with a `remove` method.
-          */
-         listen: function (target, eventType, callback) {
-           if (target.addEventListener) {
-             target.addEventListener(eventType, callback, false);
-             return {
-               remove: function () {
-                 target.removeEventListener(eventType, callback, false);
-               }
-             };
-           } else if (target.attachEvent) {
-             target.attachEvent('on' + eventType, callback);
-             return {
-               remove: function () {
-                 target.detachEvent('on' + eventType, callback);
-               }
-             };
+           if (process.env.NODE_ENV !== 'production') {
+             // Since plain JS classes are defined without any special initialization
+             // logic, we can not catch common errors early. Therefore, we have to
+             // catch them here, at initialization time, instead.
+             process.env.NODE_ENV !== 'production' ? warning(!inst.getInitialState || inst.getInitialState.isReactClassApproved, 'getInitialState was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Did you mean to define a state property instead?', this.getName() || 'a component') : void 0;
+             process.env.NODE_ENV !== 'production' ? warning(!inst.getDefaultProps || inst.getDefaultProps.isReactClassApproved, 'getDefaultProps was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Use a static property to define defaultProps instead.', this.getName() || 'a component') : void 0;
+             process.env.NODE_ENV !== 'production' ? warning(!inst.propTypes, 'propTypes was defined as an instance property on %s. Use a static ' + 'property to define propTypes instead.', this.getName() || 'a component') : void 0;
+             process.env.NODE_ENV !== 'production' ? warning(!inst.contextTypes, 'contextTypes was defined as an instance property on %s. Use a ' + 'static property to define contextTypes instead.', this.getName() || 'a component') : void 0;
+             process.env.NODE_ENV !== 'production' ? warning(typeof inst.componentShouldUpdate !== 'function', '%s has a method called ' + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 'The name is phrased as a question because the function is ' + 'expected to return a value.', this.getName() || 'A component') : void 0;
+             process.env.NODE_ENV !== 'production' ? warning(typeof inst.componentDidUnmount !== 'function', '%s has a method called ' + 'componentDidUnmount(). But there is no such lifecycle method. ' + 'Did you mean componentWillUnmount()?', this.getName() || 'A component') : void 0;
+             process.env.NODE_ENV !== 'production' ? warning(typeof inst.componentWillRecieveProps !== 'function', '%s has a method called ' + 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?', this.getName() || 'A component') : void 0;
            }
-         },
        
-         /**
-          * Listen to DOM events during the capture phase.
-          *
-          * @param {DOMEventTarget} target DOM element to register listener on.
-          * @param {string} eventType Event type, e.g. 'click' or 'mouseover'.
-          * @param {function} callback Callback function.
-          * @return {object} Object with a `remove` method.
-          */
-         capture: function (target, eventType, callback) {
-           if (target.addEventListener) {
-             target.addEventListener(eventType, callback, true);
-             return {
-               remove: function () {
-                 target.removeEventListener(eventType, callback, true);
-               }
-             };
+           var initialState = inst.state;
+           if (initialState === undefined) {
+             inst.state = initialState = null;
+           }
+           !(typeof initialState === 'object' && !Array.isArray(initialState)) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.state: must be set to an object or null', this.getName() || 'ReactCompositeComponent') : _prodInvariant('106', this.getName() || 'ReactCompositeComponent') : void 0;
+       
+           this._pendingStateQueue = null;
+           this._pendingReplaceState = false;
+           this._pendingForceUpdate = false;
+       
+           var markup;
+           if (inst.unstable_handleError) {
+             markup = this.performInitialMountWithErrorHandling(renderedElement, hostParent, hostContainerInfo, transaction, context);
            } else {
+             markup = this.performInitialMount(renderedElement, hostParent, hostContainerInfo, transaction, context);
+           }
+       
+           if (inst.componentDidMount) {
              if (process.env.NODE_ENV !== 'production') {
-               console.error('Attempted to listen to events during the capture phase on a ' + 'browser that does not support the capture phase. Your application ' + 'will not receive some events.');
+               transaction.getReactMountReady().enqueue(invokeComponentDidMountWithTimer, this);
+             } else {
+               transaction.getReactMountReady().enqueue(inst.componentDidMount, inst);
              }
-             return {
-               remove: emptyFunction
-             };
            }
-         },
        
-         registerDefault: function () {}
-       };
+           if (process.env.NODE_ENV !== 'production') {
+             if (this._debugID) {
+               var callback = function (component) {
+                 return ReactInstrumentation.debugTool.onComponentHasMounted(_this._debugID);
+               };
+               transaction.getReactMountReady().enqueue(callback, this);
+             }
+           }
        
-       module.exports = EventListener;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
-
-/***/ },
-/* 122 */
-/***/ function(module, exports) {
-
-       /**
-        * 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.
-        *
-        * @providesModule getUnboundedScrollPosition
-        * @typechecks
-        */
+           return markup;
+         },
        
-       'use strict';
+         _constructComponent: function (doConstruct, publicProps, publicContext, updateQueue) {
+           if (process.env.NODE_ENV !== 'production') {
+             ReactCurrentOwner.current = this;
+             try {
+               return this._constructComponentWithoutOwner(doConstruct, publicProps, publicContext, updateQueue);
+             } finally {
+               ReactCurrentOwner.current = null;
+             }
+           } else {
+             return this._constructComponentWithoutOwner(doConstruct, publicProps, publicContext, updateQueue);
+           }
+         },
        
-       /**
-        * Gets the scroll position of the supplied element or window.
-        *
-        * The return values are unbounded, unlike `getScrollPosition`. This means they
-        * may be negative or exceed the element boundaries (which is possible using
-        * inertial scrolling).
-        *
-        * @param {DOMWindow|DOMElement} scrollable
-        * @return {object} Map with `x` and `y` keys.
-        */
-       function getUnboundedScrollPosition(scrollable) {
-         if (scrollable === window) {
-           return {
-             x: window.pageXOffset || document.documentElement.scrollLeft,
-             y: window.pageYOffset || document.documentElement.scrollTop
-           };
-         }
-         return {
-           x: scrollable.scrollLeft,
-           y: scrollable.scrollTop
-         };
-       }
+         _constructComponentWithoutOwner: function (doConstruct, publicProps, publicContext, updateQueue) {
+           var Component = this._currentElement.type;
+           var instanceOrElement;
+           if (doConstruct) {
+             if (process.env.NODE_ENV !== 'production') {
+               if (this._debugID !== 0) {
+                 ReactInstrumentation.debugTool.onBeginLifeCycleTimer(this._debugID, 'ctor');
+               }
+             }
+             instanceOrElement = new Component(publicProps, publicContext, updateQueue);
+             if (process.env.NODE_ENV !== 'production') {
+               if (this._debugID !== 0) {
+                 ReactInstrumentation.debugTool.onEndLifeCycleTimer(this._debugID, 'ctor');
+               }
+             }
+           } else {
+             // This can still be an instance in case of factory components
+             // but we'll count this as time spent rendering as the more common case.
+             if (process.env.NODE_ENV !== 'production') {
+               if (this._debugID !== 0) {
+                 ReactInstrumentation.debugTool.onBeginLifeCycleTimer(this._debugID, 'render');
+               }
+             }
+             instanceOrElement = Component(publicProps, publicContext, updateQueue);
+             if (process.env.NODE_ENV !== 'production') {
+               if (this._debugID !== 0) {
+                 ReactInstrumentation.debugTool.onEndLifeCycleTimer(this._debugID, 'render');
+               }
+             }
+           }
+           return instanceOrElement;
+         },
        
-       module.exports = getUnboundedScrollPosition;
-
-/***/ },
-/* 123 */
-/***/ 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.
-        *
-        * @providesModule ReactInjection
-        */
+         performInitialMountWithErrorHandling: function (renderedElement, hostParent, hostContainerInfo, transaction, context) {
+           var markup;
+           var checkpoint = transaction.checkpoint();
+           try {
+             markup = this.performInitialMount(renderedElement, hostParent, hostContainerInfo, transaction, context);
+           } catch (e) {
+             if (process.env.NODE_ENV !== 'production') {
+               if (this._debugID !== 0) {
+                 ReactInstrumentation.debugTool.onError();
+               }
+             }
+             // Roll back to checkpoint, handle error (which may add items to the transaction), and take a new checkpoint
+             transaction.rollback(checkpoint);
+             this._instance.unstable_handleError(e);
+             if (this._pendingStateQueue) {
+               this._instance.state = this._processPendingState(this._instance.props, this._instance.context);
+             }
+             checkpoint = transaction.checkpoint();
        
-       'use strict';
+             this._renderedComponent.unmountComponent(true);
+             transaction.rollback(checkpoint);
        
-       var DOMProperty = __webpack_require__(25);
-       var EventPluginHub = __webpack_require__(33);
-       var ReactComponentEnvironment = __webpack_require__(66);
-       var ReactClass = __webpack_require__(124);
-       var ReactEmptyComponent = __webpack_require__(70);
-       var ReactBrowserEventEmitter = __webpack_require__(31);
-       var ReactNativeComponent = __webpack_require__(71);
-       var ReactPerf = __webpack_require__(20);
-       var ReactRootIndex = __webpack_require__(48);
-       var ReactUpdates = __webpack_require__(56);
+             // Try again - we've informed the component about the error, so they can render an error message this time.
+             // If this throws again, the error will bubble up (and can be caught by a higher error boundary).
+             markup = this.performInitialMount(renderedElement, hostParent, hostContainerInfo, transaction, context);
+           }
+           return markup;
+         },
        
-       var ReactInjection = {
-         Component: ReactComponentEnvironment.injection,
-         Class: ReactClass.injection,
-         DOMProperty: DOMProperty.injection,
-         EmptyComponent: ReactEmptyComponent.injection,
-         EventPluginHub: EventPluginHub.injection,
-         EventEmitter: ReactBrowserEventEmitter.injection,
-         NativeComponent: ReactNativeComponent.injection,
-         Perf: ReactPerf.injection,
-         RootIndex: ReactRootIndex.injection,
-         Updates: ReactUpdates.injection
-       };
+         performInitialMount: function (renderedElement, hostParent, hostContainerInfo, transaction, context) {
+           var inst = this._instance;
+           if (inst.componentWillMount) {
+             if (process.env.NODE_ENV !== 'production') {
+               if (this._debugID !== 0) {
+                 ReactInstrumentation.debugTool.onBeginLifeCycleTimer(this._debugID, 'componentWillMount');
+               }
+             }
+             inst.componentWillMount();
+             if (process.env.NODE_ENV !== 'production') {
+               if (this._debugID !== 0) {
+                 ReactInstrumentation.debugTool.onEndLifeCycleTimer(this._debugID, 'componentWillMount');
+               }
+             }
+             // When mounting, calls to `setState` by `componentWillMount` will set
+             // `this._pendingStateQueue` without triggering a re-render.
+             if (this._pendingStateQueue) {
+               inst.state = this._processPendingState(inst.props, inst.context);
+             }
+           }
        
-       module.exports = ReactInjection;
-
-/***/ },
-/* 124 */
-/***/ function(module, exports, __webpack_require__) {
-
-       /* WEBPACK VAR INJECTION */(function(process) {/**
-        * 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.
-        *
-        * @providesModule ReactClass
-        */
+           // If not a stateless component, we now render
+           if (renderedElement === undefined) {
+             renderedElement = this._renderValidatedComponent();
+           }
        
-       'use strict';
+           var nodeType = ReactNodeTypes.getType(renderedElement);
+           this._renderedNodeType = nodeType;
+           var child = this._instantiateReactComponent(renderedElement, nodeType !== ReactNodeTypes.EMPTY /* shouldHaveDebugID */
+           );
+           this._renderedComponent = child;
+           if (process.env.NODE_ENV !== 'production') {
+             if (child._debugID !== 0 && this._debugID !== 0) {
+               ReactInstrumentation.debugTool.onSetParent(child._debugID, this._debugID);
+             }
+           }
        
-       var ReactComponent = __webpack_require__(125);
-       var ReactElement = __webpack_require__(44);
-       var ReactPropTypeLocations = __webpack_require__(67);
-       var ReactPropTypeLocationNames = __webpack_require__(68);
-       var ReactNoopUpdateQueue = __webpack_require__(126);
+           var markup = ReactReconciler.mountComponent(child, transaction, hostParent, hostContainerInfo, this._processChildContext(context));
        
-       var assign = __webpack_require__(41);
-       var emptyObject = __webpack_require__(60);
-       var invariant = __webpack_require__(15);
-       var keyMirror = __webpack_require__(19);
-       var keyOf = __webpack_require__(81);
-       var warning = __webpack_require__(27);
+           if (process.env.NODE_ENV !== 'production') {
+             if (this._debugID !== 0) {
+               ReactInstrumentation.debugTool.onSetChildren(this._debugID, child._debugID !== 0 ? [child._debugID] : []);
+             }
+           }
        
-       var MIXINS_KEY = keyOf({ mixins: null });
+           return markup;
+         },
+       
+         getHostNode: function () {
+           return ReactReconciler.getHostNode(this._renderedComponent);
+         },
        
-       /**
-        * Policies that describe methods in `ReactClassInterface`.
-        */
-       var SpecPolicy = keyMirror({
-         /**
-          * These methods may be defined only once by the class specification or mixin.
-          */
-         DEFINE_ONCE: null,
-         /**
-          * These methods may be defined by both the class specification and mixins.
-          * Subsequent definitions will be chained. These methods must return void.
-          */
-         DEFINE_MANY: null,
-         /**
-          * These methods are overriding the base class.
-          */
-         OVERRIDE_BASE: null,
          /**
-          * These methods are similar to DEFINE_MANY, except we assume they return
-          * objects. We try to merge the keys of the return values of all the mixed in
-          * functions. If there is a key conflict we throw.
+          * Releases any resources allocated by `mountComponent`.
+          *
+          * @final
+          * @internal
           */
-         DEFINE_MANY_MERGED: null
-       });
+         unmountComponent: function (safely) {
+           if (!this._renderedComponent) {
+             return;
+           }
+           var inst = this._instance;
        
-       var injectedMixins = [];
+           if (inst.componentWillUnmount && !inst._calledComponentWillUnmount) {
+             inst._calledComponentWillUnmount = true;
+             if (process.env.NODE_ENV !== 'production') {
+               if (this._debugID !== 0) {
+                 ReactInstrumentation.debugTool.onBeginLifeCycleTimer(this._debugID, 'componentWillUnmount');
+               }
+             }
+             if (safely) {
+               var name = this.getName() + '.componentWillUnmount()';
+               ReactErrorUtils.invokeGuardedCallback(name, inst.componentWillUnmount.bind(inst));
+             } else {
+               inst.componentWillUnmount();
+             }
+             if (process.env.NODE_ENV !== 'production') {
+               if (this._debugID !== 0) {
+                 ReactInstrumentation.debugTool.onEndLifeCycleTimer(this._debugID, 'componentWillUnmount');
+               }
+             }
+           }
        
-       var warnedSetProps = false;
-       function warnSetProps() {
-         if (!warnedSetProps) {
-           warnedSetProps = true;
-           process.env.NODE_ENV !== 'production' ? warning(false, 'setProps(...) and replaceProps(...) are deprecated. ' + 'Instead, call render again at the top level.') : undefined;
-         }
-       }
+           if (this._renderedComponent) {
+             ReactReconciler.unmountComponent(this._renderedComponent, safely);
+             this._renderedNodeType = null;
+             this._renderedComponent = null;
+             this._instance = null;
+           }
        
-       /**
-        * Composite components are higher-level components that compose other composite
-        * or native components.
-        *
-        * To create a new type of `ReactClass`, pass a specification of
-        * your new class to `React.createClass`. The only requirement of your class
-        * specification is that you implement a `render` method.
-        *
-        *   var MyComponent = React.createClass({
-        *     render: function() {
-        *       return <div>Hello World</div>;
-        *     }
-        *   });
-        *
-        * The class specification supports a specific protocol of methods that have
-        * special meaning (e.g. `render`). See `ReactClassInterface` for
-        * more the comprehensive protocol. Any other properties and methods in the
-        * class specification will be available on the prototype.
-        *
-        * @interface ReactClassInterface
-        * @internal
-        */
-       var ReactClassInterface = {
+           // Reset pending fields
+           // Even if this component is scheduled for another update in ReactUpdates,
+           // it would still be ignored because these fields are reset.
+           this._pendingStateQueue = null;
+           this._pendingReplaceState = false;
+           this._pendingForceUpdate = false;
+           this._pendingCallbacks = null;
+           this._pendingElement = null;
        
-         /**
-          * An array of Mixin objects to include when defining your component.
-          *
-          * @type {array}
-          * @optional
-          */
-         mixins: SpecPolicy.DEFINE_MANY,
+           // These fields do not really need to be reset since this object is no
+           // longer accessible.
+           this._context = null;
+           this._rootNodeID = null;
+           this._topLevelWrapper = null;
        
-         /**
-          * An object containing properties and methods that should be defined on
-          * the component's constructor instead of its prototype (static methods).
-          *
-          * @type {object}
-          * @optional
-          */
-         statics: SpecPolicy.DEFINE_MANY,
+           // Delete the reference from the instance to this internal representation
+           // which allow the internals to be properly cleaned up even if the user
+           // leaks a reference to the public instance.
+           ReactInstanceMap.remove(inst);
        
-         /**
-          * Definition of prop types for this component.
-          *
-          * @type {object}
-          * @optional
-          */
-         propTypes: SpecPolicy.DEFINE_MANY,
+           // Some existing components rely on inst.props even after they've been
+           // destroyed (in event handlers).
+           // TODO: inst.props = null;
+           // TODO: inst.state = null;
+           // TODO: inst.context = null;
+         },
        
          /**
-          * Definition of context types for this component.
+          * Filters the context object to only contain keys specified in
+          * `contextTypes`
           *
-          * @type {object}
-          * @optional
+          * @param {object} context
+          * @return {?object}
+          * @private
           */
-         contextTypes: SpecPolicy.DEFINE_MANY,
+         _maskContext: function (context) {
+           var Component = this._currentElement.type;
+           var contextTypes = Component.contextTypes;
+           if (!contextTypes) {
+             return emptyObject;
+           }
+           var maskedContext = {};
+           for (var contextName in contextTypes) {
+             maskedContext[contextName] = context[contextName];
+           }
+           return maskedContext;
+         },
        
          /**
-          * Definition of context types this component sets for its children.
+          * Filters the context object to only contain keys specified in
+          * `contextTypes`, and asserts that they are valid.
           *
-          * @type {object}
-          * @optional
+          * @param {object} context
+          * @return {?object}
+          * @private
           */
-         childContextTypes: SpecPolicy.DEFINE_MANY,
-       
-         // ==== Definition methods ====
+         _processContext: function (context) {
+           var maskedContext = this._maskContext(context);
+           if (process.env.NODE_ENV !== 'production') {
+             var Component = this._currentElement.type;
+             if (Component.contextTypes) {
+               this._checkContextTypes(Component.contextTypes, maskedContext, ReactPropTypeLocations.context);
+             }
+           }
+           return maskedContext;
+         },
        
          /**
-          * Invoked when the component is mounted. Values in the mapping will be set on
-          * `this.props` if that prop is not specified (i.e. using an `in` check).
-          *
-          * This method is invoked before `getInitialState` and therefore cannot rely
-          * on `this.state` or use `this.setState`.
-          *
+          * @param {object} currentContext
           * @return {object}
-          * @optional
+          * @private
           */
-         getDefaultProps: SpecPolicy.DEFINE_MANY_MERGED,
+         _processChildContext: function (currentContext) {
+           var Component = this._currentElement.type;
+           var inst = this._instance;
+           if (process.env.NODE_ENV !== 'production') {
+             ReactInstrumentation.debugTool.onBeginProcessingChildContext();
+           }
+           var childContext = inst.getChildContext && inst.getChildContext();
+           if (process.env.NODE_ENV !== 'production') {
+             ReactInstrumentation.debugTool.onEndProcessingChildContext();
+           }
+           if (childContext) {
+             !(typeof Component.childContextTypes === 'object') ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.getChildContext(): childContextTypes must be defined in order to use getChildContext().', this.getName() || 'ReactCompositeComponent') : _prodInvariant('107', this.getName() || 'ReactCompositeComponent') : void 0;
+             if (process.env.NODE_ENV !== 'production') {
+               this._checkContextTypes(Component.childContextTypes, childContext, ReactPropTypeLocations.childContext);
+             }
+             for (var name in childContext) {
+               !(name in Component.childContextTypes) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.getChildContext(): key "%s" is not defined in childContextTypes.', this.getName() || 'ReactCompositeComponent', name) : _prodInvariant('108', this.getName() || 'ReactCompositeComponent', name) : void 0;
+             }
+             return _assign({}, currentContext, childContext);
+           }
+           return currentContext;
+         },
        
          /**
-          * Invoked once before the component is mounted. The return value will be used
-          * as the initial value of `this.state`.
-          *
-          *   getInitialState: function() {
-          *     return {
-          *       isOn: false,
-          *       fooBaz: new BazFoo()
-          *     }
-          *   }
+          * Assert that the context types are valid
           *
-          * @return {object}
-          * @optional
+          * @param {object} typeSpecs Map of context field to a ReactPropType
+          * @param {object} values Runtime values that need to be type-checked
+          * @param {string} location e.g. "prop", "context", "child context"
+          * @private
           */
-         getInitialState: SpecPolicy.DEFINE_MANY_MERGED,
+         _checkContextTypes: function (typeSpecs, values, location) {
+           checkReactTypeSpec(typeSpecs, values, location, this.getName(), null, this._debugID);
+         },
        
-         /**
-          * @return {object}
-          * @optional
-          */
-         getChildContext: SpecPolicy.DEFINE_MANY_MERGED,
+         receiveComponent: function (nextElement, transaction, nextContext) {
+           var prevElement = this._currentElement;
+           var prevContext = this._context;
        
-         /**
-          * Uses props from `this.props` and state from `this.state` to render the
-          * structure of the component.
-          *
-          * No guarantees are made about when or how often this method is invoked, so
-          * it must not have side effects.
-          *
-          *   render: function() {
-          *     var name = this.props.name;
-          *     return <div>Hello, {name}!</div>;
-          *   }
-          *
-          * @return {ReactComponent}
-          * @nosideeffects
-          * @required
-          */
-         render: SpecPolicy.DEFINE_ONCE,
+           this._pendingElement = null;
        
-         // ==== Delegate methods ====
+           this.updateComponent(transaction, prevElement, nextElement, prevContext, nextContext);
+         },
        
          /**
-          * Invoked when the component is initially created and about to be mounted.
-          * This may have side effects, but any external subscriptions or data created
-          * by this method must be cleaned up in `componentWillUnmount`.
+          * If any of `_pendingElement`, `_pendingStateQueue`, or `_pendingForceUpdate`
+          * is set, update the component.
           *
-          * @optional
+          * @param {ReactReconcileTransaction} transaction
+          * @internal
           */
-         componentWillMount: SpecPolicy.DEFINE_MANY,
+         performUpdateIfNecessary: function (transaction) {
+           if (this._pendingElement != null) {
+             ReactReconciler.receiveComponent(this, this._pendingElement, transaction, this._context);
+           } else if (this._pendingStateQueue !== null || this._pendingForceUpdate) {
+             this.updateComponent(transaction, this._currentElement, this._currentElement, this._context, this._context);
+           } else {
+             this._updateBatchNumber = null;
+           }
+         },
        
          /**
-          * Invoked when the component has been mounted and has a DOM representation.
-          * However, there is no guarantee that the DOM node is in the document.
+          * Perform an update to a mounted component. The componentWillReceiveProps and
+          * shouldComponentUpdate methods are called, then (assuming the update isn't
+          * skipped) the remaining update lifecycle methods are called and the DOM
+          * representation is updated.
           *
-          * Use this as an opportunity to operate on the DOM when the component has
-          * been mounted (initialized and rendered) for the first time.
+          * By default, this implements React's rendering and reconciliation algorithm.
+          * Sophisticated clients may wish to override this.
           *
-          * @param {DOMElement} rootNode DOM element representing the component.
-          * @optional
+          * @param {ReactReconcileTransaction} transaction
+          * @param {ReactElement} prevParentElement
+          * @param {ReactElement} nextParentElement
+          * @internal
+          * @overridable
           */
-         componentDidMount: SpecPolicy.DEFINE_MANY,
+         updateComponent: function (transaction, prevParentElement, nextParentElement, prevUnmaskedContext, nextUnmaskedContext) {
+           var inst = this._instance;
+           !(inst != null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Attempted to update component `%s` that has already been unmounted (or failed to mount).', this.getName() || 'ReactCompositeComponent') : _prodInvariant('136', this.getName() || 'ReactCompositeComponent') : void 0;
        
-         /**
-          * Invoked before the component receives new props.
-          *
-          * Use this as an opportunity to react to a prop transition by updating the
-          * state using `this.setState`. Current props are accessed via `this.props`.
-          *
-          *   componentWillReceiveProps: function(nextProps, nextContext) {
-          *     this.setState({
-          *       likesIncreasing: nextProps.likeCount > this.props.likeCount
-          *     });
-          *   }
-          *
-          * NOTE: There is no equivalent `componentWillReceiveState`. An incoming prop
-          * transition may cause a state change, but the opposite is not true. If you
-          * need it, you are probably looking for `componentWillUpdate`.
-          *
-          * @param {object} nextProps
-          * @optional
-          */
-         componentWillReceiveProps: SpecPolicy.DEFINE_MANY,
+           var willReceive = false;
+           var nextContext;
        
-         /**
-          * Invoked while deciding if the component should be updated as a result of
-          * receiving new props, state and/or context.
-          *
-          * Use this as an opportunity to `return false` when you're certain that the
-          * transition to the new props/state/context will not require a component
-          * update.
-          *
-          *   shouldComponentUpdate: function(nextProps, nextState, nextContext) {
-          *     return !equal(nextProps, this.props) ||
-          *       !equal(nextState, this.state) ||
-          *       !equal(nextContext, this.context);
-          *   }
-          *
-          * @param {object} nextProps
-          * @param {?object} nextState
-          * @param {?object} nextContext
-          * @return {boolean} True if the component should update.
-          * @optional
-          */
-         shouldComponentUpdate: SpecPolicy.DEFINE_ONCE,
+           // Determine if the context has changed or not
+           if (this._context === nextUnmaskedContext) {
+             nextContext = inst.context;
+           } else {
+             nextContext = this._processContext(nextUnmaskedContext);
+             willReceive = true;
+           }
        
-         /**
-          * Invoked when the component is about to update due to a transition from
-          * `this.props`, `this.state` and `this.context` to `nextProps`, `nextState`
-          * and `nextContext`.
-          *
-          * Use this as an opportunity to perform preparation before an update occurs.
-          *
-          * NOTE: You **cannot** use `this.setState()` in this method.
-          *
-          * @param {object} nextProps
-          * @param {?object} nextState
-          * @param {?object} nextContext
-          * @param {ReactReconcileTransaction} transaction
-          * @optional
-          */
-         componentWillUpdate: SpecPolicy.DEFINE_MANY,
+           var prevProps = prevParentElement.props;
+           var nextProps = nextParentElement.props;
        
-         /**
-          * Invoked when the component's DOM representation has been updated.
-          *
-          * Use this as an opportunity to operate on the DOM when the component has
-          * been updated.
-          *
-          * @param {object} prevProps
-          * @param {?object} prevState
-          * @param {?object} prevContext
-          * @param {DOMElement} rootNode DOM element representing the component.
-          * @optional
-          */
-         componentDidUpdate: SpecPolicy.DEFINE_MANY,
+           // Not a simple state update but a props update
+           if (prevParentElement !== nextParentElement) {
+             willReceive = true;
+           }
        
-         /**
-          * Invoked when the component is about to be removed from its parent and have
-          * its DOM representation destroyed.
-          *
-          * Use this as an opportunity to deallocate any external resources.
-          *
-          * NOTE: There is no `componentDidUnmount` since your component will have been
-          * destroyed by that point.
-          *
-          * @optional
-          */
-         componentWillUnmount: SpecPolicy.DEFINE_MANY,
-       
-         // ==== Advanced methods ====
-       
-         /**
-          * Updates the component's currently mounted DOM representation.
-          *
-          * By default, this implements React's rendering and reconciliation algorithm.
-          * Sophisticated clients may wish to override this.
-          *
-          * @param {ReactReconcileTransaction} transaction
-          * @internal
-          * @overridable
-          */
-         updateComponent: SpecPolicy.OVERRIDE_BASE
+           // An update here will schedule an update but immediately set
+           // _pendingStateQueue which will ensure that any state updates gets
+           // immediately reconciled instead of waiting for the next batch.
+           if (willReceive && inst.componentWillReceiveProps) {
+             if (process.env.NODE_ENV !== 'production') {
+               if (this._debugID !== 0) {
+                 ReactInstrumentation.debugTool.onBeginLifeCycleTimer(this._debugID, 'componentWillReceiveProps');
+               }
+             }
+             inst.componentWillReceiveProps(nextProps, nextContext);
+             if (process.env.NODE_ENV !== 'production') {
+               if (this._debugID !== 0) {
+                 ReactInstrumentation.debugTool.onEndLifeCycleTimer(this._debugID, 'componentWillReceiveProps');
+               }
+             }
+           }
        
-       };
+           var nextState = this._processPendingState(nextProps, nextContext);
+           var shouldUpdate = true;
        
-       /**
-        * Mapping from class specification keys to special processing functions.
-        *
-        * Although these are declared like instance properties in the specification
-        * when defining classes using `React.createClass`, they are actually static
-        * and are accessible on the constructor instead of the prototype. Despite
-        * being static, they must be defined outside of the "statics" key under
-        * which all other static methods are defined.
-        */
-       var RESERVED_SPEC_KEYS = {
-         displayName: function (Constructor, displayName) {
-           Constructor.displayName = displayName;
-         },
-         mixins: function (Constructor, mixins) {
-           if (mixins) {
-             for (var i = 0; i < mixins.length; i++) {
-               mixSpecIntoComponent(Constructor, mixins[i]);
+           if (!this._pendingForceUpdate) {
+             if (inst.shouldComponentUpdate) {
+               if (process.env.NODE_ENV !== 'production') {
+                 if (this._debugID !== 0) {
+                   ReactInstrumentation.debugTool.onBeginLifeCycleTimer(this._debugID, 'shouldComponentUpdate');
+                 }
+               }
+               shouldUpdate = inst.shouldComponentUpdate(nextProps, nextState, nextContext);
+               if (process.env.NODE_ENV !== 'production') {
+                 if (this._debugID !== 0) {
+                   ReactInstrumentation.debugTool.onEndLifeCycleTimer(this._debugID, 'shouldComponentUpdate');
+                 }
+               }
+             } else {
+               if (this._compositeType === CompositeTypes.PureClass) {
+                 shouldUpdate = !shallowEqual(prevProps, nextProps) || !shallowEqual(inst.state, nextState);
+               }
              }
            }
-         },
-         childContextTypes: function (Constructor, childContextTypes) {
-           if (process.env.NODE_ENV !== 'production') {
-             validateTypeDef(Constructor, childContextTypes, ReactPropTypeLocations.childContext);
-           }
-           Constructor.childContextTypes = assign({}, Constructor.childContextTypes, childContextTypes);
-         },
-         contextTypes: function (Constructor, contextTypes) {
+       
            if (process.env.NODE_ENV !== 'production') {
-             validateTypeDef(Constructor, contextTypes, ReactPropTypeLocations.context);
+             process.env.NODE_ENV !== 'production' ? warning(shouldUpdate !== undefined, '%s.shouldComponentUpdate(): Returned undefined instead of a ' + 'boolean value. Make sure to return true or false.', this.getName() || 'ReactCompositeComponent') : void 0;
            }
-           Constructor.contextTypes = assign({}, Constructor.contextTypes, contextTypes);
-         },
-         /**
-          * Special case getDefaultProps which should move into statics but requires
-          * automatic merging.
-          */
-         getDefaultProps: function (Constructor, getDefaultProps) {
-           if (Constructor.getDefaultProps) {
-             Constructor.getDefaultProps = createMergedResultFunction(Constructor.getDefaultProps, getDefaultProps);
+       
+           this._updateBatchNumber = null;
+           if (shouldUpdate) {
+             this._pendingForceUpdate = false;
+             // Will set `this.props`, `this.state` and `this.context`.
+             this._performComponentUpdate(nextParentElement, nextProps, nextState, nextContext, transaction, nextUnmaskedContext);
            } else {
-             Constructor.getDefaultProps = getDefaultProps;
+             // If it's determined that a component should not update, we still want
+             // to set props and state but we shortcut the rest of the update.
+             this._currentElement = nextParentElement;
+             this._context = nextUnmaskedContext;
+             inst.props = nextProps;
+             inst.state = nextState;
+             inst.context = nextContext;
            }
          },
-         propTypes: function (Constructor, propTypes) {
-           if (process.env.NODE_ENV !== 'production') {
-             validateTypeDef(Constructor, propTypes, ReactPropTypeLocations.prop);
+       
+         _processPendingState: function (props, context) {
+           var inst = this._instance;
+           var queue = this._pendingStateQueue;
+           var replace = this._pendingReplaceState;
+           this._pendingReplaceState = false;
+           this._pendingStateQueue = null;
+       
+           if (!queue) {
+             return inst.state;
            }
-           Constructor.propTypes = assign({}, Constructor.propTypes, propTypes);
-         },
-         statics: function (Constructor, statics) {
-           mixStaticSpecIntoComponent(Constructor, statics);
-         },
-         autobind: function () {} };
        
-       // noop
-       function validateTypeDef(Constructor, typeDef, location) {
-         for (var propName in typeDef) {
-           if (typeDef.hasOwnProperty(propName)) {
-             // use a warning instead of an invariant so components
-             // don't show up in prod but not in __DEV__
-             process.env.NODE_ENV !== 'production' ? warning(typeof typeDef[propName] === 'function', '%s: %s type `%s` is invalid; it must be a function, usually from ' + 'React.PropTypes.', Constructor.displayName || 'ReactClass', ReactPropTypeLocationNames[location], propName) : undefined;
+           if (replace && queue.length === 1) {
+             return queue[0];
            }
-         }
-       }
        
-       function validateMethodOverride(proto, name) {
-         var specPolicy = ReactClassInterface.hasOwnProperty(name) ? ReactClassInterface[name] : null;
+           var nextState = _assign({}, replace ? queue[0] : inst.state);
+           for (var i = replace ? 1 : 0; i < queue.length; i++) {
+             var partial = queue[i];
+             _assign(nextState, typeof partial === 'function' ? partial.call(inst, nextState, props, context) : partial);
+           }
        
-         // Disallow overriding of base class methods unless explicitly allowed.
-         if (ReactClassMixin.hasOwnProperty(name)) {
-           !(specPolicy === SpecPolicy.OVERRIDE_BASE) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClassInterface: You are attempting to override ' + '`%s` from your class specification. Ensure that your method names ' + 'do not overlap with React methods.', name) : invariant(false) : undefined;
-         }
+           return nextState;
+         },
        
-         // Disallow defining methods more than once unless explicitly allowed.
-         if (proto.hasOwnProperty(name)) {
-           !(specPolicy === SpecPolicy.DEFINE_MANY || specPolicy === SpecPolicy.DEFINE_MANY_MERGED) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClassInterface: You are attempting to define ' + '`%s` on your component more than once. This conflict may be due ' + 'to a mixin.', name) : invariant(false) : undefined;
-         }
-       }
+         /**
+          * Merges new props and state, notifies delegate methods of update and
+          * performs update.
+          *
+          * @param {ReactElement} nextElement Next element
+          * @param {object} nextProps Next public object to set as properties.
+          * @param {?object} nextState Next object to set as state.
+          * @param {?object} nextContext Next public object to set as context.
+          * @param {ReactReconcileTransaction} transaction
+          * @param {?object} unmaskedContext
+          * @private
+          */
+         _performComponentUpdate: function (nextElement, nextProps, nextState, nextContext, transaction, unmaskedContext) {
+           var _this2 = this;
        
-       /**
-        * Mixin helper which handles policy validation and reserved
-        * specification keys when building React classses.
-        */
-       function mixSpecIntoComponent(Constructor, spec) {
-         if (!spec) {
-           return;
-         }
+           var inst = this._instance;
        
-         !(typeof spec !== 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You\'re attempting to ' + 'use a component class as a mixin. Instead, just use a regular object.') : invariant(false) : undefined;
-         !!ReactElement.isValidElement(spec) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You\'re attempting to ' + 'use a component as a mixin. Instead, just use a regular object.') : invariant(false) : undefined;
+           var hasComponentDidUpdate = Boolean(inst.componentDidUpdate);
+           var prevProps;
+           var prevState;
+           var prevContext;
+           if (hasComponentDidUpdate) {
+             prevProps = inst.props;
+             prevState = inst.state;
+             prevContext = inst.context;
+           }
        
-         var proto = Constructor.prototype;
+           if (inst.componentWillUpdate) {
+             if (process.env.NODE_ENV !== 'production') {
+               if (this._debugID !== 0) {
+                 ReactInstrumentation.debugTool.onBeginLifeCycleTimer(this._debugID, 'componentWillUpdate');
+               }
+             }
+             inst.componentWillUpdate(nextProps, nextState, nextContext);
+             if (process.env.NODE_ENV !== 'production') {
+               if (this._debugID !== 0) {
+                 ReactInstrumentation.debugTool.onEndLifeCycleTimer(this._debugID, 'componentWillUpdate');
+               }
+             }
+           }
        
-         // By handling mixins before any other properties, we ensure the same
-         // chaining order is applied to methods with DEFINE_MANY policy, whether
-         // mixins are listed before or after these methods in the spec.
-         if (spec.hasOwnProperty(MIXINS_KEY)) {
-           RESERVED_SPEC_KEYS.mixins(Constructor, spec.mixins);
-         }
+           this._currentElement = nextElement;
+           this._context = unmaskedContext;
+           inst.props = nextProps;
+           inst.state = nextState;
+           inst.context = nextContext;
        
-         for (var name in spec) {
-           if (!spec.hasOwnProperty(name)) {
-             continue;
-           }
+           this._updateRenderedComponent(transaction, unmaskedContext);
        
-           if (name === MIXINS_KEY) {
-             // We have already handled mixins in a special case above.
-             continue;
+           if (hasComponentDidUpdate) {
+             if (process.env.NODE_ENV !== 'production') {
+               transaction.getReactMountReady().enqueue(invokeComponentDidUpdateWithTimer.bind(this, prevProps, prevState, prevContext), this);
+             } else {
+               transaction.getReactMountReady().enqueue(inst.componentDidUpdate.bind(inst, prevProps, prevState, prevContext), inst);
+             }
            }
        
-           var property = spec[name];
-           validateMethodOverride(proto, name);
+           if (process.env.NODE_ENV !== 'production') {
+             if (this._debugID) {
+               var callback = function () {
+                 return ReactInstrumentation.debugTool.onComponentHasUpdated(_this2._debugID);
+               };
+               transaction.getReactMountReady().enqueue(callback, this);
+             }
+           }
+         },
        
-           if (RESERVED_SPEC_KEYS.hasOwnProperty(name)) {
-             RESERVED_SPEC_KEYS[name](Constructor, property);
+         /**
+          * Call the component's `render` method and update the DOM accordingly.
+          *
+          * @param {ReactReconcileTransaction} transaction
+          * @internal
+          */
+         _updateRenderedComponent: function (transaction, context) {
+           var prevComponentInstance = this._renderedComponent;
+           var prevRenderedElement = prevComponentInstance._currentElement;
+           var nextRenderedElement = this._renderValidatedComponent();
+           if (shouldUpdateReactComponent(prevRenderedElement, nextRenderedElement)) {
+             ReactReconciler.receiveComponent(prevComponentInstance, nextRenderedElement, transaction, this._processChildContext(context));
            } else {
-             // Setup methods on prototype:
-             // The following member methods should not be automatically bound:
-             // 1. Expected ReactClass methods (in the "interface").
-             // 2. Overridden methods (that were mixed in).
-             var isReactClassMethod = ReactClassInterface.hasOwnProperty(name);
-             var isAlreadyDefined = proto.hasOwnProperty(name);
-             var isFunction = typeof property === 'function';
-             var shouldAutoBind = isFunction && !isReactClassMethod && !isAlreadyDefined && spec.autobind !== false;
+             var oldHostNode = ReactReconciler.getHostNode(prevComponentInstance);
+             ReactReconciler.unmountComponent(prevComponentInstance, false);
        
-             if (shouldAutoBind) {
-               if (!proto.__reactAutoBindMap) {
-                 proto.__reactAutoBindMap = {};
+             var nodeType = ReactNodeTypes.getType(nextRenderedElement);
+             this._renderedNodeType = nodeType;
+             var child = this._instantiateReactComponent(nextRenderedElement, nodeType !== ReactNodeTypes.EMPTY /* shouldHaveDebugID */
+             );
+             this._renderedComponent = child;
+             if (process.env.NODE_ENV !== 'production') {
+               if (child._debugID !== 0 && this._debugID !== 0) {
+                 ReactInstrumentation.debugTool.onSetParent(child._debugID, this._debugID);
                }
-               proto.__reactAutoBindMap[name] = property;
-               proto[name] = property;
-             } else {
-               if (isAlreadyDefined) {
-                 var specPolicy = ReactClassInterface[name];
+             }
        
-                 // These cases should already be caught by validateMethodOverride.
-                 !(isReactClassMethod && (specPolicy === SpecPolicy.DEFINE_MANY_MERGED || specPolicy === SpecPolicy.DEFINE_MANY)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: Unexpected spec policy %s for key %s ' + 'when mixing in component specs.', specPolicy, name) : invariant(false) : undefined;
+             var nextMarkup = ReactReconciler.mountComponent(child, transaction, this._hostParent, this._hostContainerInfo, this._processChildContext(context));
        
-                 // For methods which are defined more than once, call the existing
-                 // methods before calling the new property, merging if appropriate.
-                 if (specPolicy === SpecPolicy.DEFINE_MANY_MERGED) {
-                   proto[name] = createMergedResultFunction(proto[name], property);
-                 } else if (specPolicy === SpecPolicy.DEFINE_MANY) {
-                   proto[name] = createChainedFunction(proto[name], property);
-                 }
-               } else {
-                 proto[name] = property;
-                 if (process.env.NODE_ENV !== 'production') {
-                   // Add verbose displayName to the function, which helps when looking
-                   // at profiling tools.
-                   if (typeof property === 'function' && spec.displayName) {
-                     proto[name].displayName = spec.displayName + '_' + name;
-                   }
-                 }
+             if (process.env.NODE_ENV !== 'production') {
+               if (this._debugID !== 0) {
+                 ReactInstrumentation.debugTool.onSetChildren(this._debugID, child._debugID !== 0 ? [child._debugID] : []);
                }
              }
-           }
-         }
-       }
        
-       function mixStaticSpecIntoComponent(Constructor, statics) {
-         if (!statics) {
-           return;
-         }
-         for (var name in statics) {
-           var property = statics[name];
-           if (!statics.hasOwnProperty(name)) {
-             continue;
+             this._replaceNodeWithMarkup(oldHostNode, nextMarkup, prevComponentInstance);
            }
+         },
        
-           var isReserved = (name in RESERVED_SPEC_KEYS);
-           !!isReserved ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You are attempting to define a reserved ' + 'property, `%s`, that shouldn\'t be on the "statics" key. Define it ' + 'as an instance property instead; it will still be accessible on the ' + 'constructor.', name) : invariant(false) : undefined;
-       
-           var isInherited = (name in Constructor);
-           !!isInherited ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You are attempting to define ' + '`%s` on your component more than once. This conflict may be ' + 'due to a mixin.', name) : invariant(false) : undefined;
-           Constructor[name] = property;
-         }
-       }
-       
-       /**
-        * Merge two objects, but throw if both contain the same key.
-        *
-        * @param {object} one The first object, which is mutated.
-        * @param {object} two The second object
-        * @return {object} one after it has been mutated to contain everything in two.
-        */
-       function mergeIntoWithNoDuplicateKeys(one, two) {
-         !(one && two && typeof one === 'object' && typeof two === 'object') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'mergeIntoWithNoDuplicateKeys(): Cannot merge non-objects.') : invariant(false) : undefined;
+         /**
+          * Overridden in shallow rendering.
+          *
+          * @protected
+          */
+         _replaceNodeWithMarkup: function (oldHostNode, nextMarkup, prevInstance) {
+           ReactComponentEnvironment.replaceNodeWithMarkup(oldHostNode, nextMarkup, prevInstance);
+         },
        
-         for (var key in two) {
-           if (two.hasOwnProperty(key)) {
-             !(one[key] === undefined) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'mergeIntoWithNoDuplicateKeys(): ' + 'Tried to merge two objects with the same key: `%s`. This conflict ' + 'may be due to a mixin; in particular, this may be caused by two ' + 'getInitialState() or getDefaultProps() methods returning objects ' + 'with clashing keys.', key) : invariant(false) : undefined;
-             one[key] = two[key];
-           }
-         }
-         return one;
-       }
+         /**
+          * @protected
+          */
+         _renderValidatedComponentWithoutOwnerOrContext: function () {
+           var inst = this._instance;
        
-       /**
-        * Creates a function that invokes two functions and merges their return values.
-        *
-        * @param {function} one Function to invoke first.
-        * @param {function} two Function to invoke second.
-        * @return {function} Function that invokes the two argument functions.
-        * @private
-        */
-       function createMergedResultFunction(one, two) {
-         return function mergedResult() {
-           var a = one.apply(this, arguments);
-           var b = two.apply(this, arguments);
-           if (a == null) {
-             return b;
-           } else if (b == null) {
-             return a;
+           if (process.env.NODE_ENV !== 'production') {
+             if (this._debugID !== 0) {
+               ReactInstrumentation.debugTool.onBeginLifeCycleTimer(this._debugID, 'render');
+             }
            }
-           var c = {};
-           mergeIntoWithNoDuplicateKeys(c, a);
-           mergeIntoWithNoDuplicateKeys(c, b);
-           return c;
-         };
-       }
-       
-       /**
-        * Creates a function that invokes two functions and ignores their return vales.
-        *
-        * @param {function} one Function to invoke first.
-        * @param {function} two Function to invoke second.
-        * @return {function} Function that invokes the two argument functions.
-        * @private
-        */
-       function createChainedFunction(one, two) {
-         return function chainedFunction() {
-           one.apply(this, arguments);
-           two.apply(this, arguments);
-         };
-       }
-       
-       /**
-        * Binds a method to the component.
-        *
-        * @param {object} component Component whose method is going to be bound.
-        * @param {function} method Method to be bound.
-        * @return {function} The bound method.
-        */
-       function bindAutoBindMethod(component, method) {
-         var boundMethod = method.bind(component);
-         if (process.env.NODE_ENV !== 'production') {
-           boundMethod.__reactBoundContext = component;
-           boundMethod.__reactBoundMethod = method;
-           boundMethod.__reactBoundArguments = null;
-           var componentName = component.constructor.displayName;
-           var _bind = boundMethod.bind;
-           /* eslint-disable block-scoped-var, no-undef */
-           boundMethod.bind = function (newThis) {
-             for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
-               args[_key - 1] = arguments[_key];
+           var renderedComponent = inst.render();
+           if (process.env.NODE_ENV !== 'production') {
+             if (this._debugID !== 0) {
+               ReactInstrumentation.debugTool.onEndLifeCycleTimer(this._debugID, 'render');
              }
+           }
        
-             // User is trying to bind() an autobound method; we effectively will
-             // ignore the value of "this" that the user is trying to use, so
-             // let's warn.
-             if (newThis !== component && newThis !== null) {
-               process.env.NODE_ENV !== 'production' ? warning(false, 'bind(): React component methods may only be bound to the ' + 'component instance. See %s', componentName) : undefined;
-             } else if (!args.length) {
-               process.env.NODE_ENV !== 'production' ? warning(false, 'bind(): You are binding a component method to the component. ' + 'React does this for you automatically in a high-performance ' + 'way, so you can safely remove this call. See %s', componentName) : undefined;
-               return boundMethod;
+           if (process.env.NODE_ENV !== 'production') {
+             // We allow auto-mocks to proceed as if they're returning null.
+             if (renderedComponent === undefined && inst.render._isMockFunction) {
+               // This is probably bad practice. Consider warning here and
+               // deprecating this convenience.
+               renderedComponent = null;
              }
-             var reboundMethod = _bind.apply(boundMethod, arguments);
-             reboundMethod.__reactBoundContext = component;
-             reboundMethod.__reactBoundMethod = method;
-             reboundMethod.__reactBoundArguments = args;
-             return reboundMethod;
-             /* eslint-enable */
-           };
-         }
-         return boundMethod;
-       }
-       
-       /**
-        * Binds all auto-bound methods in a component.
-        *
-        * @param {object} component Component whose method is going to be bound.
-        */
-       function bindAutoBindMethods(component) {
-         for (var autoBindKey in component.__reactAutoBindMap) {
-           if (component.__reactAutoBindMap.hasOwnProperty(autoBindKey)) {
-             var method = component.__reactAutoBindMap[autoBindKey];
-             component[autoBindKey] = bindAutoBindMethod(component, method);
            }
-         }
-       }
        
-       /**
-        * Add more to the ReactClass base class. These are all legacy features and
-        * therefore not already part of the modern ReactComponent.
-        */
-       var ReactClassMixin = {
+           return renderedComponent;
+         },
        
          /**
-          * TODO: This will be deprecated because state should always keep a consistent
-          * type signature and the only use case for this, is to avoid that.
+          * @private
           */
-         replaceState: function (newState, callback) {
-           this.updater.enqueueReplaceState(this, newState);
-           if (callback) {
-             this.updater.enqueueCallback(this, callback);
+         _renderValidatedComponent: function () {
+           var renderedComponent;
+           if (process.env.NODE_ENV !== 'production' || this._compositeType !== CompositeTypes.StatelessFunctional) {
+             ReactCurrentOwner.current = this;
+             try {
+               renderedComponent = this._renderValidatedComponentWithoutOwnerOrContext();
+             } finally {
+               ReactCurrentOwner.current = null;
+             }
+           } else {
+             renderedComponent = this._renderValidatedComponentWithoutOwnerOrContext();
            }
+           !(
+           // TODO: An `isValidNode` function would probably be more appropriate
+           renderedComponent === null || renderedComponent === false || ReactElement.isValidElement(renderedComponent)) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.render(): A valid React element (or null) must be returned. You may have returned undefined, an array or some other invalid object.', this.getName() || 'ReactCompositeComponent') : _prodInvariant('109', this.getName() || 'ReactCompositeComponent') : void 0;
+       
+           return renderedComponent;
          },
        
          /**
-          * Checks whether or not this composite component is mounted.
-          * @return {boolean} True if mounted, false otherwise.
-          * @protected
+          * Lazily allocates the refs object and stores `component` as `ref`.
+          *
+          * @param {string} ref Reference name.
+          * @param {component} component Component to store as `ref`.
           * @final
+          * @private
           */
-         isMounted: function () {
-           return this.updater.isMounted(this);
+         attachRef: function (ref, component) {
+           var inst = this.getPublicInstance();
+           !(inst != null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Stateless function components cannot have refs.') : _prodInvariant('110') : void 0;
+           var publicComponentInstance = component.getPublicInstance();
+           if (process.env.NODE_ENV !== 'production') {
+             var componentName = component && component.getName ? component.getName() : 'a component';
+             process.env.NODE_ENV !== 'production' ? warning(publicComponentInstance != null, 'Stateless function components cannot be given refs ' + '(See ref "%s" in %s created by %s). ' + 'Attempts to access this ref will fail.', ref, componentName, this.getName()) : void 0;
+           }
+           var refs = inst.refs === emptyObject ? inst.refs = {} : inst.refs;
+           refs[ref] = publicComponentInstance;
          },
        
          /**
-          * Sets a subset of the props.
+          * Detaches a reference name.
           *
-          * @param {object} partialProps Subset of the next props.
-          * @param {?function} callback Called after props are updated.
+          * @param {string} ref Name to dereference.
           * @final
-          * @public
-          * @deprecated
+          * @private
           */
-         setProps: function (partialProps, callback) {
-           if (process.env.NODE_ENV !== 'production') {
-             warnSetProps();
-           }
-           this.updater.enqueueSetProps(this, partialProps);
-           if (callback) {
-             this.updater.enqueueCallback(this, callback);
-           }
+         detachRef: function (ref) {
+           var refs = this.getPublicInstance().refs;
+           delete refs[ref];
+         },
+       
+         /**
+          * Get a text description of the component that can be used to identify it
+          * in error messages.
+          * @return {string} The name or null.
+          * @internal
+          */
+         getName: function () {
+           var type = this._currentElement.type;
+           var constructor = this._instance && this._instance.constructor;
+           return type.displayName || constructor && constructor.displayName || type.name || constructor && constructor.name || null;
          },
        
          /**
-          * Replace all the props.
+          * Get the publicly accessible representation of this component - i.e. what
+          * is exposed by refs and returned by render. Can be null for stateless
+          * components.
           *
-          * @param {object} newProps Subset of the next props.
-          * @param {?function} callback Called after props are updated.
-          * @final
-          * @public
-          * @deprecated
+          * @return {ReactComponent} the public component instance.
+          * @internal
           */
-         replaceProps: function (newProps, callback) {
-           if (process.env.NODE_ENV !== 'production') {
-             warnSetProps();
-           }
-           this.updater.enqueueReplaceProps(this, newProps);
-           if (callback) {
-             this.updater.enqueueCallback(this, callback);
+         getPublicInstance: function () {
+           var inst = this._instance;
+           if (this._compositeType === CompositeTypes.StatelessFunctional) {
+             return null;
            }
-         }
+           return inst;
+         },
+       
+         // Stub
+         _instantiateReactComponent: null
+       
        };
        
-       var ReactClassComponent = function () {};
-       assign(ReactClassComponent.prototype, ReactComponent.prototype, ReactClassMixin);
+       var ReactCompositeComponent = {
        
-       /**
-        * Module for creating composite components.
+         Mixin: ReactCompositeComponentMixin
+       
+       };
+       
+       module.exports = ReactCompositeComponent;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
+
+/***/ },
+/* 130 */
+/***/ function(module, exports, __webpack_require__) {
+
+       /* WEBPACK VAR INJECTION */(function(process) {/**
+        * Copyright 2013-present, Facebook, Inc.
+        * All rights reserved.
         *
-        * @class ReactClass
+        * 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.
+        *
+        * @providesModule ReactNodeTypes
+        * 
         */
-       var ReactClass = {
        
-         /**
-          * Creates a composite component class given a class specification.
-          *
-          * @param {object} spec Class specification (which must define `render`).
-          * @return {function} Component constructor function.
-          * @public
-          */
-         createClass: function (spec) {
-           var Constructor = function (props, context, updater) {
-             // This constructor is overridden by mocks. The argument is used
-             // by mocks to assert on what gets mounted.
+       'use strict';
        
-             if (process.env.NODE_ENV !== 'production') {
-               process.env.NODE_ENV !== 'production' ? warning(this instanceof Constructor, 'Something is calling a React component directly. Use a factory or ' + 'JSX instead. See: https://fb.me/react-legacyfactory') : undefined;
-             }
+       var _prodInvariant = __webpack_require__(9);
        
-             // Wire up auto-binding
-             if (this.__reactAutoBindMap) {
-               bindAutoBindMethods(this);
-             }
+       var ReactElement = __webpack_require__(11);
        
-             this.props = props;
-             this.context = context;
-             this.refs = emptyObject;
-             this.updater = updater || ReactNoopUpdateQueue;
+       var invariant = __webpack_require__(10);
        
-             this.state = null;
+       var ReactNodeTypes = {
+         HOST: 0,
+         COMPOSITE: 1,
+         EMPTY: 2,
        
-             // ReactClasses doesn't have constructors. Instead, they use the
-             // getInitialState and componentWillMount methods for initialization.
+         getType: function (node) {
+           if (node === null || node === false) {
+             return ReactNodeTypes.EMPTY;
+           } else if (ReactElement.isValidElement(node)) {
+             if (typeof node.type === 'function') {
+               return ReactNodeTypes.COMPOSITE;
+             } else {
+               return ReactNodeTypes.HOST;
+             }
+           }
+            true ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Unexpected node: %s', node) : _prodInvariant('26', node) : void 0;
+         }
+       };
        
-             var initialState = this.getInitialState ? this.getInitialState() : null;
-             if (process.env.NODE_ENV !== 'production') {
-               // We allow auto-mocks to proceed as if they're returning null.
-               if (typeof initialState === 'undefined' && this.getInitialState._isMockFunction) {
-                 // This is probably bad practice. Consider warning here and
-                 // deprecating this convenience.
-                 initialState = null;
-               }
-             }
-             !(typeof initialState === 'object' && !Array.isArray(initialState)) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.getInitialState(): must return an object or null', Constructor.displayName || 'ReactCompositeComponent') : invariant(false) : undefined;
-       
-             this.state = initialState;
-           };
-           Constructor.prototype = new ReactClassComponent();
-           Constructor.prototype.constructor = Constructor;
+       module.exports = ReactNodeTypes;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
+
+/***/ },
+/* 131 */
+/***/ function(module, exports) {
+
+       /**
+        * Copyright (c) 2013-present, 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.
+        *
+        * @typechecks
+        * 
+        */
        
-           injectedMixins.forEach(mixSpecIntoComponent.bind(null, Constructor));
+       /*eslint-disable no-self-compare */
        
-           mixSpecIntoComponent(Constructor, spec);
+       'use strict';
        
-           // Initialize the defaultProps property after all mixins have been merged.
-           if (Constructor.getDefaultProps) {
-             Constructor.defaultProps = Constructor.getDefaultProps();
-           }
+       var hasOwnProperty = Object.prototype.hasOwnProperty;
        
-           if (process.env.NODE_ENV !== 'production') {
-             // This is a tag to indicate that the use of these method names is ok,
-             // since it's used with createClass. If it's not, then it's likely a
-             // mistake so we'll warn you to use the static property, property
-             // initializer or constructor respectively.
-             if (Constructor.getDefaultProps) {
-               Constructor.getDefaultProps.isReactClassApproved = {};
-             }
-             if (Constructor.prototype.getInitialState) {
-               Constructor.prototype.getInitialState.isReactClassApproved = {};
-             }
-           }
+       /**
+        * inlined Object.is polyfill to avoid requiring consumers ship their own
+        * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is
+        */
+       function is(x, y) {
+         // SameValue algorithm
+         if (x === y) {
+           // Steps 1-5, 7-10
+           // Steps 6.b-6.e: +0 != -0
+           return x !== 0 || 1 / x === 1 / y;
+         } else {
+           // Step 6.a: NaN == NaN
+           return x !== x && y !== y;
+         }
+       }
        
-           !Constructor.prototype.render ? process.env.NODE_ENV !== 'production' ? invariant(false, 'createClass(...): Class specification must implement a `render` method.') : invariant(false) : undefined;
+       /**
+        * Performs equality by iterating through keys on an object and returning false
+        * when any key has values which are not strictly equal between the arguments.
+        * Returns true when the values of all keys are strictly equal.
+        */
+       function shallowEqual(objA, objB) {
+         if (is(objA, objB)) {
+           return true;
+         }
        
-           if (process.env.NODE_ENV !== 'production') {
-             process.env.NODE_ENV !== 'production' ? warning(!Constructor.prototype.componentShouldUpdate, '%s has a method called ' + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 'The name is phrased as a question because the function is ' + 'expected to return a value.', spec.displayName || 'A component') : undefined;
-             process.env.NODE_ENV !== 'production' ? warning(!Constructor.prototype.componentWillRecieveProps, '%s has a method called ' + 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?', spec.displayName || 'A component') : undefined;
-           }
+         if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {
+           return false;
+         }
        
-           // Reduce time spent doing lookups by setting these on the prototype.
-           for (var methodName in ReactClassInterface) {
-             if (!Constructor.prototype[methodName]) {
-               Constructor.prototype[methodName] = null;
-             }
-           }
+         var keysA = Object.keys(objA);
+         var keysB = Object.keys(objB);
        
-           return Constructor;
-         },
+         if (keysA.length !== keysB.length) {
+           return false;
+         }
        
-         injection: {
-           injectMixin: function (mixin) {
-             injectedMixins.push(mixin);
+         // Test for A's keys different from B.
+         for (var i = 0; i < keysA.length; i++) {
+           if (!hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {
+             return false;
            }
          }
        
-       };
+         return true;
+       }
        
-       module.exports = ReactClass;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
+       module.exports = shallowEqual;
 
 /***/ },
-/* 125 */
-/***/ function(module, exports, __webpack_require__) {
+/* 132 */
+/***/ function(module, exports) {
 
-       /* WEBPACK VAR INJECTION */(function(process) {/**
-        * Copyright 2013-2015, Facebook, Inc.
+       /**
+        * Copyright 2013-present, 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.
         *
-        * @providesModule ReactComponent
+        * @providesModule shouldUpdateReactComponent
         */
        
        'use strict';
        
-       var ReactNoopUpdateQueue = __webpack_require__(126);
-       
-       var canDefineProperty = __webpack_require__(45);
-       var emptyObject = __webpack_require__(60);
-       var invariant = __webpack_require__(15);
-       var warning = __webpack_require__(27);
-       
-       /**
-        * Base class helpers for the updating state of a component.
-        */
-       function ReactComponent(props, context, updater) {
-         this.props = props;
-         this.context = context;
-         this.refs = emptyObject;
-         // We initialize the default updater but the real one gets injected by the
-         // renderer.
-         this.updater = updater || ReactNoopUpdateQueue;
-       }
-       
-       ReactComponent.prototype.isReactComponent = {};
-       
        /**
-        * Sets a subset of the state. Always use this to mutate
-        * state. You should treat `this.state` as immutable.
-        *
-        * There is no guarantee that `this.state` will be immediately updated, so
-        * accessing `this.state` after calling this method may return the old value.
-        *
-        * There is no guarantee that calls to `setState` will run synchronously,
-        * as they may eventually be batched together.  You can provide an optional
-        * callback that will be executed when the call to setState is actually
-        * completed.
-        *
-        * When a function is provided to setState, it will be called at some point in
-        * the future (not synchronously). It will be called with the up to date
-        * component arguments (state, props, context). These values can be different
-        * from this.* because your function may be called after receiveProps but before
-        * shouldComponentUpdate, and this new state, props, and context will not yet be
-        * assigned to this.
+        * Given a `prevElement` and `nextElement`, determines if the existing
+        * instance should be updated as opposed to being destroyed or replaced by a new
+        * instance. Both arguments are elements. This ensures that this logic can
+        * operate on stateless trees without any backing instance.
         *
-        * @param {object|function} partialState Next partial state or function to
-        *        produce next partial state to be merged with current state.
-        * @param {?function} callback Called after state is updated.
-        * @final
+        * @param {?object} prevElement
+        * @param {?object} nextElement
+        * @return {boolean} True if the existing instance should be updated.
         * @protected
         */
-       ReactComponent.prototype.setState = function (partialState, callback) {
-         !(typeof partialState === 'object' || typeof partialState === 'function' || partialState == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'setState(...): takes an object of state variables to update or a ' + 'function which returns an object of state variables.') : invariant(false) : undefined;
-         if (process.env.NODE_ENV !== 'production') {
-           process.env.NODE_ENV !== 'production' ? warning(partialState != null, 'setState(...): You passed an undefined or null state object; ' + 'instead, use forceUpdate().') : undefined;
+       
+       function shouldUpdateReactComponent(prevElement, nextElement) {
+         var prevEmpty = prevElement === null || prevElement === false;
+         var nextEmpty = nextElement === null || nextElement === false;
+         if (prevEmpty || nextEmpty) {
+           return prevEmpty === nextEmpty;
          }
-         this.updater.enqueueSetState(this, partialState);
-         if (callback) {
-           this.updater.enqueueCallback(this, callback);
+       
+         var prevType = typeof prevElement;
+         var nextType = typeof nextElement;
+         if (prevType === 'string' || prevType === 'number') {
+           return nextType === 'string' || nextType === 'number';
+         } else {
+           return nextType === 'object' && prevElement.type === nextElement.type && prevElement.key === nextElement.key;
          }
-       };
+       }
        
+       module.exports = shouldUpdateReactComponent;
+
+/***/ },
+/* 133 */
+/***/ function(module, exports) {
+
        /**
-        * Forces an update. This should only be invoked when it is known with
-        * certainty that we are **not** in a DOM transaction.
-        *
-        * You may want to call this when you know that some deeper aspect of the
-        * component's state has changed but `setState` was not called.
+        * Copyright 2014-present, Facebook, Inc.
+        * All rights reserved.
         *
-        * This will not invoke `shouldComponentUpdate`, but it will invoke
-        * `componentWillUpdate` and `componentDidUpdate`.
+        * 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.
         *
-        * @param {?function} callback Called after update is complete.
-        * @final
-        * @protected
+        * @providesModule ReactEmptyComponent
         */
-       ReactComponent.prototype.forceUpdate = function (callback) {
-         this.updater.enqueueForceUpdate(this);
-         if (callback) {
-           this.updater.enqueueCallback(this, callback);
+       
+       'use strict';
+       
+       var emptyComponentFactory;
+       
+       var ReactEmptyComponentInjection = {
+         injectEmptyComponentFactory: function (factory) {
+           emptyComponentFactory = factory;
          }
        };
        
-       /**
-        * Deprecated APIs. These APIs used to exist on classic React classes but since
-        * we would like to deprecate them, we're not going to move them over to this
-        * modern base class. Instead, we define a getter that warns if it's accessed.
-        */
-       if (process.env.NODE_ENV !== 'production') {
-         var deprecatedAPIs = {
-           getDOMNode: ['getDOMNode', 'Use ReactDOM.findDOMNode(component) instead.'],
-           isMounted: ['isMounted', 'Instead, make sure to clean up subscriptions and pending requests in ' + 'componentWillUnmount to prevent memory leaks.'],
-           replaceProps: ['replaceProps', 'Instead, call render again at the top level.'],
-           replaceState: ['replaceState', 'Refactor your code to use setState instead (see ' + 'https://github.com/facebook/react/issues/3236).'],
-           setProps: ['setProps', 'Instead, call render again at the top level.']
-         };
-         var defineDeprecationWarning = function (methodName, info) {
-           if (canDefineProperty) {
-             Object.defineProperty(ReactComponent.prototype, methodName, {
-               get: function () {
-                 process.env.NODE_ENV !== 'production' ? warning(false, '%s(...) is deprecated in plain JavaScript React classes. %s', info[0], info[1]) : undefined;
-                 return undefined;
-               }
-             });
-           }
-         };
-         for (var fnName in deprecatedAPIs) {
-           if (deprecatedAPIs.hasOwnProperty(fnName)) {
-             defineDeprecationWarning(fnName, deprecatedAPIs[fnName]);
-           }
+       var ReactEmptyComponent = {
+         create: function (instantiate) {
+           return emptyComponentFactory(instantiate);
          }
-       }
+       };
        
-       module.exports = ReactComponent;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
+       ReactEmptyComponent.injection = ReactEmptyComponentInjection;
+       
+       module.exports = ReactEmptyComponent;
 
 /***/ },
-/* 126 */
+/* 134 */
 /***/ function(module, exports, __webpack_require__) {
 
        /* WEBPACK VAR INJECTION */(function(process) {/**
-        * Copyright 2015, Facebook, Inc.
+        * Copyright 2014-present, 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.
         *
-        * @providesModule ReactNoopUpdateQueue
+        * @providesModule ReactHostComponent
         */
        
        'use strict';
        
-       var warning = __webpack_require__(27);
+       var _prodInvariant = __webpack_require__(9),
+           _assign = __webpack_require__(6);
        
-       function warnTDZ(publicInstance, callerName) {
-         if (process.env.NODE_ENV !== 'production') {
-           process.env.NODE_ENV !== 'production' ? warning(false, '%s(...): Can only update a mounted or mounting component. ' + 'This usually means you called %s() on an unmounted component. ' + 'This is a no-op. Please check the code for the %s component.', callerName, callerName, publicInstance.constructor && publicInstance.constructor.displayName || '') : undefined;
+       var invariant = __webpack_require__(10);
+       
+       var genericComponentClass = null;
+       // This registry keeps track of wrapper classes around host tags.
+       var tagToComponentClass = {};
+       var textComponentClass = null;
+       
+       var ReactHostComponentInjection = {
+         // This accepts a class that receives the tag string. This is a catch all
+         // that can render any kind of tag.
+         injectGenericComponentClass: function (componentClass) {
+           genericComponentClass = componentClass;
+         },
+         // This accepts a text component class that takes the text string to be
+         // rendered as props.
+         injectTextComponentClass: function (componentClass) {
+           textComponentClass = componentClass;
+         },
+         // This accepts a keyed object with classes as values. Each key represents a
+         // tag. That particular tag will use this class instead of the generic one.
+         injectComponentClasses: function (componentClasses) {
+           _assign(tagToComponentClass, componentClasses);
          }
+       };
+       
+       /**
+        * Get a host internal component class for a specific tag.
+        *
+        * @param {ReactElement} element The element to create.
+        * @return {function} The internal class constructor function.
+        */
+       function createInternalComponent(element) {
+         !genericComponentClass ? process.env.NODE_ENV !== 'production' ? invariant(false, 'There is no registered component for the tag %s', element.type) : _prodInvariant('111', element.type) : void 0;
+         return new genericComponentClass(element);
        }
        
        /**
-        * This is the abstract API for an update queue.
+        * @param {ReactText} text
+        * @return {ReactComponent}
         */
-       var ReactNoopUpdateQueue = {
+       function createInstanceForText(text) {
+         return new textComponentClass(text);
+       }
        
-         /**
-          * Checks whether or not this composite component is mounted.
-          * @param {ReactClass} publicInstance The instance we want to test.
-          * @return {boolean} True if mounted, false otherwise.
-          * @protected
-          * @final
-          */
-         isMounted: function (publicInstance) {
-           return false;
-         },
-       
-         /**
-          * Enqueue a callback that will be executed after all the pending updates
-          * have processed.
-          *
-          * @param {ReactClass} publicInstance The instance to use as `this` context.
-          * @param {?function} callback Called after state is updated.
-          * @internal
-          */
-         enqueueCallback: function (publicInstance, callback) {},
-       
-         /**
-          * Forces an update. This should only be invoked when it is known with
-          * certainty that we are **not** in a DOM transaction.
-          *
-          * You may want to call this when you know that some deeper aspect of the
-          * component's state has changed but `setState` was not called.
-          *
-          * This will not invoke `shouldComponentUpdate`, but it will invoke
-          * `componentWillUpdate` and `componentDidUpdate`.
-          *
-          * @param {ReactClass} publicInstance The instance that should rerender.
-          * @internal
-          */
-         enqueueForceUpdate: function (publicInstance) {
-           warnTDZ(publicInstance, 'forceUpdate');
-         },
-       
-         /**
-          * Replaces all of the state. Always use this or `setState` to mutate state.
-          * You should treat `this.state` as immutable.
-          *
-          * There is no guarantee that `this.state` will be immediately updated, so
-          * accessing `this.state` after calling this method may return the old value.
-          *
-          * @param {ReactClass} publicInstance The instance that should rerender.
-          * @param {object} completeState Next state.
-          * @internal
-          */
-         enqueueReplaceState: function (publicInstance, completeState) {
-           warnTDZ(publicInstance, 'replaceState');
-         },
-       
-         /**
-          * Sets a subset of the state. This only exists because _pendingState is
-          * internal. This provides a merging strategy that is not available to deep
-          * properties which is confusing. TODO: Expose pendingState or don't use it
-          * during the merge.
-          *
-          * @param {ReactClass} publicInstance The instance that should rerender.
-          * @param {object} partialState Next partial state to be merged with state.
-          * @internal
-          */
-         enqueueSetState: function (publicInstance, partialState) {
-           warnTDZ(publicInstance, 'setState');
-         },
-       
-         /**
-          * Sets a subset of the props.
-          *
-          * @param {ReactClass} publicInstance The instance that should rerender.
-          * @param {object} partialProps Subset of the next props.
-          * @internal
-          */
-         enqueueSetProps: function (publicInstance, partialProps) {
-           warnTDZ(publicInstance, 'setProps');
-         },
-       
-         /**
-          * Replaces all of the props.
-          *
-          * @param {ReactClass} publicInstance The instance that should rerender.
-          * @param {object} props New props.
-          * @internal
-          */
-         enqueueReplaceProps: function (publicInstance, props) {
-           warnTDZ(publicInstance, 'replaceProps');
-         }
+       /**
+        * @param {ReactComponent} component
+        * @return {boolean}
+        */
+       function isTextComponent(component) {
+         return component instanceof textComponentClass;
+       }
        
+       var ReactHostComponent = {
+         createInternalComponent: createInternalComponent,
+         createInstanceForText: createInstanceForText,
+         isTextComponent: isTextComponent,
+         injection: ReactHostComponentInjection
        };
        
-       module.exports = ReactNoopUpdateQueue;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
+       module.exports = ReactHostComponent;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
 
 /***/ },
-/* 127 */
+/* 135 */
 /***/ function(module, exports, __webpack_require__) {
 
-       /**
-        * Copyright 2013-2015, Facebook, Inc.
+       /* WEBPACK VAR INJECTION */(function(process) {/**
+        * Copyright 2013-present, 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.
         *
-        * @providesModule ReactReconcileTransaction
-        * @typechecks static-only
+        * @providesModule flattenChildren
+        * 
         */
        
        'use strict';
        
-       var CallbackQueue = __webpack_require__(57);
-       var PooledClass = __webpack_require__(58);
-       var ReactBrowserEventEmitter = __webpack_require__(31);
-       var ReactDOMFeatureFlags = __webpack_require__(43);
-       var ReactInputSelection = __webpack_require__(128);
-       var Transaction = __webpack_require__(59);
+       var KeyEscapeUtils = __webpack_require__(18);
+       var traverseAllChildren = __webpack_require__(16);
+       var warning = __webpack_require__(13);
        
-       var assign = __webpack_require__(41);
+       var ReactComponentTreeDevtool;
+       
+       if (typeof process !== 'undefined' && process.env && process.env.NODE_ENV === 'test') {
+         // Temporary hack.
+         // Inline requires don't work well with Jest:
+         // https://github.com/facebook/react/issues/7240
+         // Remove the inline requires when we don't need them anymore:
+         // https://github.com/facebook/react/pull/7178
+         ReactComponentTreeDevtool = __webpack_require__(31);
+       }
        
        /**
-        * Ensures that, when possible, the selection range (currently selected text
-        * input) is not disturbed by performing the transaction.
+        * @param {function} traverseContext Context passed through traversal.
+        * @param {?ReactComponent} child React child component.
+        * @param {!string} name String name of key path to child.
+        * @param {number=} selfDebugID Optional debugID of the current internal instance.
         */
-       var SELECTION_RESTORATION = {
-         /**
-          * @return {Selection} Selection information.
-          */
-         initialize: ReactInputSelection.getSelectionInformation,
-         /**
-          * @param {Selection} sel Selection information returned from `initialize`.
-          */
-         close: ReactInputSelection.restoreSelection
-       };
+       function flattenSingleChildIntoContext(traverseContext, child, name, selfDebugID) {
+         // We found a component instance.
+         if (traverseContext && typeof traverseContext === 'object') {
+           var result = traverseContext;
+           var keyUnique = result[name] === undefined;
+           if (process.env.NODE_ENV !== 'production') {
+             if (!ReactComponentTreeDevtool) {
+               ReactComponentTreeDevtool = __webpack_require__(31);
+             }
+             process.env.NODE_ENV !== 'production' ? warning(keyUnique, 'flattenChildren(...): Encountered two children with the same key, ' + '`%s`. Child keys must be unique; when two children share a key, only ' + 'the first child will be used.%s', KeyEscapeUtils.unescape(name), ReactComponentTreeDevtool.getStackAddendumByID(selfDebugID)) : void 0;
+           }
+           if (keyUnique && child != null) {
+             result[name] = child;
+           }
+         }
+       }
        
        /**
-        * Suppresses events (blur/focus) that could be inadvertently dispatched due to
-        * high level DOM manipulations (like temporarily removing a text input from the
-        * DOM).
+        * Flattens children that are typically specified as `props.children`. Any null
+        * children will not be included in the resulting object.
+        * @return {!object} flattened children keyed by name.
         */
-       var EVENT_SUPPRESSION = {
-         /**
-          * @return {boolean} The enabled status of `ReactBrowserEventEmitter` before
-          * the reconciliation.
-          */
-         initialize: function () {
-           var currentlyEnabled = ReactBrowserEventEmitter.isEnabled();
-           ReactBrowserEventEmitter.setEnabled(false);
-           return currentlyEnabled;
-         },
+       function flattenChildren(children, selfDebugID) {
+         if (children == null) {
+           return children;
+         }
+         var result = {};
        
-         /**
-          * @param {boolean} previouslyEnabled Enabled status of
-          *   `ReactBrowserEventEmitter` before the reconciliation occurred. `close`
-          *   restores the previous value.
-          */
-         close: function (previouslyEnabled) {
-           ReactBrowserEventEmitter.setEnabled(previouslyEnabled);
+         if (process.env.NODE_ENV !== 'production') {
+           traverseAllChildren(children, function (traverseContext, child, name) {
+             return flattenSingleChildIntoContext(traverseContext, child, name, selfDebugID);
+           }, result);
+         } else {
+           traverseAllChildren(children, flattenSingleChildIntoContext, result);
          }
-       };
+         return result;
+       }
        
-       /**
-        * Provides a queue for collecting `componentDidMount` and
-        * `componentDidUpdate` callbacks during the the transaction.
+       module.exports = flattenChildren;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
+
+/***/ },
+/* 136 */
+/***/ function(module, exports, __webpack_require__) {
+
+       /* WEBPACK VAR INJECTION */(function(process) {/**
+        * Copyright 2014-present, 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.
+        *
+        * @providesModule ReactServerRenderingTransaction
         */
-       var ON_DOM_READY_QUEUEING = {
-         /**
-          * Initializes the internal `onDOMReady` queue.
-          */
-         initialize: function () {
-           this.reactMountReady.reset();
-         },
        
-         /**
-          * After DOM is flushed, invoke all registered `onDOMReady` callbacks.
-          */
-         close: function () {
-           this.reactMountReady.notifyAll();
-         }
-       };
+       'use strict';
+       
+       var _assign = __webpack_require__(6);
+       
+       var PooledClass = __webpack_require__(8);
+       var Transaction = __webpack_require__(72);
+       var ReactInstrumentation = __webpack_require__(65);
+       var ReactServerUpdateQueue = __webpack_require__(137);
        
        /**
         * Executed within the scope of the `Transaction` instance. Consider these as
         * being member methods, but with an implied ordering while being isolated from
         * each other.
         */
-       var TRANSACTION_WRAPPERS = [SELECTION_RESTORATION, EVENT_SUPPRESSION, ON_DOM_READY_QUEUEING];
+       var TRANSACTION_WRAPPERS = [];
+       
+       if (process.env.NODE_ENV !== 'production') {
+         TRANSACTION_WRAPPERS.push({
+           initialize: ReactInstrumentation.debugTool.onBeginFlush,
+           close: ReactInstrumentation.debugTool.onEndFlush
+         });
+       }
+       
+       var noopCallbackQueue = {
+         enqueue: function () {}
+       };
        
        /**
-        * Currently:
-        * - The order that these are listed in the transaction is critical:
-        * - Suppresses events.
-        * - Restores selection range.
-        *
-        * Future:
-        * - Restore document/overflow scroll positions that were unintentionally
-        *   modified via DOM insertions above the top viewport boundary.
-        * - Implement/integrate with customized constraint based layout system and keep
-        *   track of which dimensions must be remeasured.
-        *
-        * @class ReactReconcileTransaction
+        * @class ReactServerRenderingTransaction
+        * @param {boolean} renderToStaticMarkup
         */
-       function ReactReconcileTransaction(forceHTML) {
+       function ReactServerRenderingTransaction(renderToStaticMarkup) {
          this.reinitializeTransaction();
-         // Only server-side rendering really needs this option (see
-         // `ReactServerRendering`), but server-side uses
-         // `ReactServerRenderingTransaction` instead. This option is here so that it's
-         // accessible and defaults to false when `ReactDOMComponent` and
-         // `ReactTextComponent` checks it in `mountComponent`.`
-         this.renderToStaticMarkup = false;
-         this.reactMountReady = CallbackQueue.getPooled(null);
-         this.useCreateElement = !forceHTML && ReactDOMFeatureFlags.useCreateElement;
+         this.renderToStaticMarkup = renderToStaticMarkup;
+         this.useCreateElement = false;
+         this.updateQueue = new ReactServerUpdateQueue(this);
        }
        
        var Mixin = {
           * @see Transaction
           * @abstract
           * @final
-          * @return {array<object>} List of operation wrap procedures.
-          *   TODO: convert to array<TransactionWrapper>
+          * @return {array} Empty list of operation wrap procedures.
           */
          getTransactionWrappers: function () {
            return TRANSACTION_WRAPPERS;
           * @return {object} The queue to collect `onDOMReady` callbacks with.
           */
          getReactMountReady: function () {
-           return this.reactMountReady;
+           return noopCallbackQueue;
+         },
+       
+         /**
+          * @return {object} The queue to collect React async events.
+          */
+         getUpdateQueue: function () {
+           return this.updateQueue;
          },
        
          /**
           * `PooledClass` looks for this, and will invoke this before allowing this
           * instance to be reused.
           */
-         destructor: function () {
-           CallbackQueue.release(this.reactMountReady);
-           this.reactMountReady = null;
-         }
+         destructor: function () {},
+       
+         checkpoint: function () {},
+       
+         rollback: function () {}
        };
        
-       assign(ReactReconcileTransaction.prototype, Transaction.Mixin, Mixin);
+       _assign(ReactServerRenderingTransaction.prototype, Transaction.Mixin, Mixin);
        
-       PooledClass.addPoolingTo(ReactReconcileTransaction);
+       PooledClass.addPoolingTo(ReactServerRenderingTransaction);
        
-       module.exports = ReactReconcileTransaction;
+       module.exports = ReactServerRenderingTransaction;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
 
 /***/ },
-/* 128 */
+/* 137 */
 /***/ function(module, exports, __webpack_require__) {
 
-       /**
-        * Copyright 2013-2015, Facebook, Inc.
+       /* WEBPACK VAR INJECTION */(function(process) {/**
+        * Copyright 2015-present, 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.
         *
-        * @providesModule ReactInputSelection
+        * @providesModule ReactServerUpdateQueue
+        * 
         */
        
        'use strict';
        
-       var ReactDOMSelection = __webpack_require__(129);
+       function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
        
-       var containsNode = __webpack_require__(61);
-       var focusNode = __webpack_require__(97);
-       var getActiveElement = __webpack_require__(131);
+       var ReactUpdateQueue = __webpack_require__(138);
+       var Transaction = __webpack_require__(72);
+       var warning = __webpack_require__(13);
        
-       function isInDocument(node) {
-         return containsNode(document.documentElement, node);
+       function warnNoop(publicInstance, callerName) {
+         if (process.env.NODE_ENV !== 'production') {
+           var constructor = publicInstance.constructor;
+           process.env.NODE_ENV !== 'production' ? warning(false, '%s(...): Can only update a mounting component. ' + 'This usually means you called %s() outside componentWillMount() on the server. ' + 'This is a no-op. Please check the code for the %s component.', callerName, callerName, constructor && (constructor.displayName || constructor.name) || 'ReactClass') : void 0;
+         }
        }
        
        /**
-        * @ReactInputSelection: React input selection module. Based on Selection.js,
-        * but modified to be suitable for react and has a couple of bug fixes (doesn't
-        * assume buttons have range selections allowed).
-        * Input selection module for React.
+        * This is the update queue used for server rendering.
+        * It delegates to ReactUpdateQueue while server rendering is in progress and
+        * switches to ReactNoopUpdateQueue after the transaction has completed.
+        * @class ReactServerUpdateQueue
+        * @param {Transaction} transaction
         */
-       var ReactInputSelection = {
        
-         hasSelectionCapabilities: function (elem) {
-           var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();
-           return nodeName && (nodeName === 'input' && elem.type === 'text' || nodeName === 'textarea' || elem.contentEditable === 'true');
-         },
+       var ReactServerUpdateQueue = function () {
+         /* :: transaction: Transaction; */
        
-         getSelectionInformation: function () {
-           var focusedElem = getActiveElement();
-           return {
-             focusedElem: focusedElem,
-             selectionRange: ReactInputSelection.hasSelectionCapabilities(focusedElem) ? ReactInputSelection.getSelection(focusedElem) : null
-           };
-         },
+         function ReactServerUpdateQueue(transaction) {
+           _classCallCheck(this, ReactServerUpdateQueue);
        
-         /**
-          * @restoreSelection: If any selection information was potentially lost,
-          * restore it. This is useful when performing operations that could remove dom
-          * nodes and place them back in, resulting in focus being lost.
+           this.transaction = transaction;
+         }
+       
+         /**
+          * Checks whether or not this composite component is mounted.
+          * @param {ReactClass} publicInstance The instance we want to test.
+          * @return {boolean} True if mounted, false otherwise.
+          * @protected
+          * @final
           */
-         restoreSelection: function (priorSelectionInformation) {
-           var curFocusedElem = getActiveElement();
-           var priorFocusedElem = priorSelectionInformation.focusedElem;
-           var priorSelectionRange = priorSelectionInformation.selectionRange;
-           if (curFocusedElem !== priorFocusedElem && isInDocument(priorFocusedElem)) {
-             if (ReactInputSelection.hasSelectionCapabilities(priorFocusedElem)) {
-               ReactInputSelection.setSelection(priorFocusedElem, priorSelectionRange);
-             }
-             focusNode(priorFocusedElem);
+       
+       
+         ReactServerUpdateQueue.prototype.isMounted = function isMounted(publicInstance) {
+           return false;
+         };
+       
+         /**
+          * Enqueue a callback that will be executed after all the pending updates
+          * have processed.
+          *
+          * @param {ReactClass} publicInstance The instance to use as `this` context.
+          * @param {?function} callback Called after state is updated.
+          * @internal
+          */
+       
+       
+         ReactServerUpdateQueue.prototype.enqueueCallback = function enqueueCallback(publicInstance, callback, callerName) {
+           if (this.transaction.isInTransaction()) {
+             ReactUpdateQueue.enqueueCallback(publicInstance, callback, callerName);
            }
-         },
+         };
        
          /**
-          * @getSelection: Gets the selection bounds of a focused textarea, input or
-          * contentEditable node.
-          * -@input: Look up selection bounds of this input
-          * -@return {start: selectionStart, end: selectionEnd}
+          * Forces an update. This should only be invoked when it is known with
+          * certainty that we are **not** in a DOM transaction.
+          *
+          * You may want to call this when you know that some deeper aspect of the
+          * component's state has changed but `setState` was not called.
+          *
+          * This will not invoke `shouldComponentUpdate`, but it will invoke
+          * `componentWillUpdate` and `componentDidUpdate`.
+          *
+          * @param {ReactClass} publicInstance The instance that should rerender.
+          * @internal
           */
-         getSelection: function (input) {
-           var selection;
        
-           if ('selectionStart' in input) {
-             // Modern browser with input or textarea.
-             selection = {
-               start: input.selectionStart,
-               end: input.selectionEnd
-             };
-           } else if (document.selection && (input.nodeName && input.nodeName.toLowerCase() === 'input')) {
-             // IE8 input.
-             var range = document.selection.createRange();
-             // There can only be one selection per document in IE, so it must
-             // be in our element.
-             if (range.parentElement() === input) {
-               selection = {
-                 start: -range.moveStart('character', -input.value.length),
-                 end: -range.moveEnd('character', -input.value.length)
-               };
-             }
+       
+         ReactServerUpdateQueue.prototype.enqueueForceUpdate = function enqueueForceUpdate(publicInstance) {
+           if (this.transaction.isInTransaction()) {
+             ReactUpdateQueue.enqueueForceUpdate(publicInstance);
            } else {
-             // Content editable or old IE textarea.
-             selection = ReactDOMSelection.getOffsets(input);
+             warnNoop(publicInstance, 'forceUpdate');
            }
-       
-           return selection || { start: 0, end: 0 };
-         },
+         };
        
          /**
-          * @setSelection: Sets the selection bounds of a textarea or input and focuses
-          * the input.
-          * -@input     Set selection bounds of this input or textarea
-          * -@offsets   Object of same form that is returned from get*
+          * Replaces all of the state. Always use this or `setState` to mutate state.
+          * You should treat `this.state` as immutable.
+          *
+          * There is no guarantee that `this.state` will be immediately updated, so
+          * accessing `this.state` after calling this method may return the old value.
+          *
+          * @param {ReactClass} publicInstance The instance that should rerender.
+          * @param {object|function} completeState Next state.
+          * @internal
           */
-         setSelection: function (input, offsets) {
-           var start = offsets.start;
-           var end = offsets.end;
-           if (typeof end === 'undefined') {
-             end = start;
+       
+       
+         ReactServerUpdateQueue.prototype.enqueueReplaceState = function enqueueReplaceState(publicInstance, completeState) {
+           if (this.transaction.isInTransaction()) {
+             ReactUpdateQueue.enqueueReplaceState(publicInstance, completeState);
+           } else {
+             warnNoop(publicInstance, 'replaceState');
            }
+         };
        
-           if ('selectionStart' in input) {
-             input.selectionStart = start;
-             input.selectionEnd = Math.min(end, input.value.length);
-           } else if (document.selection && (input.nodeName && input.nodeName.toLowerCase() === 'input')) {
-             var range = input.createTextRange();
-             range.collapse(true);
-             range.moveStart('character', start);
-             range.moveEnd('character', end - start);
-             range.select();
+         /**
+          * Sets a subset of the state. This only exists because _pendingState is
+          * internal. This provides a merging strategy that is not available to deep
+          * properties which is confusing. TODO: Expose pendingState or don't use it
+          * during the merge.
+          *
+          * @param {ReactClass} publicInstance The instance that should rerender.
+          * @param {object|function} partialState Next partial state to be merged with state.
+          * @internal
+          */
+       
+       
+         ReactServerUpdateQueue.prototype.enqueueSetState = function enqueueSetState(publicInstance, partialState) {
+           if (this.transaction.isInTransaction()) {
+             ReactUpdateQueue.enqueueSetState(publicInstance, partialState);
            } else {
-             ReactDOMSelection.setOffsets(input, offsets);
+             warnNoop(publicInstance, 'setState');
            }
-         }
-       };
+         };
        
-       module.exports = ReactInputSelection;
+         return ReactServerUpdateQueue;
+       }();
+       
+       module.exports = ReactServerUpdateQueue;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
 
 /***/ },
-/* 129 */
+/* 138 */
 /***/ function(module, exports, __webpack_require__) {
 
-       /**
-        * Copyright 2013-2015, Facebook, Inc.
+       /* WEBPACK VAR INJECTION */(function(process) {/**
+        * Copyright 2015-present, 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.
         *
-        * @providesModule ReactDOMSelection
+        * @providesModule ReactUpdateQueue
         */
        
        'use strict';
        
-       var ExecutionEnvironment = __webpack_require__(11);
+       var _prodInvariant = __webpack_require__(9);
        
-       var getNodeForCharacterOffset = __webpack_require__(130);
-       var getTextContentAccessor = __webpack_require__(77);
+       var ReactCurrentOwner = __webpack_require__(12);
+       var ReactInstanceMap = __webpack_require__(126);
+       var ReactInstrumentation = __webpack_require__(65);
+       var ReactUpdates = __webpack_require__(59);
        
-       /**
-        * While `isCollapsed` is available on the Selection object and `collapsed`
-        * is available on the Range object, IE11 sometimes gets them wrong.
-        * If the anchor/focus nodes and offsets are the same, the range is collapsed.
-        */
-       function isCollapsed(anchorNode, anchorOffset, focusNode, focusOffset) {
-         return anchorNode === focusNode && anchorOffset === focusOffset;
-       }
-       
-       /**
-        * Get the appropriate anchor and focus node/offset pairs for IE.
-        *
-        * The catch here is that IE's selection API doesn't provide information
-        * about whether the selection is forward or backward, so we have to
-        * behave as though it's always forward.
-        *
-        * IE text differs from modern selection in that it behaves as though
-        * block elements end with a new line. This means character offsets will
-        * differ between the two APIs.
-        *
-        * @param {DOMElement} node
-        * @return {object}
-        */
-       function getIEOffsets(node) {
-         var selection = document.selection;
-         var selectedRange = selection.createRange();
-         var selectedLength = selectedRange.text.length;
-       
-         // Duplicate selection so we can move range without breaking user selection.
-         var fromStart = selectedRange.duplicate();
-         fromStart.moveToElementText(node);
-         fromStart.setEndPoint('EndToStart', selectedRange);
+       var invariant = __webpack_require__(10);
+       var warning = __webpack_require__(13);
        
-         var startOffset = fromStart.text.length;
-         var endOffset = startOffset + selectedLength;
-       
-         return {
-           start: startOffset,
-           end: endOffset
-         };
+       function enqueueUpdate(internalInstance) {
+         ReactUpdates.enqueueUpdate(internalInstance);
        }
        
-       /**
-        * @param {DOMElement} node
-        * @return {?object}
-        */
-       function getModernOffsets(node) {
-         var selection = window.getSelection && window.getSelection();
-       
-         if (!selection || selection.rangeCount === 0) {
-           return null;
+       function formatUnexpectedArgument(arg) {
+         var type = typeof arg;
+         if (type !== 'object') {
+           return type;
          }
+         var displayName = arg.constructor && arg.constructor.name || type;
+         var keys = Object.keys(arg);
+         if (keys.length > 0 && keys.length < 20) {
+           return displayName + ' (keys: ' + keys.join(', ') + ')';
+         }
+         return displayName;
+       }
        
-         var anchorNode = selection.anchorNode;
-         var anchorOffset = selection.anchorOffset;
-         var focusNode = selection.focusNode;
-         var focusOffset = selection.focusOffset;
-       
-         var currentRange = selection.getRangeAt(0);
-       
-         // In Firefox, range.startContainer and range.endContainer can be "anonymous
-         // divs", e.g. the up/down buttons on an <input type="number">. Anonymous
-         // divs do not seem to expose properties, triggering a "Permission denied
-         // error" if any of its properties are accessed. The only seemingly possible
-         // way to avoid erroring is to access a property that typically works for
-         // non-anonymous divs and catch any error that may otherwise arise. See
-         // https://bugzilla.mozilla.org/show_bug.cgi?id=208427
-         try {
-           /* eslint-disable no-unused-expressions */
-           currentRange.startContainer.nodeType;
-           currentRange.endContainer.nodeType;
-           /* eslint-enable no-unused-expressions */
-         } catch (e) {
+       function getInternalInstanceReadyForUpdate(publicInstance, callerName) {
+         var internalInstance = ReactInstanceMap.get(publicInstance);
+         if (!internalInstance) {
+           if (process.env.NODE_ENV !== 'production') {
+             var ctor = publicInstance.constructor;
+             // Only warn when we have a callerName. Otherwise we should be silent.
+             // We're probably calling from enqueueCallback. We don't want to warn
+             // there because we already warned for the corresponding lifecycle method.
+             process.env.NODE_ENV !== 'production' ? warning(!callerName, '%s(...): Can only update a mounted or mounting component. ' + 'This usually means you called %s() on an unmounted component. ' + 'This is a no-op. Please check the code for the %s component.', callerName, callerName, ctor && (ctor.displayName || ctor.name) || 'ReactClass') : void 0;
+           }
            return null;
          }
        
-         // If the node and offset values are the same, the selection is collapsed.
-         // `Selection.isCollapsed` is available natively, but IE sometimes gets
-         // this value wrong.
-         var isSelectionCollapsed = isCollapsed(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);
-       
-         var rangeLength = isSelectionCollapsed ? 0 : currentRange.toString().length;
-       
-         var tempRange = currentRange.cloneRange();
-         tempRange.selectNodeContents(node);
-         tempRange.setEnd(currentRange.startContainer, currentRange.startOffset);
-       
-         var isTempRangeCollapsed = isCollapsed(tempRange.startContainer, tempRange.startOffset, tempRange.endContainer, tempRange.endOffset);
-       
-         var start = isTempRangeCollapsed ? 0 : tempRange.toString().length;
-         var end = start + rangeLength;
-       
-         // Detect whether the selection is backward.
-         var detectionRange = document.createRange();
-         detectionRange.setStart(anchorNode, anchorOffset);
-         detectionRange.setEnd(focusNode, focusOffset);
-         var isBackward = detectionRange.collapsed;
+         if (process.env.NODE_ENV !== 'production') {
+           process.env.NODE_ENV !== 'production' ? warning(ReactCurrentOwner.current == null, '%s(...): Cannot update during an existing state transition (such as ' + 'within `render` or another component\'s constructor). Render methods ' + 'should be a pure function of props and state; constructor ' + 'side-effects are an anti-pattern, but can be moved to ' + '`componentWillMount`.', callerName) : void 0;
+         }
        
-         return {
-           start: isBackward ? end : start,
-           end: isBackward ? start : end
-         };
+         return internalInstance;
        }
        
        /**
-        * @param {DOMElement|DOMTextNode} node
-        * @param {object} offsets
+        * ReactUpdateQueue allows for state updates to be scheduled into a later
+        * reconciliation step.
         */
-       function setIEOffsets(node, offsets) {
-         var range = document.selection.createRange().duplicate();
-         var start, end;
-       
-         if (typeof offsets.end === 'undefined') {
-           start = offsets.start;
-           end = start;
-         } else if (offsets.start > offsets.end) {
-           start = offsets.end;
-           end = offsets.start;
-         } else {
-           start = offsets.start;
-           end = offsets.end;
-         }
+       var ReactUpdateQueue = {
        
-         range.moveToElementText(node);
-         range.moveStart('character', start);
-         range.setEndPoint('EndToStart', range);
-         range.moveEnd('character', end - start);
-         range.select();
-       }
-       
-       /**
-        * In modern non-IE browsers, we can support both forward and backward
-        * selections.
-        *
-        * Note: IE10+ supports the Selection object, but it does not support
-        * the `extend` method, which means that even in modern IE, it's not possible
-        * to programatically create a backward selection. Thus, for all IE
-        * versions, we use the old IE API to create our selections.
-        *
-        * @param {DOMElement|DOMTextNode} node
-        * @param {object} offsets
-        */
-       function setModernOffsets(node, offsets) {
-         if (!window.getSelection) {
-           return;
-         }
-       
-         var selection = window.getSelection();
-         var length = node[getTextContentAccessor()].length;
-         var start = Math.min(offsets.start, length);
-         var end = typeof offsets.end === 'undefined' ? start : Math.min(offsets.end, length);
-       
-         // IE 11 uses modern selection, but doesn't support the extend method.
-         // Flip backward selections, so we can set with a single range.
-         if (!selection.extend && start > end) {
-           var temp = end;
-           end = start;
-           start = temp;
-         }
+         /**
+          * Checks whether or not this composite component is mounted.
+          * @param {ReactClass} publicInstance The instance we want to test.
+          * @return {boolean} True if mounted, false otherwise.
+          * @protected
+          * @final
+          */
+         isMounted: function (publicInstance) {
+           if (process.env.NODE_ENV !== 'production') {
+             var owner = ReactCurrentOwner.current;
+             if (owner !== null) {
+               process.env.NODE_ENV !== 'production' ? warning(owner._warnedAboutRefsInRender, '%s is accessing isMounted inside its render() function. ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', owner.getName() || 'A component') : void 0;
+               owner._warnedAboutRefsInRender = true;
+             }
+           }
+           var internalInstance = ReactInstanceMap.get(publicInstance);
+           if (internalInstance) {
+             // During componentWillMount and render this will still be null but after
+             // that will always render to something. At least for now. So we can use
+             // this hack.
+             return !!internalInstance._renderedComponent;
+           } else {
+             return false;
+           }
+         },
        
-         var startMarker = getNodeForCharacterOffset(node, start);
-         var endMarker = getNodeForCharacterOffset(node, end);
+         /**
+          * Enqueue a callback that will be executed after all the pending updates
+          * have processed.
+          *
+          * @param {ReactClass} publicInstance The instance to use as `this` context.
+          * @param {?function} callback Called after state is updated.
+          * @param {string} callerName Name of the calling function in the public API.
+          * @internal
+          */
+         enqueueCallback: function (publicInstance, callback, callerName) {
+           ReactUpdateQueue.validateCallback(callback, callerName);
+           var internalInstance = getInternalInstanceReadyForUpdate(publicInstance);
        
-         if (startMarker && endMarker) {
-           var range = document.createRange();
-           range.setStart(startMarker.node, startMarker.offset);
-           selection.removeAllRanges();
+           // Previously we would throw an error if we didn't have an internal
+           // instance. Since we want to make it a no-op instead, we mirror the same
+           // behavior we have in other enqueue* methods.
+           // We also need to ignore callbacks in componentWillMount. See
+           // enqueueUpdates.
+           if (!internalInstance) {
+             return null;
+           }
        
-           if (start > end) {
-             selection.addRange(range);
-             selection.extend(endMarker.node, endMarker.offset);
+           if (internalInstance._pendingCallbacks) {
+             internalInstance._pendingCallbacks.push(callback);
            } else {
-             range.setEnd(endMarker.node, endMarker.offset);
-             selection.addRange(range);
+             internalInstance._pendingCallbacks = [callback];
            }
-         }
-       }
+           // TODO: The callback here is ignored when setState is called from
+           // componentWillMount. Either fix it or disallow doing so completely in
+           // favor of getInitialState. Alternatively, we can disallow
+           // componentWillMount during server-side rendering.
+           enqueueUpdate(internalInstance);
+         },
        
-       var useIEOffsets = ExecutionEnvironment.canUseDOM && 'selection' in document && !('getSelection' in window);
+         enqueueCallbackInternal: function (internalInstance, callback) {
+           if (internalInstance._pendingCallbacks) {
+             internalInstance._pendingCallbacks.push(callback);
+           } else {
+             internalInstance._pendingCallbacks = [callback];
+           }
+           enqueueUpdate(internalInstance);
+         },
        
-       var ReactDOMSelection = {
          /**
-          * @param {DOMElement} node
+          * Forces an update. This should only be invoked when it is known with
+          * certainty that we are **not** in a DOM transaction.
+          *
+          * You may want to call this when you know that some deeper aspect of the
+          * component's state has changed but `setState` was not called.
+          *
+          * This will not invoke `shouldComponentUpdate`, but it will invoke
+          * `componentWillUpdate` and `componentDidUpdate`.
+          *
+          * @param {ReactClass} publicInstance The instance that should rerender.
+          * @internal
           */
-         getOffsets: useIEOffsets ? getIEOffsets : getModernOffsets,
+         enqueueForceUpdate: function (publicInstance) {
+           var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'forceUpdate');
+       
+           if (!internalInstance) {
+             return;
+           }
+       
+           internalInstance._pendingForceUpdate = true;
+       
+           enqueueUpdate(internalInstance);
+         },
        
          /**
-          * @param {DOMElement|DOMTextNode} node
-          * @param {object} offsets
+          * Replaces all of the state. Always use this or `setState` to mutate state.
+          * You should treat `this.state` as immutable.
+          *
+          * There is no guarantee that `this.state` will be immediately updated, so
+          * accessing `this.state` after calling this method may return the old value.
+          *
+          * @param {ReactClass} publicInstance The instance that should rerender.
+          * @param {object} completeState Next state.
+          * @internal
           */
-         setOffsets: useIEOffsets ? setIEOffsets : setModernOffsets
-       };
+         enqueueReplaceState: function (publicInstance, completeState) {
+           var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'replaceState');
        
-       module.exports = ReactDOMSelection;
-
-/***/ },
-/* 130 */
-/***/ function(module, exports) {
-
-       /**
-        * 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.
-        *
-        * @providesModule getNodeForCharacterOffset
-        */
+           if (!internalInstance) {
+             return;
+           }
        
-       'use strict';
+           internalInstance._pendingStateQueue = [completeState];
+           internalInstance._pendingReplaceState = true;
        
-       /**
-        * Given any node return the first leaf node without children.
-        *
-        * @param {DOMElement|DOMTextNode} node
-        * @return {DOMElement|DOMTextNode}
-        */
-       function getLeafNode(node) {
-         while (node && node.firstChild) {
-           node = node.firstChild;
-         }
-         return node;
-       }
+           enqueueUpdate(internalInstance);
+         },
        
-       /**
-        * Get the next sibling within a container. This will walk up the
-        * DOM if a node's siblings have been exhausted.
-        *
-        * @param {DOMElement|DOMTextNode} node
-        * @return {?DOMElement|DOMTextNode}
-        */
-       function getSiblingNode(node) {
-         while (node) {
-           if (node.nextSibling) {
-             return node.nextSibling;
+         /**
+          * Sets a subset of the state. This only exists because _pendingState is
+          * internal. This provides a merging strategy that is not available to deep
+          * properties which is confusing. TODO: Expose pendingState or don't use it
+          * during the merge.
+          *
+          * @param {ReactClass} publicInstance The instance that should rerender.
+          * @param {object} partialState Next partial state to be merged with state.
+          * @internal
+          */
+         enqueueSetState: function (publicInstance, partialState) {
+           if (process.env.NODE_ENV !== 'production') {
+             ReactInstrumentation.debugTool.onSetState();
+             process.env.NODE_ENV !== 'production' ? warning(partialState != null, 'setState(...): You passed an undefined or null state object; ' + 'instead, use forceUpdate().') : void 0;
            }
-           node = node.parentNode;
-         }
-       }
        
-       /**
-        * Get object describing the nodes which contain characters at offset.
-        *
-        * @param {DOMElement|DOMTextNode} root
-        * @param {number} offset
-        * @return {?object}
-        */
-       function getNodeForCharacterOffset(root, offset) {
-         var node = getLeafNode(root);
-         var nodeStart = 0;
-         var nodeEnd = 0;
+           var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'setState');
        
-         while (node) {
-           if (node.nodeType === 3) {
-             nodeEnd = nodeStart + node.textContent.length;
+           if (!internalInstance) {
+             return;
+           }
        
-             if (nodeStart <= offset && nodeEnd >= offset) {
-               return {
-                 node: node,
-                 offset: offset - nodeStart
-               };
-             }
+           var queue = internalInstance._pendingStateQueue || (internalInstance._pendingStateQueue = []);
+           queue.push(partialState);
        
-             nodeStart = nodeEnd;
-           }
+           enqueueUpdate(internalInstance);
+         },
        
-           node = getLeafNode(getSiblingNode(node));
+         enqueueElementInternal: function (internalInstance, nextElement, nextContext) {
+           internalInstance._pendingElement = nextElement;
+           // TODO: introduce _pendingContext instead of setting it directly.
+           internalInstance._context = nextContext;
+           enqueueUpdate(internalInstance);
+         },
+       
+         validateCallback: function (callback, callerName) {
+           !(!callback || typeof callback === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s(...): Expected the last optional `callback` argument to be a function. Instead received: %s.', callerName, formatUnexpectedArgument(callback)) : _prodInvariant('122', callerName, formatUnexpectedArgument(callback)) : void 0;
          }
-       }
        
-       module.exports = getNodeForCharacterOffset;
+       };
+       
+       module.exports = ReactUpdateQueue;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
 
 /***/ },
-/* 131 */
-/***/ function(module, exports) {
+/* 139 */
+/***/ function(module, exports, __webpack_require__) {
 
-       /**
-        * Copyright 2013-2015, Facebook, Inc.
+       /* WEBPACK VAR INJECTION */(function(process) {/**
+        * Copyright 2015-present, 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.
         *
-        * @providesModule getActiveElement
-        * @typechecks
+        * @providesModule validateDOMNesting
         */
        
-       /**
-        * Same as document.activeElement but wraps in a try-catch block. In IE it is
-        * not safe to call document.activeElement if there is nothing focused.
-        *
-        * The activeElement will be null only if the document or document body is not yet defined.
-        */
        'use strict';
        
-       function getActiveElement() /*?DOMElement*/{
-         if (typeof document === 'undefined') {
-           return null;
-         }
+       var _assign = __webpack_require__(6);
        
-         try {
-           return document.activeElement || document.body;
-         } catch (e) {
-           return document.body;
-         }
-       }
+       var emptyFunction = __webpack_require__(14);
+       var warning = __webpack_require__(13);
        
-       module.exports = getActiveElement;
-
-/***/ },
-/* 132 */
-/***/ 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.
-        *
-        * @providesModule SelectEventPlugin
-        */
+       var validateDOMNesting = emptyFunction;
        
-       'use strict';
+       if (process.env.NODE_ENV !== 'production') {
+         // This validation code was written based on the HTML5 parsing spec:
+         // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope
+         //
+         // Note: this does not catch all invalid nesting, nor does it try to (as it's
+         // not clear what practical benefit doing so provides); instead, we warn only
+         // for cases where the parser will give a parse tree differing from what React
+         // intended. For example, <b><div></div></b> is invalid but we don't warn
+         // because it still parses correctly; we do warn for other cases like nested
+         // <p> tags where the beginning of the second element implicitly closes the
+         // first, causing a confusing mess.
        
-       var EventConstants = __webpack_require__(32);
-       var EventPropagators = __webpack_require__(75);
-       var ExecutionEnvironment = __webpack_require__(11);
-       var ReactInputSelection = __webpack_require__(128);
-       var SyntheticEvent = __webpack_require__(79);
+         // https://html.spec.whatwg.org/multipage/syntax.html#special
+         var specialTags = ['address', 'applet', 'area', 'article', 'aside', 'base', 'basefont', 'bgsound', 'blockquote', 'body', 'br', 'button', 'caption', 'center', 'col', 'colgroup', 'dd', 'details', 'dir', 'div', 'dl', 'dt', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'frame', 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'iframe', 'img', 'input', 'isindex', 'li', 'link', 'listing', 'main', 'marquee', 'menu', 'menuitem', 'meta', 'nav', 'noembed', 'noframes', 'noscript', 'object', 'ol', 'p', 'param', 'plaintext', 'pre', 'script', 'section', 'select', 'source', 'style', 'summary', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'title', 'tr', 'track', 'ul', 'wbr', 'xmp'];
        
-       var getActiveElement = __webpack_require__(131);
-       var isTextInputElement = __webpack_require__(84);
-       var keyOf = __webpack_require__(81);
-       var shallowEqual = __webpack_require__(119);
+         // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope
+         var inScopeTags = ['applet', 'caption', 'html', 'table', 'td', 'th', 'marquee', 'object', 'template',
        
-       var topLevelTypes = EventConstants.topLevelTypes;
+         // https://html.spec.whatwg.org/multipage/syntax.html#html-integration-point
+         // TODO: Distinguish by namespace here -- for <title>, including it here
+         // errs on the side of fewer warnings
+         'foreignObject', 'desc', 'title'];
        
-       var skipSelectionChangeEvent = ExecutionEnvironment.canUseDOM && 'documentMode' in document && document.documentMode <= 11;
+         // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-button-scope
+         var buttonScopeTags = inScopeTags.concat(['button']);
        
-       var eventTypes = {
-         select: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onSelect: null }),
-             captured: keyOf({ onSelectCapture: null })
-           },
-           dependencies: [topLevelTypes.topBlur, topLevelTypes.topContextMenu, topLevelTypes.topFocus, topLevelTypes.topKeyDown, topLevelTypes.topMouseDown, topLevelTypes.topMouseUp, topLevelTypes.topSelectionChange]
-         }
-       };
+         // https://html.spec.whatwg.org/multipage/syntax.html#generate-implied-end-tags
+         var impliedEndTags = ['dd', 'dt', 'li', 'option', 'optgroup', 'p', 'rp', 'rt'];
        
-       var activeElement = null;
-       var activeElementID = null;
-       var lastSelection = null;
-       var mouseDown = false;
+         var emptyAncestorInfo = {
+           current: null,
        
-       // Track whether a listener exists for this plugin. If none exist, we do
-       // not extract events.
-       var hasListener = false;
-       var ON_SELECT_KEY = keyOf({ onSelect: null });
+           formTag: null,
+           aTagInScope: null,
+           buttonTagInScope: null,
+           nobrTagInScope: null,
+           pTagInButtonScope: null,
        
-       /**
-        * Get an object which is a unique representation of the current selection.
-        *
-        * The return value will not be consistent across nodes or browsers, but
-        * two identical selections on the same node will return identical objects.
-        *
-        * @param {DOMElement} node
-        * @return {object}
-        */
-       function getSelection(node) {
-         if ('selectionStart' in node && ReactInputSelection.hasSelectionCapabilities(node)) {
-           return {
-             start: node.selectionStart,
-             end: node.selectionEnd
-           };
-         } else if (window.getSelection) {
-           var selection = window.getSelection();
-           return {
-             anchorNode: selection.anchorNode,
-             anchorOffset: selection.anchorOffset,
-             focusNode: selection.focusNode,
-             focusOffset: selection.focusOffset
-           };
-         } else if (document.selection) {
-           var range = document.selection.createRange();
-           return {
-             parentElement: range.parentElement(),
-             text: range.text,
-             top: range.boundingTop,
-             left: range.boundingLeft
-           };
-         }
-       }
+           listItemTagAutoclosing: null,
+           dlItemTagAutoclosing: null
+         };
        
-       /**
-        * Poll selection to see whether it's changed.
-        *
-        * @param {object} nativeEvent
-        * @return {?SyntheticEvent}
-        */
-       function constructSelectEvent(nativeEvent, nativeEventTarget) {
-         // Ensure we have the right element, and that the user is not dragging a
-         // selection (this matches native `select` event behavior). In HTML5, select
-         // fires only on input and textarea thus if there's no focused element we
-         // won't dispatch.
-         if (mouseDown || activeElement == null || activeElement !== getActiveElement()) {
-           return null;
-         }
+         var updatedAncestorInfo = function (oldInfo, tag, instance) {
+           var ancestorInfo = _assign({}, oldInfo || emptyAncestorInfo);
+           var info = { tag: tag, instance: instance };
        
-         // Only fire when selection has actually changed.
-         var currentSelection = getSelection(activeElement);
-         if (!lastSelection || !shallowEqual(lastSelection, currentSelection)) {
-           lastSelection = currentSelection;
+           if (inScopeTags.indexOf(tag) !== -1) {
+             ancestorInfo.aTagInScope = null;
+             ancestorInfo.buttonTagInScope = null;
+             ancestorInfo.nobrTagInScope = null;
+           }
+           if (buttonScopeTags.indexOf(tag) !== -1) {
+             ancestorInfo.pTagInButtonScope = null;
+           }
        
-           var syntheticEvent = SyntheticEvent.getPooled(eventTypes.select, activeElementID, nativeEvent, nativeEventTarget);
+           // See rules for 'li', 'dd', 'dt' start tags in
+           // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody
+           if (specialTags.indexOf(tag) !== -1 && tag !== 'address' && tag !== 'div' && tag !== 'p') {
+             ancestorInfo.listItemTagAutoclosing = null;
+             ancestorInfo.dlItemTagAutoclosing = null;
+           }
        
-           syntheticEvent.type = 'select';
-           syntheticEvent.target = activeElement;
+           ancestorInfo.current = info;
        
-           EventPropagators.accumulateTwoPhaseDispatches(syntheticEvent);
+           if (tag === 'form') {
+             ancestorInfo.formTag = info;
+           }
+           if (tag === 'a') {
+             ancestorInfo.aTagInScope = info;
+           }
+           if (tag === 'button') {
+             ancestorInfo.buttonTagInScope = info;
+           }
+           if (tag === 'nobr') {
+             ancestorInfo.nobrTagInScope = info;
+           }
+           if (tag === 'p') {
+             ancestorInfo.pTagInButtonScope = info;
+           }
+           if (tag === 'li') {
+             ancestorInfo.listItemTagAutoclosing = info;
+           }
+           if (tag === 'dd' || tag === 'dt') {
+             ancestorInfo.dlItemTagAutoclosing = info;
+           }
        
-           return syntheticEvent;
-         }
+           return ancestorInfo;
+         };
        
-         return null;
-       }
+         /**
+          * Returns whether
+          */
+         var isTagValidWithParent = function (tag, parentTag) {
+           // First, let's check if we're in an unusual parsing mode...
+           switch (parentTag) {
+             // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inselect
+             case 'select':
+               return tag === 'option' || tag === 'optgroup' || tag === '#text';
+             case 'optgroup':
+               return tag === 'option' || tag === '#text';
+             // Strictly speaking, seeing an <option> doesn't mean we're in a <select>
+             // but
+             case 'option':
+               return tag === '#text';
        
-       /**
-        * This plugin creates an `onSelect` event that normalizes select events
-        * across form elements.
-        *
-        * Supported elements are:
-        * - input (see `isTextInputElement`)
-        * - textarea
-        * - contentEditable
-        *
-        * This differs from native browser implementations in the following ways:
-        * - Fires on contentEditable fields as well as inputs.
-        * - Fires for collapsed selection.
-        * - Fires after user input.
-        */
-       var SelectEventPlugin = {
+             // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intd
+             // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incaption
+             // No special behavior since these rules fall back to "in body" mode for
+             // all except special table nodes which cause bad parsing behavior anyway.
        
-         eventTypes: eventTypes,
+             // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intr
+             case 'tr':
+               return tag === 'th' || tag === 'td' || tag === 'style' || tag === 'script' || tag === 'template';
        
-         /**
-          * @param {string} topLevelType Record from `EventConstants`.
-          * @param {DOMEventTarget} topLevelTarget The listening component root node.
-          * @param {string} topLevelTargetID ID of `topLevelTarget`.
-          * @param {object} nativeEvent Native browser event.
-          * @return {*} An accumulation of synthetic events.
-          * @see {EventPluginHub.extractEvents}
-          */
-         extractEvents: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) {
-           if (!hasListener) {
-             return null;
-           }
+             // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intbody
+             case 'tbody':
+             case 'thead':
+             case 'tfoot':
+               return tag === 'tr' || tag === 'style' || tag === 'script' || tag === 'template';
        
-           switch (topLevelType) {
-             // Track the input node that has focus.
-             case topLevelTypes.topFocus:
-               if (isTextInputElement(topLevelTarget) || topLevelTarget.contentEditable === 'true') {
-                 activeElement = topLevelTarget;
-                 activeElementID = topLevelTargetID;
-                 lastSelection = null;
-               }
-               break;
-             case topLevelTypes.topBlur:
-               activeElement = null;
-               activeElementID = null;
-               lastSelection = null;
-               break;
+             // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incolgroup
+             case 'colgroup':
+               return tag === 'col' || tag === 'template';
        
-             // Don't fire the event while the user is dragging. This matches the
-             // semantics of the native select event.
-             case topLevelTypes.topMouseDown:
-               mouseDown = true;
-               break;
-             case topLevelTypes.topContextMenu:
-             case topLevelTypes.topMouseUp:
-               mouseDown = false;
-               return constructSelectEvent(nativeEvent, nativeEventTarget);
+             // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intable
+             case 'table':
+               return tag === 'caption' || tag === 'colgroup' || tag === 'tbody' || tag === 'tfoot' || tag === 'thead' || tag === 'style' || tag === 'script' || tag === 'template';
        
-             // Chrome and IE fire non-standard event when selection is changed (and
-             // sometimes when it hasn't). IE's event fires out of order with respect
-             // to key and input events on deletion, so we discard it.
-             //
-             // Firefox doesn't support selectionchange, so check selection status
-             // after each key entry. The selection changes after keydown and before
-             // keyup, but we check on keydown as well in the case of holding down a
-             // key, when multiple keydown events are fired but only one keyup is.
-             // This is also our approach for IE handling, for the reason above.
-             case topLevelTypes.topSelectionChange:
-               if (skipSelectionChangeEvent) {
-                 break;
-               }
-             // falls through
-             case topLevelTypes.topKeyDown:
-             case topLevelTypes.topKeyUp:
-               return constructSelectEvent(nativeEvent, nativeEventTarget);
+             // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inhead
+             case 'head':
+               return tag === 'base' || tag === 'basefont' || tag === 'bgsound' || tag === 'link' || tag === 'meta' || tag === 'title' || tag === 'noscript' || tag === 'noframes' || tag === 'style' || tag === 'script' || tag === 'template';
+       
+             // https://html.spec.whatwg.org/multipage/semantics.html#the-html-element
+             case 'html':
+               return tag === 'head' || tag === 'body';
+             case '#document':
+               return tag === 'html';
+           }
+       
+           // Probably in the "in body" parsing mode, so we outlaw only tag combos
+           // where the parsing rules cause implicit opens or closes to be added.
+           // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody
+           switch (tag) {
+             case 'h1':
+             case 'h2':
+             case 'h3':
+             case 'h4':
+             case 'h5':
+             case 'h6':
+               return parentTag !== 'h1' && parentTag !== 'h2' && parentTag !== 'h3' && parentTag !== 'h4' && parentTag !== 'h5' && parentTag !== 'h6';
+       
+             case 'rp':
+             case 'rt':
+               return impliedEndTags.indexOf(parentTag) === -1;
+       
+             case 'body':
+             case 'caption':
+             case 'col':
+             case 'colgroup':
+             case 'frame':
+             case 'head':
+             case 'html':
+             case 'tbody':
+             case 'td':
+             case 'tfoot':
+             case 'th':
+             case 'thead':
+             case 'tr':
+               // These tags are only valid with a few parents that have special child
+               // parsing rules -- if we're down here, then none of those matched and
+               // so we allow it only if we don't know what the parent is, as all other
+               // cases are invalid.
+               return parentTag == null;
+           }
+       
+           return true;
+         };
+       
+         /**
+          * Returns whether
+          */
+         var findInvalidAncestorForTag = function (tag, ancestorInfo) {
+           switch (tag) {
+             case 'address':
+             case 'article':
+             case 'aside':
+             case 'blockquote':
+             case 'center':
+             case 'details':
+             case 'dialog':
+             case 'dir':
+             case 'div':
+             case 'dl':
+             case 'fieldset':
+             case 'figcaption':
+             case 'figure':
+             case 'footer':
+             case 'header':
+             case 'hgroup':
+             case 'main':
+             case 'menu':
+             case 'nav':
+             case 'ol':
+             case 'p':
+             case 'section':
+             case 'summary':
+             case 'ul':
+       
+             case 'pre':
+             case 'listing':
+       
+             case 'table':
+       
+             case 'hr':
+       
+             case 'xmp':
+       
+             case 'h1':
+             case 'h2':
+             case 'h3':
+             case 'h4':
+             case 'h5':
+             case 'h6':
+               return ancestorInfo.pTagInButtonScope;
+       
+             case 'form':
+               return ancestorInfo.formTag || ancestorInfo.pTagInButtonScope;
+       
+             case 'li':
+               return ancestorInfo.listItemTagAutoclosing;
+       
+             case 'dd':
+             case 'dt':
+               return ancestorInfo.dlItemTagAutoclosing;
+       
+             case 'button':
+               return ancestorInfo.buttonTagInScope;
+       
+             case 'a':
+               // Spec says something about storing a list of markers, but it sounds
+               // equivalent to this check.
+               return ancestorInfo.aTagInScope;
+       
+             case 'nobr':
+               return ancestorInfo.nobrTagInScope;
            }
        
            return null;
-         },
+         };
        
-         didPutListener: function (id, registrationName, listener) {
-           if (registrationName === ON_SELECT_KEY) {
-             hasListener = true;
+         /**
+          * Given a ReactCompositeComponent instance, return a list of its recursive
+          * owners, starting at the root and ending with the instance itself.
+          */
+         var findOwnerStack = function (instance) {
+           if (!instance) {
+             return [];
            }
-         }
-       };
        
-       module.exports = SelectEventPlugin;
+           var stack = [];
+           do {
+             stack.push(instance);
+           } while (instance = instance._currentElement._owner);
+           stack.reverse();
+           return stack;
+         };
+       
+         var didWarn = {};
+       
+         validateDOMNesting = function (childTag, childInstance, ancestorInfo) {
+           ancestorInfo = ancestorInfo || emptyAncestorInfo;
+           var parentInfo = ancestorInfo.current;
+           var parentTag = parentInfo && parentInfo.tag;
+       
+           var invalidParent = isTagValidWithParent(childTag, parentTag) ? null : parentInfo;
+           var invalidAncestor = invalidParent ? null : findInvalidAncestorForTag(childTag, ancestorInfo);
+           var problematic = invalidParent || invalidAncestor;
+       
+           if (problematic) {
+             var ancestorTag = problematic.tag;
+             var ancestorInstance = problematic.instance;
+       
+             var childOwner = childInstance && childInstance._currentElement._owner;
+             var ancestorOwner = ancestorInstance && ancestorInstance._currentElement._owner;
+       
+             var childOwners = findOwnerStack(childOwner);
+             var ancestorOwners = findOwnerStack(ancestorOwner);
+       
+             var minStackLen = Math.min(childOwners.length, ancestorOwners.length);
+             var i;
+       
+             var deepestCommon = -1;
+             for (i = 0; i < minStackLen; i++) {
+               if (childOwners[i] === ancestorOwners[i]) {
+                 deepestCommon = i;
+               } else {
+                 break;
+               }
+             }
+       
+             var UNKNOWN = '(unknown)';
+             var childOwnerNames = childOwners.slice(deepestCommon + 1).map(function (inst) {
+               return inst.getName() || UNKNOWN;
+             });
+             var ancestorOwnerNames = ancestorOwners.slice(deepestCommon + 1).map(function (inst) {
+               return inst.getName() || UNKNOWN;
+             });
+             var ownerInfo = [].concat(
+             // If the parent and child instances have a common owner ancestor, start
+             // with that -- otherwise we just start with the parent's owners.
+             deepestCommon !== -1 ? childOwners[deepestCommon].getName() || UNKNOWN : [], ancestorOwnerNames, ancestorTag,
+             // If we're warning about an invalid (non-parent) ancestry, add '...'
+             invalidAncestor ? ['...'] : [], childOwnerNames, childTag).join(' > ');
+       
+             var warnKey = !!invalidParent + '|' + childTag + '|' + ancestorTag + '|' + ownerInfo;
+             if (didWarn[warnKey]) {
+               return;
+             }
+             didWarn[warnKey] = true;
+       
+             var tagDisplayName = childTag;
+             if (childTag !== '#text') {
+               tagDisplayName = '<' + childTag + '>';
+             }
+       
+             if (invalidParent) {
+               var info = '';
+               if (ancestorTag === 'table' && childTag === 'tr') {
+                 info += ' Add a <tbody> to your code to match the DOM tree generated by ' + 'the browser.';
+               }
+               process.env.NODE_ENV !== 'production' ? warning(false, 'validateDOMNesting(...): %s cannot appear as a child of <%s>. ' + 'See %s.%s', tagDisplayName, ancestorTag, ownerInfo, info) : void 0;
+             } else {
+               process.env.NODE_ENV !== 'production' ? warning(false, 'validateDOMNesting(...): %s cannot appear as a descendant of ' + '<%s>. See %s.', tagDisplayName, ancestorTag, ownerInfo) : void 0;
+             }
+           }
+         };
+       
+         validateDOMNesting.updatedAncestorInfo = updatedAncestorInfo;
+       
+         // For testing
+         validateDOMNesting.isTagValidInContext = function (tag, ancestorInfo) {
+           ancestorInfo = ancestorInfo || emptyAncestorInfo;
+           var parentInfo = ancestorInfo.current;
+           var parentTag = parentInfo && parentInfo.tag;
+           return isTagValidWithParent(tag, parentTag) && !findInvalidAncestorForTag(tag, ancestorInfo);
+         };
+       }
+       
+       module.exports = validateDOMNesting;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
 
 /***/ },
-/* 133 */
-/***/ function(module, exports) {
+/* 140 */
+/***/ function(module, exports, __webpack_require__) {
 
        /**
-        * Copyright 2013-2015, Facebook, Inc.
+        * Copyright 2014-present, 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.
         *
-        * @providesModule ServerReactRootIndex
-        * @typechecks
+        * @providesModule ReactDOMEmptyComponent
         */
        
        'use strict';
        
-       /**
-        * Size of the reactRoot ID space. We generate random numbers for React root
-        * IDs and if there's a collision the events and DOM update system will
-        * get confused. In the future we need a way to generate GUIDs but for
-        * now this will work on a smaller scale.
-        */
-       var GLOBAL_MOUNT_POINT_MAX = Math.pow(2, 53);
+       var _assign = __webpack_require__(6);
        
-       var ServerReactRootIndex = {
-         createReactRootIndex: function () {
-           return Math.ceil(Math.random() * GLOBAL_MOUNT_POINT_MAX);
-         }
+       var DOMLazyTree = __webpack_require__(85);
+       var ReactDOMComponentTree = __webpack_require__(39);
+       
+       var ReactDOMEmptyComponent = function (instantiate) {
+         // ReactCompositeComponent uses this:
+         this._currentElement = null;
+         // ReactDOMComponentTree uses these:
+         this._hostNode = null;
+         this._hostParent = null;
+         this._hostContainerInfo = null;
+         this._domID = null;
        };
+       _assign(ReactDOMEmptyComponent.prototype, {
+         mountComponent: function (transaction, hostParent, hostContainerInfo, context) {
+           var domID = hostContainerInfo._idCounter++;
+           this._domID = domID;
+           this._hostParent = hostParent;
+           this._hostContainerInfo = hostContainerInfo;
+       
+           var nodeValue = ' react-empty: ' + this._domID + ' ';
+           if (transaction.useCreateElement) {
+             var ownerDocument = hostContainerInfo._ownerDocument;
+             var node = ownerDocument.createComment(nodeValue);
+             ReactDOMComponentTree.precacheNode(this, node);
+             return DOMLazyTree(node);
+           } else {
+             if (transaction.renderToStaticMarkup) {
+               // Normally we'd insert a comment node, but since this is a situation
+               // where React won't take over (static pages), we can simply return
+               // nothing.
+               return '';
+             }
+             return '<!--' + nodeValue + '-->';
+           }
+         },
+         receiveComponent: function () {},
+         getHostNode: function () {
+           return ReactDOMComponentTree.getNodeFromInstance(this);
+         },
+         unmountComponent: function () {
+           ReactDOMComponentTree.uncacheNode(this);
+         }
+       });
        
-       module.exports = ServerReactRootIndex;
+       module.exports = ReactDOMEmptyComponent;
 
 /***/ },
-/* 134 */
+/* 141 */
 /***/ function(module, exports, __webpack_require__) {
 
        /* WEBPACK VAR INJECTION */(function(process) {/**
-        * Copyright 2013-2015, Facebook, Inc.
+        * Copyright 2015-present, 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.
         *
-        * @providesModule SimpleEventPlugin
+        * @providesModule ReactDOMTreeTraversal
         */
        
        'use strict';
        
-       var EventConstants = __webpack_require__(32);
-       var EventListener = __webpack_require__(121);
-       var EventPropagators = __webpack_require__(75);
-       var ReactMount = __webpack_require__(30);
-       var SyntheticClipboardEvent = __webpack_require__(135);
-       var SyntheticEvent = __webpack_require__(79);
-       var SyntheticFocusEvent = __webpack_require__(136);
-       var SyntheticKeyboardEvent = __webpack_require__(137);
-       var SyntheticMouseEvent = __webpack_require__(88);
-       var SyntheticDragEvent = __webpack_require__(140);
-       var SyntheticTouchEvent = __webpack_require__(141);
-       var SyntheticUIEvent = __webpack_require__(89);
-       var SyntheticWheelEvent = __webpack_require__(142);
-       
-       var emptyFunction = __webpack_require__(17);
-       var getEventCharCode = __webpack_require__(138);
-       var invariant = __webpack_require__(15);
-       var keyOf = __webpack_require__(81);
+       var _prodInvariant = __webpack_require__(9);
        
-       var topLevelTypes = EventConstants.topLevelTypes;
+       var invariant = __webpack_require__(10);
        
-       var eventTypes = {
-         abort: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onAbort: true }),
-             captured: keyOf({ onAbortCapture: true })
-           }
-         },
-         blur: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onBlur: true }),
-             captured: keyOf({ onBlurCapture: true })
-           }
-         },
-         canPlay: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onCanPlay: true }),
-             captured: keyOf({ onCanPlayCapture: true })
-           }
-         },
-         canPlayThrough: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onCanPlayThrough: true }),
-             captured: keyOf({ onCanPlayThroughCapture: true })
-           }
-         },
-         click: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onClick: true }),
-             captured: keyOf({ onClickCapture: true })
+       /**
+        * Return the lowest common ancestor of A and B, or null if they are in
+        * different trees.
+        */
+       function getLowestCommonAncestor(instA, instB) {
+         !('_hostNode' in instA) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'getNodeFromInstance: Invalid argument.') : _prodInvariant('33') : void 0;
+         !('_hostNode' in instB) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'getNodeFromInstance: Invalid argument.') : _prodInvariant('33') : void 0;
+       
+         var depthA = 0;
+         for (var tempA = instA; tempA; tempA = tempA._hostParent) {
+           depthA++;
+         }
+         var depthB = 0;
+         for (var tempB = instB; tempB; tempB = tempB._hostParent) {
+           depthB++;
+         }
+       
+         // If A is deeper, crawl up.
+         while (depthA - depthB > 0) {
+           instA = instA._hostParent;
+           depthA--;
+         }
+       
+         // If B is deeper, crawl up.
+         while (depthB - depthA > 0) {
+           instB = instB._hostParent;
+           depthB--;
+         }
+       
+         // Walk in lockstep until we find a match.
+         var depth = depthA;
+         while (depth--) {
+           if (instA === instB) {
+             return instA;
            }
-         },
-         contextMenu: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onContextMenu: true }),
-             captured: keyOf({ onContextMenuCapture: true })
+           instA = instA._hostParent;
+           instB = instB._hostParent;
+         }
+         return null;
+       }
+       
+       /**
+        * Return if A is an ancestor of B.
+        */
+       function isAncestor(instA, instB) {
+         !('_hostNode' in instA) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'isAncestor: Invalid argument.') : _prodInvariant('35') : void 0;
+         !('_hostNode' in instB) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'isAncestor: Invalid argument.') : _prodInvariant('35') : void 0;
+       
+         while (instB) {
+           if (instB === instA) {
+             return true;
            }
-         },
-         copy: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onCopy: true }),
-             captured: keyOf({ onCopyCapture: true })
+           instB = instB._hostParent;
+         }
+         return false;
+       }
+       
+       /**
+        * Return the parent instance of the passed-in instance.
+        */
+       function getParentInstance(inst) {
+         !('_hostNode' in inst) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'getParentInstance: Invalid argument.') : _prodInvariant('36') : void 0;
+       
+         return inst._hostParent;
+       }
+       
+       /**
+        * Simulates the traversal of a two-phase, capture/bubble event dispatch.
+        */
+       function traverseTwoPhase(inst, fn, arg) {
+         var path = [];
+         while (inst) {
+           path.push(inst);
+           inst = inst._hostParent;
+         }
+         var i;
+         for (i = path.length; i-- > 0;) {
+           fn(path[i], false, arg);
+         }
+         for (i = 0; i < path.length; i++) {
+           fn(path[i], true, arg);
+         }
+       }
+       
+       /**
+        * Traverses the ID hierarchy and invokes the supplied `cb` on any IDs that
+        * should would receive a `mouseEnter` or `mouseLeave` event.
+        *
+        * Does not invoke the callback on the nearest common ancestor because nothing
+        * "entered" or "left" that element.
+        */
+       function traverseEnterLeave(from, to, fn, argFrom, argTo) {
+         var common = from && to ? getLowestCommonAncestor(from, to) : null;
+         var pathFrom = [];
+         while (from && from !== common) {
+           pathFrom.push(from);
+           from = from._hostParent;
+         }
+         var pathTo = [];
+         while (to && to !== common) {
+           pathTo.push(to);
+           to = to._hostParent;
+         }
+         var i;
+         for (i = 0; i < pathFrom.length; i++) {
+           fn(pathFrom[i], true, argFrom);
+         }
+         for (i = pathTo.length; i-- > 0;) {
+           fn(pathTo[i], false, argTo);
+         }
+       }
+       
+       module.exports = {
+         isAncestor: isAncestor,
+         getLowestCommonAncestor: getLowestCommonAncestor,
+         getParentInstance: getParentInstance,
+         traverseTwoPhase: traverseTwoPhase,
+         traverseEnterLeave: traverseEnterLeave
+       };
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
+
+/***/ },
+/* 142 */
+/***/ function(module, exports, __webpack_require__) {
+
+       /* WEBPACK VAR INJECTION */(function(process) {/**
+        * Copyright 2013-present, 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.
+        *
+        * @providesModule ReactDOMTextComponent
+        */
+       
+       'use strict';
+       
+       var _prodInvariant = __webpack_require__(9),
+           _assign = __webpack_require__(6);
+       
+       var DOMChildrenOperations = __webpack_require__(84);
+       var DOMLazyTree = __webpack_require__(85);
+       var ReactDOMComponentTree = __webpack_require__(39);
+       var ReactInstrumentation = __webpack_require__(65);
+       
+       var escapeTextContentForBrowser = __webpack_require__(90);
+       var invariant = __webpack_require__(10);
+       var validateDOMNesting = __webpack_require__(139);
+       
+       /**
+        * Text nodes violate a couple assumptions that React makes about components:
+        *
+        *  - When mounting text into the DOM, adjacent text nodes are merged.
+        *  - Text nodes cannot be assigned a React root ID.
+        *
+        * This component is used to wrap strings between comment nodes so that they
+        * can undergo the same reconciliation that is applied to elements.
+        *
+        * TODO: Investigate representing React components in the DOM with text nodes.
+        *
+        * @class ReactDOMTextComponent
+        * @extends ReactComponent
+        * @internal
+        */
+       var ReactDOMTextComponent = function (text) {
+         // TODO: This is really a ReactText (ReactNode), not a ReactElement
+         this._currentElement = text;
+         this._stringText = '' + text;
+         // ReactDOMComponentTree uses these:
+         this._hostNode = null;
+         this._hostParent = null;
+       
+         // Properties
+         this._domID = null;
+         this._mountIndex = 0;
+         this._closingComment = null;
+         this._commentNodes = null;
+       };
+       
+       _assign(ReactDOMTextComponent.prototype, {
+       
+         /**
+          * Creates the markup for this text node. This node is not intended to have
+          * any features besides containing text content.
+          *
+          * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction
+          * @return {string} Markup for this text node.
+          * @internal
+          */
+         mountComponent: function (transaction, hostParent, hostContainerInfo, context) {
+           if (process.env.NODE_ENV !== 'production') {
+             ReactInstrumentation.debugTool.onSetText(this._debugID, this._stringText);
+       
+             var parentInfo;
+             if (hostParent != null) {
+               parentInfo = hostParent._ancestorInfo;
+             } else if (hostContainerInfo != null) {
+               parentInfo = hostContainerInfo._ancestorInfo;
+             }
+             if (parentInfo) {
+               // parentInfo should always be present except for the top-level
+               // component when server rendering
+               validateDOMNesting('#text', this, parentInfo);
+             }
            }
-         },
-         cut: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onCut: true }),
-             captured: keyOf({ onCutCapture: true })
+       
+           var domID = hostContainerInfo._idCounter++;
+           var openingValue = ' react-text: ' + domID + ' ';
+           var closingValue = ' /react-text ';
+           this._domID = domID;
+           this._hostParent = hostParent;
+           if (transaction.useCreateElement) {
+             var ownerDocument = hostContainerInfo._ownerDocument;
+             var openingComment = ownerDocument.createComment(openingValue);
+             var closingComment = ownerDocument.createComment(closingValue);
+             var lazyTree = DOMLazyTree(ownerDocument.createDocumentFragment());
+             DOMLazyTree.queueChild(lazyTree, DOMLazyTree(openingComment));
+             if (this._stringText) {
+               DOMLazyTree.queueChild(lazyTree, DOMLazyTree(ownerDocument.createTextNode(this._stringText)));
+             }
+             DOMLazyTree.queueChild(lazyTree, DOMLazyTree(closingComment));
+             ReactDOMComponentTree.precacheNode(this, openingComment);
+             this._closingComment = closingComment;
+             return lazyTree;
+           } else {
+             var escapedText = escapeTextContentForBrowser(this._stringText);
+       
+             if (transaction.renderToStaticMarkup) {
+               // Normally we'd wrap this between comment nodes for the reasons stated
+               // above, but since this is a situation where React won't take over
+               // (static pages), we can simply return the text as it is.
+               return escapedText;
+             }
+       
+             return '<!--' + openingValue + '-->' + escapedText + '<!--' + closingValue + '-->';
            }
          },
-         doubleClick: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onDoubleClick: true }),
-             captured: keyOf({ onDoubleClickCapture: true })
+       
+         /**
+          * Updates this component by updating the text content.
+          *
+          * @param {ReactText} nextText The next text content
+          * @param {ReactReconcileTransaction} transaction
+          * @internal
+          */
+         receiveComponent: function (nextText, transaction) {
+           if (nextText !== this._currentElement) {
+             this._currentElement = nextText;
+             var nextStringText = '' + nextText;
+             if (nextStringText !== this._stringText) {
+               // TODO: Save this as pending props and use performUpdateIfNecessary
+               // and/or updateComponent to do the actual update for consistency with
+               // other component types?
+               this._stringText = nextStringText;
+               var commentNodes = this.getHostNode();
+               DOMChildrenOperations.replaceDelimitedText(commentNodes[0], commentNodes[1], nextStringText);
+       
+               if (process.env.NODE_ENV !== 'production') {
+                 ReactInstrumentation.debugTool.onSetText(this._debugID, nextStringText);
+               }
+             }
            }
          },
-         drag: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onDrag: true }),
-             captured: keyOf({ onDragCapture: true })
+       
+         getHostNode: function () {
+           var hostNode = this._commentNodes;
+           if (hostNode) {
+             return hostNode;
            }
-         },
-         dragEnd: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onDragEnd: true }),
-             captured: keyOf({ onDragEndCapture: true })
+           if (!this._closingComment) {
+             var openingComment = ReactDOMComponentTree.getNodeFromInstance(this);
+             var node = openingComment.nextSibling;
+             while (true) {
+               !(node != null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Missing closing comment for text component %s', this._domID) : _prodInvariant('67', this._domID) : void 0;
+               if (node.nodeType === 8 && node.nodeValue === ' /react-text ') {
+                 this._closingComment = node;
+                 break;
+               }
+               node = node.nextSibling;
+             }
            }
+           hostNode = [this._hostNode, this._closingComment];
+           this._commentNodes = hostNode;
+           return hostNode;
          },
-         dragEnter: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onDragEnter: true }),
-             captured: keyOf({ onDragEnterCapture: true })
-           }
-         },
-         dragExit: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onDragExit: true }),
-             captured: keyOf({ onDragExitCapture: true })
-           }
-         },
-         dragLeave: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onDragLeave: true }),
-             captured: keyOf({ onDragLeaveCapture: true })
-           }
-         },
-         dragOver: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onDragOver: true }),
-             captured: keyOf({ onDragOverCapture: true })
+       
+         unmountComponent: function () {
+           this._closingComment = null;
+           this._commentNodes = null;
+           ReactDOMComponentTree.uncacheNode(this);
+         }
+       
+       });
+       
+       module.exports = ReactDOMTextComponent;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
+
+/***/ },
+/* 143 */
+/***/ function(module, exports, __webpack_require__) {
+
+       /**
+        * Copyright 2013-present, 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.
+        *
+        * @providesModule ReactDefaultBatchingStrategy
+        */
+       
+       'use strict';
+       
+       var _assign = __webpack_require__(6);
+       
+       var ReactUpdates = __webpack_require__(59);
+       var Transaction = __webpack_require__(72);
+       
+       var emptyFunction = __webpack_require__(14);
+       
+       var RESET_BATCHED_UPDATES = {
+         initialize: emptyFunction,
+         close: function () {
+           ReactDefaultBatchingStrategy.isBatchingUpdates = false;
+         }
+       };
+       
+       var FLUSH_BATCHED_UPDATES = {
+         initialize: emptyFunction,
+         close: ReactUpdates.flushBatchedUpdates.bind(ReactUpdates)
+       };
+       
+       var TRANSACTION_WRAPPERS = [FLUSH_BATCHED_UPDATES, RESET_BATCHED_UPDATES];
+       
+       function ReactDefaultBatchingStrategyTransaction() {
+         this.reinitializeTransaction();
+       }
+       
+       _assign(ReactDefaultBatchingStrategyTransaction.prototype, Transaction.Mixin, {
+         getTransactionWrappers: function () {
+           return TRANSACTION_WRAPPERS;
+         }
+       });
+       
+       var transaction = new ReactDefaultBatchingStrategyTransaction();
+       
+       var ReactDefaultBatchingStrategy = {
+         isBatchingUpdates: false,
+       
+         /**
+          * Call the provided function in a context within which calls to `setState`
+          * and friends are batched such that components aren't updated unnecessarily.
+          */
+         batchedUpdates: function (callback, a, b, c, d, e) {
+           var alreadyBatchingUpdates = ReactDefaultBatchingStrategy.isBatchingUpdates;
+       
+           ReactDefaultBatchingStrategy.isBatchingUpdates = true;
+       
+           // The code is written this way to avoid extra allocations
+           if (alreadyBatchingUpdates) {
+             callback(a, b, c, d, e);
+           } else {
+             transaction.perform(callback, null, a, b, c, d, e);
            }
+         }
+       };
+       
+       module.exports = ReactDefaultBatchingStrategy;
+
+/***/ },
+/* 144 */
+/***/ function(module, exports, __webpack_require__) {
+
+       /**
+        * Copyright 2013-present, 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.
+        *
+        * @providesModule ReactEventListener
+        */
+       
+       'use strict';
+       
+       var _assign = __webpack_require__(6);
+       
+       var EventListener = __webpack_require__(145);
+       var ExecutionEnvironment = __webpack_require__(52);
+       var PooledClass = __webpack_require__(8);
+       var ReactDOMComponentTree = __webpack_require__(39);
+       var ReactUpdates = __webpack_require__(59);
+       
+       var getEventTarget = __webpack_require__(73);
+       var getUnboundedScrollPosition = __webpack_require__(146);
+       
+       /**
+        * Find the deepest React component completely containing the root of the
+        * passed-in instance (for use when entire React trees are nested within each
+        * other). If React trees are not nested, returns null.
+        */
+       function findParent(inst) {
+         // TODO: It may be a good idea to cache this to prevent unnecessary DOM
+         // traversal, but caching is difficult to do correctly without using a
+         // mutation observer to listen for all DOM changes.
+         while (inst._hostParent) {
+           inst = inst._hostParent;
+         }
+         var rootNode = ReactDOMComponentTree.getNodeFromInstance(inst);
+         var container = rootNode.parentNode;
+         return ReactDOMComponentTree.getClosestInstanceFromNode(container);
+       }
+       
+       // Used to store ancestor hierarchy in top level callback
+       function TopLevelCallbackBookKeeping(topLevelType, nativeEvent) {
+         this.topLevelType = topLevelType;
+         this.nativeEvent = nativeEvent;
+         this.ancestors = [];
+       }
+       _assign(TopLevelCallbackBookKeeping.prototype, {
+         destructor: function () {
+           this.topLevelType = null;
+           this.nativeEvent = null;
+           this.ancestors.length = 0;
+         }
+       });
+       PooledClass.addPoolingTo(TopLevelCallbackBookKeeping, PooledClass.twoArgumentPooler);
+       
+       function handleTopLevelImpl(bookKeeping) {
+         var nativeEventTarget = getEventTarget(bookKeeping.nativeEvent);
+         var targetInst = ReactDOMComponentTree.getClosestInstanceFromNode(nativeEventTarget);
+       
+         // Loop through the hierarchy, in case there's any nested components.
+         // It's important that we build the array of ancestors before calling any
+         // event handlers, because event handlers can modify the DOM, leading to
+         // inconsistencies with ReactMount's node cache. See #1105.
+         var ancestor = targetInst;
+         do {
+           bookKeeping.ancestors.push(ancestor);
+           ancestor = ancestor && findParent(ancestor);
+         } while (ancestor);
+       
+         for (var i = 0; i < bookKeeping.ancestors.length; i++) {
+           targetInst = bookKeeping.ancestors[i];
+           ReactEventListener._handleTopLevel(bookKeeping.topLevelType, targetInst, bookKeeping.nativeEvent, getEventTarget(bookKeeping.nativeEvent));
+         }
+       }
+       
+       function scrollValueMonitor(cb) {
+         var scrollPosition = getUnboundedScrollPosition(window);
+         cb(scrollPosition);
+       }
+       
+       var ReactEventListener = {
+         _enabled: true,
+         _handleTopLevel: null,
+       
+         WINDOW_HANDLE: ExecutionEnvironment.canUseDOM ? window : null,
+       
+         setHandleTopLevel: function (handleTopLevel) {
+           ReactEventListener._handleTopLevel = handleTopLevel;
          },
-         dragStart: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onDragStart: true }),
-             captured: keyOf({ onDragStartCapture: true })
-           }
+       
+         setEnabled: function (enabled) {
+           ReactEventListener._enabled = !!enabled;
          },
-         drop: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onDrop: true }),
-             captured: keyOf({ onDropCapture: true })
-           }
+       
+         isEnabled: function () {
+           return ReactEventListener._enabled;
          },
-         durationChange: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onDurationChange: true }),
-             captured: keyOf({ onDurationChangeCapture: true })
+       
+         /**
+          * Traps top-level events by using event bubbling.
+          *
+          * @param {string} topLevelType Record from `EventConstants`.
+          * @param {string} handlerBaseName Event name (e.g. "click").
+          * @param {object} handle Element on which to attach listener.
+          * @return {?object} An object with a remove function which will forcefully
+          *                  remove the listener.
+          * @internal
+          */
+         trapBubbledEvent: function (topLevelType, handlerBaseName, handle) {
+           var element = handle;
+           if (!element) {
+             return null;
            }
+           return EventListener.listen(element, handlerBaseName, ReactEventListener.dispatchEvent.bind(null, topLevelType));
          },
-         emptied: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onEmptied: true }),
-             captured: keyOf({ onEmptiedCapture: true })
+       
+         /**
+          * Traps a top-level event by using event capturing.
+          *
+          * @param {string} topLevelType Record from `EventConstants`.
+          * @param {string} handlerBaseName Event name (e.g. "click").
+          * @param {object} handle Element on which to attach listener.
+          * @return {?object} An object with a remove function which will forcefully
+          *                  remove the listener.
+          * @internal
+          */
+         trapCapturedEvent: function (topLevelType, handlerBaseName, handle) {
+           var element = handle;
+           if (!element) {
+             return null;
            }
+           return EventListener.capture(element, handlerBaseName, ReactEventListener.dispatchEvent.bind(null, topLevelType));
          },
-         encrypted: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onEncrypted: true }),
-             captured: keyOf({ onEncryptedCapture: true })
-           }
+       
+         monitorScrollValue: function (refresh) {
+           var callback = scrollValueMonitor.bind(null, refresh);
+           EventListener.listen(window, 'scroll', callback);
          },
-         ended: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onEnded: true }),
-             captured: keyOf({ onEndedCapture: true })
+       
+         dispatchEvent: function (topLevelType, nativeEvent) {
+           if (!ReactEventListener._enabled) {
+             return;
            }
-         },
-         error: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onError: true }),
-             captured: keyOf({ onErrorCapture: true })
+       
+           var bookKeeping = TopLevelCallbackBookKeeping.getPooled(topLevelType, nativeEvent);
+           try {
+             // Event queue being processed in the same cycle allows
+             // `preventDefault`.
+             ReactUpdates.batchedUpdates(handleTopLevelImpl, bookKeeping);
+           } finally {
+             TopLevelCallbackBookKeeping.release(bookKeeping);
            }
-         },
-         focus: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onFocus: true }),
-             captured: keyOf({ onFocusCapture: true })
+         }
+       };
+       
+       module.exports = ReactEventListener;
+
+/***/ },
+/* 145 */
+/***/ function(module, exports, __webpack_require__) {
+
+       /* WEBPACK VAR INJECTION */(function(process) {'use strict';
+       
+       /**
+        * Copyright (c) 2013-present, Facebook, Inc.
+        *
+        * Licensed under the Apache License, Version 2.0 (the "License");
+        * you may not use this file except in compliance with the License.
+        * You may obtain a copy of the License at
+        *
+        * http://www.apache.org/licenses/LICENSE-2.0
+        *
+        * Unless required by applicable law or agreed to in writing, software
+        * distributed under the License is distributed on an "AS IS" BASIS,
+        * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+        * See the License for the specific language governing permissions and
+        * limitations under the License.
+        *
+        * @typechecks
+        */
+       
+       var emptyFunction = __webpack_require__(14);
+       
+       /**
+        * Upstream version of event listener. Does not take into account specific
+        * nature of platform.
+        */
+       var EventListener = {
+         /**
+          * Listen to DOM events during the bubble phase.
+          *
+          * @param {DOMEventTarget} target DOM element to register listener on.
+          * @param {string} eventType Event type, e.g. 'click' or 'mouseover'.
+          * @param {function} callback Callback function.
+          * @return {object} Object with a `remove` method.
+          */
+         listen: function listen(target, eventType, callback) {
+           if (target.addEventListener) {
+             target.addEventListener(eventType, callback, false);
+             return {
+               remove: function remove() {
+                 target.removeEventListener(eventType, callback, false);
+               }
+             };
+           } else if (target.attachEvent) {
+             target.attachEvent('on' + eventType, callback);
+             return {
+               remove: function remove() {
+                 target.detachEvent('on' + eventType, callback);
+               }
+             };
            }
          },
-         input: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onInput: true }),
-             captured: keyOf({ onInputCapture: true })
+       
+         /**
+          * Listen to DOM events during the capture phase.
+          *
+          * @param {DOMEventTarget} target DOM element to register listener on.
+          * @param {string} eventType Event type, e.g. 'click' or 'mouseover'.
+          * @param {function} callback Callback function.
+          * @return {object} Object with a `remove` method.
+          */
+         capture: function capture(target, eventType, callback) {
+           if (target.addEventListener) {
+             target.addEventListener(eventType, callback, true);
+             return {
+               remove: function remove() {
+                 target.removeEventListener(eventType, callback, true);
+               }
+             };
+           } else {
+             if (process.env.NODE_ENV !== 'production') {
+               console.error('Attempted to listen to events during the capture phase on a ' + 'browser that does not support the capture phase. Your application ' + 'will not receive some events.');
+             }
+             return {
+               remove: emptyFunction
+             };
            }
          },
-         keyDown: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onKeyDown: true }),
-             captured: keyOf({ onKeyDownCapture: true })
-           }
-         },
-         keyPress: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onKeyPress: true }),
-             captured: keyOf({ onKeyPressCapture: true })
-           }
-         },
-         keyUp: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onKeyUp: true }),
-             captured: keyOf({ onKeyUpCapture: true })
-           }
+       
+         registerDefault: function registerDefault() {}
+       };
+       
+       module.exports = EventListener;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
+
+/***/ },
+/* 146 */
+/***/ function(module, exports) {
+
+       /**
+        * Copyright (c) 2013-present, 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.
+        *
+        * @typechecks
+        */
+       
+       'use strict';
+       
+       /**
+        * Gets the scroll position of the supplied element or window.
+        *
+        * The return values are unbounded, unlike `getScrollPosition`. This means they
+        * may be negative or exceed the element boundaries (which is possible using
+        * inertial scrolling).
+        *
+        * @param {DOMWindow|DOMElement} scrollable
+        * @return {object} Map with `x` and `y` keys.
+        */
+       
+       function getUnboundedScrollPosition(scrollable) {
+         if (scrollable === window) {
+           return {
+             x: window.pageXOffset || document.documentElement.scrollLeft,
+             y: window.pageYOffset || document.documentElement.scrollTop
+           };
+         }
+         return {
+           x: scrollable.scrollLeft,
+           y: scrollable.scrollTop
+         };
+       }
+       
+       module.exports = getUnboundedScrollPosition;
+
+/***/ },
+/* 147 */
+/***/ function(module, exports, __webpack_require__) {
+
+       /**
+        * Copyright 2013-present, 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.
+        *
+        * @providesModule ReactInjection
+        */
+       
+       'use strict';
+       
+       var DOMProperty = __webpack_require__(40);
+       var EventPluginHub = __webpack_require__(46);
+       var EventPluginUtils = __webpack_require__(48);
+       var ReactComponentEnvironment = __webpack_require__(125);
+       var ReactClass = __webpack_require__(23);
+       var ReactEmptyComponent = __webpack_require__(133);
+       var ReactBrowserEventEmitter = __webpack_require__(114);
+       var ReactHostComponent = __webpack_require__(134);
+       var ReactUpdates = __webpack_require__(59);
+       
+       var ReactInjection = {
+         Component: ReactComponentEnvironment.injection,
+         Class: ReactClass.injection,
+         DOMProperty: DOMProperty.injection,
+         EmptyComponent: ReactEmptyComponent.injection,
+         EventPluginHub: EventPluginHub.injection,
+         EventPluginUtils: EventPluginUtils.injection,
+         EventEmitter: ReactBrowserEventEmitter.injection,
+         HostComponent: ReactHostComponent.injection,
+         Updates: ReactUpdates.injection
+       };
+       
+       module.exports = ReactInjection;
+
+/***/ },
+/* 148 */
+/***/ function(module, exports, __webpack_require__) {
+
+       /* WEBPACK VAR INJECTION */(function(process) {/**
+        * Copyright 2013-present, 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.
+        *
+        * @providesModule ReactReconcileTransaction
+        */
+       
+       'use strict';
+       
+       var _assign = __webpack_require__(6);
+       
+       var CallbackQueue = __webpack_require__(60);
+       var PooledClass = __webpack_require__(8);
+       var ReactBrowserEventEmitter = __webpack_require__(114);
+       var ReactInputSelection = __webpack_require__(149);
+       var ReactInstrumentation = __webpack_require__(65);
+       var Transaction = __webpack_require__(72);
+       var ReactUpdateQueue = __webpack_require__(138);
+       
+       /**
+        * Ensures that, when possible, the selection range (currently selected text
+        * input) is not disturbed by performing the transaction.
+        */
+       var SELECTION_RESTORATION = {
+         /**
+          * @return {Selection} Selection information.
+          */
+         initialize: ReactInputSelection.getSelectionInformation,
+         /**
+          * @param {Selection} sel Selection information returned from `initialize`.
+          */
+         close: ReactInputSelection.restoreSelection
+       };
+       
+       /**
+        * Suppresses events (blur/focus) that could be inadvertently dispatched due to
+        * high level DOM manipulations (like temporarily removing a text input from the
+        * DOM).
+        */
+       var EVENT_SUPPRESSION = {
+         /**
+          * @return {boolean} The enabled status of `ReactBrowserEventEmitter` before
+          * the reconciliation.
+          */
+         initialize: function () {
+           var currentlyEnabled = ReactBrowserEventEmitter.isEnabled();
+           ReactBrowserEventEmitter.setEnabled(false);
+           return currentlyEnabled;
          },
-         load: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onLoad: true }),
-             captured: keyOf({ onLoadCapture: true })
-           }
+       
+         /**
+          * @param {boolean} previouslyEnabled Enabled status of
+          *   `ReactBrowserEventEmitter` before the reconciliation occurred. `close`
+          *   restores the previous value.
+          */
+         close: function (previouslyEnabled) {
+           ReactBrowserEventEmitter.setEnabled(previouslyEnabled);
+         }
+       };
+       
+       /**
+        * Provides a queue for collecting `componentDidMount` and
+        * `componentDidUpdate` callbacks during the transaction.
+        */
+       var ON_DOM_READY_QUEUEING = {
+         /**
+          * Initializes the internal `onDOMReady` queue.
+          */
+         initialize: function () {
+           this.reactMountReady.reset();
          },
-         loadedData: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onLoadedData: true }),
-             captured: keyOf({ onLoadedDataCapture: true })
-           }
+       
+         /**
+          * After DOM is flushed, invoke all registered `onDOMReady` callbacks.
+          */
+         close: function () {
+           this.reactMountReady.notifyAll();
+         }
+       };
+       
+       /**
+        * Executed within the scope of the `Transaction` instance. Consider these as
+        * being member methods, but with an implied ordering while being isolated from
+        * each other.
+        */
+       var TRANSACTION_WRAPPERS = [SELECTION_RESTORATION, EVENT_SUPPRESSION, ON_DOM_READY_QUEUEING];
+       
+       if (process.env.NODE_ENV !== 'production') {
+         TRANSACTION_WRAPPERS.push({
+           initialize: ReactInstrumentation.debugTool.onBeginFlush,
+           close: ReactInstrumentation.debugTool.onEndFlush
+         });
+       }
+       
+       /**
+        * Currently:
+        * - The order that these are listed in the transaction is critical:
+        * - Suppresses events.
+        * - Restores selection range.
+        *
+        * Future:
+        * - Restore document/overflow scroll positions that were unintentionally
+        *   modified via DOM insertions above the top viewport boundary.
+        * - Implement/integrate with customized constraint based layout system and keep
+        *   track of which dimensions must be remeasured.
+        *
+        * @class ReactReconcileTransaction
+        */
+       function ReactReconcileTransaction(useCreateElement) {
+         this.reinitializeTransaction();
+         // Only server-side rendering really needs this option (see
+         // `ReactServerRendering`), but server-side uses
+         // `ReactServerRenderingTransaction` instead. This option is here so that it's
+         // accessible and defaults to false when `ReactDOMComponent` and
+         // `ReactDOMTextComponent` checks it in `mountComponent`.`
+         this.renderToStaticMarkup = false;
+         this.reactMountReady = CallbackQueue.getPooled(null);
+         this.useCreateElement = useCreateElement;
+       }
+       
+       var Mixin = {
+         /**
+          * @see Transaction
+          * @abstract
+          * @final
+          * @return {array<object>} List of operation wrap procedures.
+          *   TODO: convert to array<TransactionWrapper>
+          */
+         getTransactionWrappers: function () {
+           return TRANSACTION_WRAPPERS;
          },
-         loadedMetadata: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onLoadedMetadata: true }),
-             captured: keyOf({ onLoadedMetadataCapture: true })
-           }
+       
+         /**
+          * @return {object} The queue to collect `onDOMReady` callbacks with.
+          */
+         getReactMountReady: function () {
+           return this.reactMountReady;
          },
-         loadStart: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onLoadStart: true }),
-             captured: keyOf({ onLoadStartCapture: true })
-           }
+       
+         /**
+          * @return {object} The queue to collect React async events.
+          */
+         getUpdateQueue: function () {
+           return ReactUpdateQueue;
          },
-         // Note: We do not allow listening to mouseOver events. Instead, use the
-         // onMouseEnter/onMouseLeave created by `EnterLeaveEventPlugin`.
-         mouseDown: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onMouseDown: true }),
-             captured: keyOf({ onMouseDownCapture: true })
-           }
+       
+         /**
+          * Save current transaction state -- if the return value from this method is
+          * passed to `rollback`, the transaction will be reset to that state.
+          */
+         checkpoint: function () {
+           // reactMountReady is the our only stateful wrapper
+           return this.reactMountReady.checkpoint();
          },
-         mouseMove: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onMouseMove: true }),
-             captured: keyOf({ onMouseMoveCapture: true })
-           }
+       
+         rollback: function (checkpoint) {
+           this.reactMountReady.rollback(checkpoint);
          },
-         mouseOut: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onMouseOut: true }),
-             captured: keyOf({ onMouseOutCapture: true })
-           }
-         },
-         mouseOver: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onMouseOver: true }),
-             captured: keyOf({ onMouseOverCapture: true })
-           }
-         },
-         mouseUp: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onMouseUp: true }),
-             captured: keyOf({ onMouseUpCapture: true })
-           }
-         },
-         paste: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onPaste: true }),
-             captured: keyOf({ onPasteCapture: true })
-           }
-         },
-         pause: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onPause: true }),
-             captured: keyOf({ onPauseCapture: true })
-           }
-         },
-         play: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onPlay: true }),
-             captured: keyOf({ onPlayCapture: true })
-           }
-         },
-         playing: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onPlaying: true }),
-             captured: keyOf({ onPlayingCapture: true })
-           }
-         },
-         progress: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onProgress: true }),
-             captured: keyOf({ onProgressCapture: true })
-           }
-         },
-         rateChange: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onRateChange: true }),
-             captured: keyOf({ onRateChangeCapture: true })
-           }
-         },
-         reset: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onReset: true }),
-             captured: keyOf({ onResetCapture: true })
-           }
-         },
-         scroll: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onScroll: true }),
-             captured: keyOf({ onScrollCapture: true })
-           }
-         },
-         seeked: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onSeeked: true }),
-             captured: keyOf({ onSeekedCapture: true })
-           }
-         },
-         seeking: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onSeeking: true }),
-             captured: keyOf({ onSeekingCapture: true })
-           }
-         },
-         stalled: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onStalled: true }),
-             captured: keyOf({ onStalledCapture: true })
-           }
-         },
-         submit: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onSubmit: true }),
-             captured: keyOf({ onSubmitCapture: true })
-           }
-         },
-         suspend: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onSuspend: true }),
-             captured: keyOf({ onSuspendCapture: true })
-           }
-         },
-         timeUpdate: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onTimeUpdate: true }),
-             captured: keyOf({ onTimeUpdateCapture: true })
-           }
-         },
-         touchCancel: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onTouchCancel: true }),
-             captured: keyOf({ onTouchCancelCapture: true })
-           }
-         },
-         touchEnd: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onTouchEnd: true }),
-             captured: keyOf({ onTouchEndCapture: true })
-           }
-         },
-         touchMove: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onTouchMove: true }),
-             captured: keyOf({ onTouchMoveCapture: true })
-           }
+       
+         /**
+          * `PooledClass` looks for this, and will invoke this before allowing this
+          * instance to be reused.
+          */
+         destructor: function () {
+           CallbackQueue.release(this.reactMountReady);
+           this.reactMountReady = null;
+         }
+       };
+       
+       _assign(ReactReconcileTransaction.prototype, Transaction.Mixin, Mixin);
+       
+       PooledClass.addPoolingTo(ReactReconcileTransaction);
+       
+       module.exports = ReactReconcileTransaction;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
+
+/***/ },
+/* 149 */
+/***/ function(module, exports, __webpack_require__) {
+
+       /**
+        * Copyright 2013-present, 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.
+        *
+        * @providesModule ReactInputSelection
+        */
+       
+       'use strict';
+       
+       var ReactDOMSelection = __webpack_require__(150);
+       
+       var containsNode = __webpack_require__(152);
+       var focusNode = __webpack_require__(99);
+       var getActiveElement = __webpack_require__(155);
+       
+       function isInDocument(node) {
+         return containsNode(document.documentElement, node);
+       }
+       
+       /**
+        * @ReactInputSelection: React input selection module. Based on Selection.js,
+        * but modified to be suitable for react and has a couple of bug fixes (doesn't
+        * assume buttons have range selections allowed).
+        * Input selection module for React.
+        */
+       var ReactInputSelection = {
+       
+         hasSelectionCapabilities: function (elem) {
+           var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();
+           return nodeName && (nodeName === 'input' && elem.type === 'text' || nodeName === 'textarea' || elem.contentEditable === 'true');
          },
-         touchStart: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onTouchStart: true }),
-             captured: keyOf({ onTouchStartCapture: true })
-           }
+       
+         getSelectionInformation: function () {
+           var focusedElem = getActiveElement();
+           return {
+             focusedElem: focusedElem,
+             selectionRange: ReactInputSelection.hasSelectionCapabilities(focusedElem) ? ReactInputSelection.getSelection(focusedElem) : null
+           };
          },
-         volumeChange: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onVolumeChange: true }),
-             captured: keyOf({ onVolumeChangeCapture: true })
+       
+         /**
+          * @restoreSelection: If any selection information was potentially lost,
+          * restore it. This is useful when performing operations that could remove dom
+          * nodes and place them back in, resulting in focus being lost.
+          */
+         restoreSelection: function (priorSelectionInformation) {
+           var curFocusedElem = getActiveElement();
+           var priorFocusedElem = priorSelectionInformation.focusedElem;
+           var priorSelectionRange = priorSelectionInformation.selectionRange;
+           if (curFocusedElem !== priorFocusedElem && isInDocument(priorFocusedElem)) {
+             if (ReactInputSelection.hasSelectionCapabilities(priorFocusedElem)) {
+               ReactInputSelection.setSelection(priorFocusedElem, priorSelectionRange);
+             }
+             focusNode(priorFocusedElem);
            }
          },
-         waiting: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onWaiting: true }),
-             captured: keyOf({ onWaitingCapture: true })
+       
+         /**
+          * @getSelection: Gets the selection bounds of a focused textarea, input or
+          * contentEditable node.
+          * -@input: Look up selection bounds of this input
+          * -@return {start: selectionStart, end: selectionEnd}
+          */
+         getSelection: function (input) {
+           var selection;
+       
+           if ('selectionStart' in input) {
+             // Modern browser with input or textarea.
+             selection = {
+               start: input.selectionStart,
+               end: input.selectionEnd
+             };
+           } else if (document.selection && input.nodeName && input.nodeName.toLowerCase() === 'input') {
+             // IE8 input.
+             var range = document.selection.createRange();
+             // There can only be one selection per document in IE, so it must
+             // be in our element.
+             if (range.parentElement() === input) {
+               selection = {
+                 start: -range.moveStart('character', -input.value.length),
+                 end: -range.moveEnd('character', -input.value.length)
+               };
+             }
+           } else {
+             // Content editable or old IE textarea.
+             selection = ReactDOMSelection.getOffsets(input);
            }
+       
+           return selection || { start: 0, end: 0 };
          },
-         wheel: {
-           phasedRegistrationNames: {
-             bubbled: keyOf({ onWheel: true }),
-             captured: keyOf({ onWheelCapture: true })
+       
+         /**
+          * @setSelection: Sets the selection bounds of a textarea or input and focuses
+          * the input.
+          * -@input     Set selection bounds of this input or textarea
+          * -@offsets   Object of same form that is returned from get*
+          */
+         setSelection: function (input, offsets) {
+           var start = offsets.start;
+           var end = offsets.end;
+           if (end === undefined) {
+             end = start;
            }
-         }
-       };
        
-       var topLevelEventsToDispatchConfig = {
-         topAbort: eventTypes.abort,
-         topBlur: eventTypes.blur,
-         topCanPlay: eventTypes.canPlay,
-         topCanPlayThrough: eventTypes.canPlayThrough,
+           if ('selectionStart' in input) {
+             input.selectionStart = start;
+             input.selectionEnd = Math.min(end, input.value.length);
+           } else if (document.selection && input.nodeName && input.nodeName.toLowerCase() === 'input') {
+             var range = input.createTextRange();
+             range.collapse(true);
+             range.moveStart('character', start);
+             range.moveEnd('character', end - start);
+             range.select();
+           } else {
+             ReactDOMSelection.setOffsets(input, offsets);
+           }
+         }
+       };
+       
+       module.exports = ReactInputSelection;
+
+/***/ },
+/* 150 */
+/***/ function(module, exports, __webpack_require__) {
+
+       /**
+        * Copyright 2013-present, 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.
+        *
+        * @providesModule ReactDOMSelection
+        */
+       
+       'use strict';
+       
+       var ExecutionEnvironment = __webpack_require__(52);
+       
+       var getNodeForCharacterOffset = __webpack_require__(151);
+       var getTextContentAccessor = __webpack_require__(54);
+       
+       /**
+        * While `isCollapsed` is available on the Selection object and `collapsed`
+        * is available on the Range object, IE11 sometimes gets them wrong.
+        * If the anchor/focus nodes and offsets are the same, the range is collapsed.
+        */
+       function isCollapsed(anchorNode, anchorOffset, focusNode, focusOffset) {
+         return anchorNode === focusNode && anchorOffset === focusOffset;
+       }
+       
+       /**
+        * Get the appropriate anchor and focus node/offset pairs for IE.
+        *
+        * The catch here is that IE's selection API doesn't provide information
+        * about whether the selection is forward or backward, so we have to
+        * behave as though it's always forward.
+        *
+        * IE text differs from modern selection in that it behaves as though
+        * block elements end with a new line. This means character offsets will
+        * differ between the two APIs.
+        *
+        * @param {DOMElement} node
+        * @return {object}
+        */
+       function getIEOffsets(node) {
+         var selection = document.selection;
+         var selectedRange = selection.createRange();
+         var selectedLength = selectedRange.text.length;
+       
+         // Duplicate selection so we can move range without breaking user selection.
+         var fromStart = selectedRange.duplicate();
+         fromStart.moveToElementText(node);
+         fromStart.setEndPoint('EndToStart', selectedRange);
+       
+         var startOffset = fromStart.text.length;
+         var endOffset = startOffset + selectedLength;
+       
+         return {
+           start: startOffset,
+           end: endOffset
+         };
+       }
+       
+       /**
+        * @param {DOMElement} node
+        * @return {?object}
+        */
+       function getModernOffsets(node) {
+         var selection = window.getSelection && window.getSelection();
+       
+         if (!selection || selection.rangeCount === 0) {
+           return null;
+         }
+       
+         var anchorNode = selection.anchorNode;
+         var anchorOffset = selection.anchorOffset;
+         var focusNode = selection.focusNode;
+         var focusOffset = selection.focusOffset;
+       
+         var currentRange = selection.getRangeAt(0);
+       
+         // In Firefox, range.startContainer and range.endContainer can be "anonymous
+         // divs", e.g. the up/down buttons on an <input type="number">. Anonymous
+         // divs do not seem to expose properties, triggering a "Permission denied
+         // error" if any of its properties are accessed. The only seemingly possible
+         // way to avoid erroring is to access a property that typically works for
+         // non-anonymous divs and catch any error that may otherwise arise. See
+         // https://bugzilla.mozilla.org/show_bug.cgi?id=208427
+         try {
+           /* eslint-disable no-unused-expressions */
+           currentRange.startContainer.nodeType;
+           currentRange.endContainer.nodeType;
+           /* eslint-enable no-unused-expressions */
+         } catch (e) {
+           return null;
+         }
+       
+         // If the node and offset values are the same, the selection is collapsed.
+         // `Selection.isCollapsed` is available natively, but IE sometimes gets
+         // this value wrong.
+         var isSelectionCollapsed = isCollapsed(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);
+       
+         var rangeLength = isSelectionCollapsed ? 0 : currentRange.toString().length;
+       
+         var tempRange = currentRange.cloneRange();
+         tempRange.selectNodeContents(node);
+         tempRange.setEnd(currentRange.startContainer, currentRange.startOffset);
+       
+         var isTempRangeCollapsed = isCollapsed(tempRange.startContainer, tempRange.startOffset, tempRange.endContainer, tempRange.endOffset);
+       
+         var start = isTempRangeCollapsed ? 0 : tempRange.toString().length;
+         var end = start + rangeLength;
+       
+         // Detect whether the selection is backward.
+         var detectionRange = document.createRange();
+         detectionRange.setStart(anchorNode, anchorOffset);
+         detectionRange.setEnd(focusNode, focusOffset);
+         var isBackward = detectionRange.collapsed;
+       
+         return {
+           start: isBackward ? end : start,
+           end: isBackward ? start : end
+         };
+       }
+       
+       /**
+        * @param {DOMElement|DOMTextNode} node
+        * @param {object} offsets
+        */
+       function setIEOffsets(node, offsets) {
+         var range = document.selection.createRange().duplicate();
+         var start, end;
+       
+         if (offsets.end === undefined) {
+           start = offsets.start;
+           end = start;
+         } else if (offsets.start > offsets.end) {
+           start = offsets.end;
+           end = offsets.start;
+         } else {
+           start = offsets.start;
+           end = offsets.end;
+         }
+       
+         range.moveToElementText(node);
+         range.moveStart('character', start);
+         range.setEndPoint('EndToStart', range);
+         range.moveEnd('character', end - start);
+         range.select();
+       }
+       
+       /**
+        * In modern non-IE browsers, we can support both forward and backward
+        * selections.
+        *
+        * Note: IE10+ supports the Selection object, but it does not support
+        * the `extend` method, which means that even in modern IE, it's not possible
+        * to programmatically create a backward selection. Thus, for all IE
+        * versions, we use the old IE API to create our selections.
+        *
+        * @param {DOMElement|DOMTextNode} node
+        * @param {object} offsets
+        */
+       function setModernOffsets(node, offsets) {
+         if (!window.getSelection) {
+           return;
+         }
+       
+         var selection = window.getSelection();
+         var length = node[getTextContentAccessor()].length;
+         var start = Math.min(offsets.start, length);
+         var end = offsets.end === undefined ? start : Math.min(offsets.end, length);
+       
+         // IE 11 uses modern selection, but doesn't support the extend method.
+         // Flip backward selections, so we can set with a single range.
+         if (!selection.extend && start > end) {
+           var temp = end;
+           end = start;
+           start = temp;
+         }
+       
+         var startMarker = getNodeForCharacterOffset(node, start);
+         var endMarker = getNodeForCharacterOffset(node, end);
+       
+         if (startMarker && endMarker) {
+           var range = document.createRange();
+           range.setStart(startMarker.node, startMarker.offset);
+           selection.removeAllRanges();
+       
+           if (start > end) {
+             selection.addRange(range);
+             selection.extend(endMarker.node, endMarker.offset);
+           } else {
+             range.setEnd(endMarker.node, endMarker.offset);
+             selection.addRange(range);
+           }
+         }
+       }
+       
+       var useIEOffsets = ExecutionEnvironment.canUseDOM && 'selection' in document && !('getSelection' in window);
+       
+       var ReactDOMSelection = {
+         /**
+          * @param {DOMElement} node
+          */
+         getOffsets: useIEOffsets ? getIEOffsets : getModernOffsets,
+       
+         /**
+          * @param {DOMElement|DOMTextNode} node
+          * @param {object} offsets
+          */
+         setOffsets: useIEOffsets ? setIEOffsets : setModernOffsets
+       };
+       
+       module.exports = ReactDOMSelection;
+
+/***/ },
+/* 151 */
+/***/ function(module, exports) {
+
+       /**
+        * Copyright 2013-present, 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.
+        *
+        * @providesModule getNodeForCharacterOffset
+        */
+       
+       'use strict';
+       
+       /**
+        * Given any node return the first leaf node without children.
+        *
+        * @param {DOMElement|DOMTextNode} node
+        * @return {DOMElement|DOMTextNode}
+        */
+       
+       function getLeafNode(node) {
+         while (node && node.firstChild) {
+           node = node.firstChild;
+         }
+         return node;
+       }
+       
+       /**
+        * Get the next sibling within a container. This will walk up the
+        * DOM if a node's siblings have been exhausted.
+        *
+        * @param {DOMElement|DOMTextNode} node
+        * @return {?DOMElement|DOMTextNode}
+        */
+       function getSiblingNode(node) {
+         while (node) {
+           if (node.nextSibling) {
+             return node.nextSibling;
+           }
+           node = node.parentNode;
+         }
+       }
+       
+       /**
+        * Get object describing the nodes which contain characters at offset.
+        *
+        * @param {DOMElement|DOMTextNode} root
+        * @param {number} offset
+        * @return {?object}
+        */
+       function getNodeForCharacterOffset(root, offset) {
+         var node = getLeafNode(root);
+         var nodeStart = 0;
+         var nodeEnd = 0;
+       
+         while (node) {
+           if (node.nodeType === 3) {
+             nodeEnd = nodeStart + node.textContent.length;
+       
+             if (nodeStart <= offset && nodeEnd >= offset) {
+               return {
+                 node: node,
+                 offset: offset - nodeStart
+               };
+             }
+       
+             nodeStart = nodeEnd;
+           }
+       
+           node = getLeafNode(getSiblingNode(node));
+         }
+       }
+       
+       module.exports = getNodeForCharacterOffset;
+
+/***/ },
+/* 152 */
+/***/ function(module, exports, __webpack_require__) {
+
+       'use strict';
+       
+       /**
+        * Copyright (c) 2013-present, 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.
+        *
+        * 
+        */
+       
+       var isTextNode = __webpack_require__(153);
+       
+       /*eslint-disable no-bitwise */
+       
+       /**
+        * Checks if a given DOM node contains or is another DOM node.
+        */
+       function containsNode(outerNode, innerNode) {
+         if (!outerNode || !innerNode) {
+           return false;
+         } else if (outerNode === innerNode) {
+           return true;
+         } else if (isTextNode(outerNode)) {
+           return false;
+         } else if (isTextNode(innerNode)) {
+           return containsNode(outerNode, innerNode.parentNode);
+         } else if ('contains' in outerNode) {
+           return outerNode.contains(innerNode);
+         } else if (outerNode.compareDocumentPosition) {
+           return !!(outerNode.compareDocumentPosition(innerNode) & 16);
+         } else {
+           return false;
+         }
+       }
+       
+       module.exports = containsNode;
+
+/***/ },
+/* 153 */
+/***/ function(module, exports, __webpack_require__) {
+
+       'use strict';
+       
+       /**
+        * Copyright (c) 2013-present, 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.
+        *
+        * @typechecks
+        */
+       
+       var isNode = __webpack_require__(154);
+       
+       /**
+        * @param {*} object The object to check.
+        * @return {boolean} Whether or not the object is a DOM text node.
+        */
+       function isTextNode(object) {
+         return isNode(object) && object.nodeType == 3;
+       }
+       
+       module.exports = isTextNode;
+
+/***/ },
+/* 154 */
+/***/ function(module, exports) {
+
+       'use strict';
+       
+       /**
+        * Copyright (c) 2013-present, 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.
+        *
+        * @typechecks
+        */
+       
+       /**
+        * @param {*} object The object to check.
+        * @return {boolean} Whether or not the object is a DOM node.
+        */
+       function isNode(object) {
+         return !!(object && (typeof Node === 'function' ? object instanceof Node : typeof object === 'object' && typeof object.nodeType === 'number' && typeof object.nodeName === 'string'));
+       }
+       
+       module.exports = isNode;
+
+/***/ },
+/* 155 */
+/***/ function(module, exports) {
+
+       'use strict';
+       
+       /**
+        * Copyright (c) 2013-present, 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.
+        *
+        * @typechecks
+        */
+       
+       /* eslint-disable fb-www/typeof-undefined */
+       
+       /**
+        * Same as document.activeElement but wraps in a try-catch block. In IE it is
+        * not safe to call document.activeElement if there is nothing focused.
+        *
+        * The activeElement will be null only if the document or document body is not
+        * yet defined.
+        */
+       function getActiveElement() /*?DOMElement*/{
+         if (typeof document === 'undefined') {
+           return null;
+         }
+         try {
+           return document.activeElement || document.body;
+         } catch (e) {
+           return document.body;
+         }
+       }
+       
+       module.exports = getActiveElement;
+
+/***/ },
+/* 156 */
+/***/ function(module, exports) {
+
+       /**
+        * Copyright 2013-present, 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.
+        *
+        * @providesModule SVGDOMPropertyConfig
+        */
+       
+       'use strict';
+       
+       var NS = {
+         xlink: 'http://www.w3.org/1999/xlink',
+         xml: 'http://www.w3.org/XML/1998/namespace'
+       };
+       
+       // We use attributes for everything SVG so let's avoid some duplication and run
+       // code instead.
+       // The following are all specified in the HTML config already so we exclude here.
+       // - class (as className)
+       // - color
+       // - height
+       // - id
+       // - lang
+       // - max
+       // - media
+       // - method
+       // - min
+       // - name
+       // - style
+       // - target
+       // - type
+       // - width
+       var ATTRS = {
+         accentHeight: 'accent-height',
+         accumulate: 0,
+         additive: 0,
+         alignmentBaseline: 'alignment-baseline',
+         allowReorder: 'allowReorder',
+         alphabetic: 0,
+         amplitude: 0,
+         arabicForm: 'arabic-form',
+         ascent: 0,
+         attributeName: 'attributeName',
+         attributeType: 'attributeType',
+         autoReverse: 'autoReverse',
+         azimuth: 0,
+         baseFrequency: 'baseFrequency',
+         baseProfile: 'baseProfile',
+         baselineShift: 'baseline-shift',
+         bbox: 0,
+         begin: 0,
+         bias: 0,
+         by: 0,
+         calcMode: 'calcMode',
+         capHeight: 'cap-height',
+         clip: 0,
+         clipPath: 'clip-path',
+         clipRule: 'clip-rule',
+         clipPathUnits: 'clipPathUnits',
+         colorInterpolation: 'color-interpolation',
+         colorInterpolationFilters: 'color-interpolation-filters',
+         colorProfile: 'color-profile',
+         colorRendering: 'color-rendering',
+         contentScriptType: 'contentScriptType',
+         contentStyleType: 'contentStyleType',
+         cursor: 0,
+         cx: 0,
+         cy: 0,
+         d: 0,
+         decelerate: 0,
+         descent: 0,
+         diffuseConstant: 'diffuseConstant',
+         direction: 0,
+         display: 0,
+         divisor: 0,
+         dominantBaseline: 'dominant-baseline',
+         dur: 0,
+         dx: 0,
+         dy: 0,
+         edgeMode: 'edgeMode',
+         elevation: 0,
+         enableBackground: 'enable-background',
+         end: 0,
+         exponent: 0,
+         externalResourcesRequired: 'externalResourcesRequired',
+         fill: 0,
+         fillOpacity: 'fill-opacity',
+         fillRule: 'fill-rule',
+         filter: 0,
+         filterRes: 'filterRes',
+         filterUnits: 'filterUnits',
+         floodColor: 'flood-color',
+         floodOpacity: 'flood-opacity',
+         focusable: 0,
+         fontFamily: 'font-family',
+         fontSize: 'font-size',
+         fontSizeAdjust: 'font-size-adjust',
+         fontStretch: 'font-stretch',
+         fontStyle: 'font-style',
+         fontVariant: 'font-variant',
+         fontWeight: 'font-weight',
+         format: 0,
+         from: 0,
+         fx: 0,
+         fy: 0,
+         g1: 0,
+         g2: 0,
+         glyphName: 'glyph-name',
+         glyphOrientationHorizontal: 'glyph-orientation-horizontal',
+         glyphOrientationVertical: 'glyph-orientation-vertical',
+         glyphRef: 'glyphRef',
+         gradientTransform: 'gradientTransform',
+         gradientUnits: 'gradientUnits',
+         hanging: 0,
+         horizAdvX: 'horiz-adv-x',
+         horizOriginX: 'horiz-origin-x',
+         ideographic: 0,
+         imageRendering: 'image-rendering',
+         'in': 0,
+         in2: 0,
+         intercept: 0,
+         k: 0,
+         k1: 0,
+         k2: 0,
+         k3: 0,
+         k4: 0,
+         kernelMatrix: 'kernelMatrix',
+         kernelUnitLength: 'kernelUnitLength',
+         kerning: 0,
+         keyPoints: 'keyPoints',
+         keySplines: 'keySplines',
+         keyTimes: 'keyTimes',
+         lengthAdjust: 'lengthAdjust',
+         letterSpacing: 'letter-spacing',
+         lightingColor: 'lighting-color',
+         limitingConeAngle: 'limitingConeAngle',
+         local: 0,
+         markerEnd: 'marker-end',
+         markerMid: 'marker-mid',
+         markerStart: 'marker-start',
+         markerHeight: 'markerHeight',
+         markerUnits: 'markerUnits',
+         markerWidth: 'markerWidth',
+         mask: 0,
+         maskContentUnits: 'maskContentUnits',
+         maskUnits: 'maskUnits',
+         mathematical: 0,
+         mode: 0,
+         numOctaves: 'numOctaves',
+         offset: 0,
+         opacity: 0,
+         operator: 0,
+         order: 0,
+         orient: 0,
+         orientation: 0,
+         origin: 0,
+         overflow: 0,
+         overlinePosition: 'overline-position',
+         overlineThickness: 'overline-thickness',
+         paintOrder: 'paint-order',
+         panose1: 'panose-1',
+         pathLength: 'pathLength',
+         patternContentUnits: 'patternContentUnits',
+         patternTransform: 'patternTransform',
+         patternUnits: 'patternUnits',
+         pointerEvents: 'pointer-events',
+         points: 0,
+         pointsAtX: 'pointsAtX',
+         pointsAtY: 'pointsAtY',
+         pointsAtZ: 'pointsAtZ',
+         preserveAlpha: 'preserveAlpha',
+         preserveAspectRatio: 'preserveAspectRatio',
+         primitiveUnits: 'primitiveUnits',
+         r: 0,
+         radius: 0,
+         refX: 'refX',
+         refY: 'refY',
+         renderingIntent: 'rendering-intent',
+         repeatCount: 'repeatCount',
+         repeatDur: 'repeatDur',
+         requiredExtensions: 'requiredExtensions',
+         requiredFeatures: 'requiredFeatures',
+         restart: 0,
+         result: 0,
+         rotate: 0,
+         rx: 0,
+         ry: 0,
+         scale: 0,
+         seed: 0,
+         shapeRendering: 'shape-rendering',
+         slope: 0,
+         spacing: 0,
+         specularConstant: 'specularConstant',
+         specularExponent: 'specularExponent',
+         speed: 0,
+         spreadMethod: 'spreadMethod',
+         startOffset: 'startOffset',
+         stdDeviation: 'stdDeviation',
+         stemh: 0,
+         stemv: 0,
+         stitchTiles: 'stitchTiles',
+         stopColor: 'stop-color',
+         stopOpacity: 'stop-opacity',
+         strikethroughPosition: 'strikethrough-position',
+         strikethroughThickness: 'strikethrough-thickness',
+         string: 0,
+         stroke: 0,
+         strokeDasharray: 'stroke-dasharray',
+         strokeDashoffset: 'stroke-dashoffset',
+         strokeLinecap: 'stroke-linecap',
+         strokeLinejoin: 'stroke-linejoin',
+         strokeMiterlimit: 'stroke-miterlimit',
+         strokeOpacity: 'stroke-opacity',
+         strokeWidth: 'stroke-width',
+         surfaceScale: 'surfaceScale',
+         systemLanguage: 'systemLanguage',
+         tableValues: 'tableValues',
+         targetX: 'targetX',
+         targetY: 'targetY',
+         textAnchor: 'text-anchor',
+         textDecoration: 'text-decoration',
+         textRendering: 'text-rendering',
+         textLength: 'textLength',
+         to: 0,
+         transform: 0,
+         u1: 0,
+         u2: 0,
+         underlinePosition: 'underline-position',
+         underlineThickness: 'underline-thickness',
+         unicode: 0,
+         unicodeBidi: 'unicode-bidi',
+         unicodeRange: 'unicode-range',
+         unitsPerEm: 'units-per-em',
+         vAlphabetic: 'v-alphabetic',
+         vHanging: 'v-hanging',
+         vIdeographic: 'v-ideographic',
+         vMathematical: 'v-mathematical',
+         values: 0,
+         vectorEffect: 'vector-effect',
+         version: 0,
+         vertAdvY: 'vert-adv-y',
+         vertOriginX: 'vert-origin-x',
+         vertOriginY: 'vert-origin-y',
+         viewBox: 'viewBox',
+         viewTarget: 'viewTarget',
+         visibility: 0,
+         widths: 0,
+         wordSpacing: 'word-spacing',
+         writingMode: 'writing-mode',
+         x: 0,
+         xHeight: 'x-height',
+         x1: 0,
+         x2: 0,
+         xChannelSelector: 'xChannelSelector',
+         xlinkActuate: 'xlink:actuate',
+         xlinkArcrole: 'xlink:arcrole',
+         xlinkHref: 'xlink:href',
+         xlinkRole: 'xlink:role',
+         xlinkShow: 'xlink:show',
+         xlinkTitle: 'xlink:title',
+         xlinkType: 'xlink:type',
+         xmlBase: 'xml:base',
+         xmlns: 0,
+         xmlnsXlink: 'xmlns:xlink',
+         xmlLang: 'xml:lang',
+         xmlSpace: 'xml:space',
+         y: 0,
+         y1: 0,
+         y2: 0,
+         yChannelSelector: 'yChannelSelector',
+         z: 0,
+         zoomAndPan: 'zoomAndPan'
+       };
+       
+       var SVGDOMPropertyConfig = {
+         Properties: {},
+         DOMAttributeNamespaces: {
+           xlinkActuate: NS.xlink,
+           xlinkArcrole: NS.xlink,
+           xlinkHref: NS.xlink,
+           xlinkRole: NS.xlink,
+           xlinkShow: NS.xlink,
+           xlinkTitle: NS.xlink,
+           xlinkType: NS.xlink,
+           xmlBase: NS.xml,
+           xmlLang: NS.xml,
+           xmlSpace: NS.xml
+         },
+         DOMAttributeNames: {}
+       };
+       
+       Object.keys(ATTRS).forEach(function (key) {
+         SVGDOMPropertyConfig.Properties[key] = 0;
+         if (ATTRS[key]) {
+           SVGDOMPropertyConfig.DOMAttributeNames[key] = ATTRS[key];
+         }
+       });
+       
+       module.exports = SVGDOMPropertyConfig;
+
+/***/ },
+/* 157 */
+/***/ function(module, exports, __webpack_require__) {
+
+       /**
+        * Copyright 2013-present, 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.
+        *
+        * @providesModule SelectEventPlugin
+        */
+       
+       'use strict';
+       
+       var EventConstants = __webpack_require__(44);
+       var EventPropagators = __webpack_require__(45);
+       var ExecutionEnvironment = __webpack_require__(52);
+       var ReactDOMComponentTree = __webpack_require__(39);
+       var ReactInputSelection = __webpack_require__(149);
+       var SyntheticEvent = __webpack_require__(56);
+       
+       var getActiveElement = __webpack_require__(155);
+       var isTextInputElement = __webpack_require__(75);
+       var keyOf = __webpack_require__(27);
+       var shallowEqual = __webpack_require__(131);
+       
+       var topLevelTypes = EventConstants.topLevelTypes;
+       
+       var skipSelectionChangeEvent = ExecutionEnvironment.canUseDOM && 'documentMode' in document && document.documentMode <= 11;
+       
+       var eventTypes = {
+         select: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onSelect: null }),
+             captured: keyOf({ onSelectCapture: null })
+           },
+           dependencies: [topLevelTypes.topBlur, topLevelTypes.topContextMenu, topLevelTypes.topFocus, topLevelTypes.topKeyDown, topLevelTypes.topMouseDown, topLevelTypes.topMouseUp, topLevelTypes.topSelectionChange]
+         }
+       };
+       
+       var activeElement = null;
+       var activeElementInst = null;
+       var lastSelection = null;
+       var mouseDown = false;
+       
+       // Track whether a listener exists for this plugin. If none exist, we do
+       // not extract events. See #3639.
+       var hasListener = false;
+       var ON_SELECT_KEY = keyOf({ onSelect: null });
+       
+       /**
+        * Get an object which is a unique representation of the current selection.
+        *
+        * The return value will not be consistent across nodes or browsers, but
+        * two identical selections on the same node will return identical objects.
+        *
+        * @param {DOMElement} node
+        * @return {object}
+        */
+       function getSelection(node) {
+         if ('selectionStart' in node && ReactInputSelection.hasSelectionCapabilities(node)) {
+           return {
+             start: node.selectionStart,
+             end: node.selectionEnd
+           };
+         } else if (window.getSelection) {
+           var selection = window.getSelection();
+           return {
+             anchorNode: selection.anchorNode,
+             anchorOffset: selection.anchorOffset,
+             focusNode: selection.focusNode,
+             focusOffset: selection.focusOffset
+           };
+         } else if (document.selection) {
+           var range = document.selection.createRange();
+           return {
+             parentElement: range.parentElement(),
+             text: range.text,
+             top: range.boundingTop,
+             left: range.boundingLeft
+           };
+         }
+       }
+       
+       /**
+        * Poll selection to see whether it's changed.
+        *
+        * @param {object} nativeEvent
+        * @return {?SyntheticEvent}
+        */
+       function constructSelectEvent(nativeEvent, nativeEventTarget) {
+         // Ensure we have the right element, and that the user is not dragging a
+         // selection (this matches native `select` event behavior). In HTML5, select
+         // fires only on input and textarea thus if there's no focused element we
+         // won't dispatch.
+         if (mouseDown || activeElement == null || activeElement !== getActiveElement()) {
+           return null;
+         }
+       
+         // Only fire when selection has actually changed.
+         var currentSelection = getSelection(activeElement);
+         if (!lastSelection || !shallowEqual(lastSelection, currentSelection)) {
+           lastSelection = currentSelection;
+       
+           var syntheticEvent = SyntheticEvent.getPooled(eventTypes.select, activeElementInst, nativeEvent, nativeEventTarget);
+       
+           syntheticEvent.type = 'select';
+           syntheticEvent.target = activeElement;
+       
+           EventPropagators.accumulateTwoPhaseDispatches(syntheticEvent);
+       
+           return syntheticEvent;
+         }
+       
+         return null;
+       }
+       
+       /**
+        * This plugin creates an `onSelect` event that normalizes select events
+        * across form elements.
+        *
+        * Supported elements are:
+        * - input (see `isTextInputElement`)
+        * - textarea
+        * - contentEditable
+        *
+        * This differs from native browser implementations in the following ways:
+        * - Fires on contentEditable fields as well as inputs.
+        * - Fires for collapsed selection.
+        * - Fires after user input.
+        */
+       var SelectEventPlugin = {
+       
+         eventTypes: eventTypes,
+       
+         extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {
+           if (!hasListener) {
+             return null;
+           }
+       
+           var targetNode = targetInst ? ReactDOMComponentTree.getNodeFromInstance(targetInst) : window;
+       
+           switch (topLevelType) {
+             // Track the input node that has focus.
+             case topLevelTypes.topFocus:
+               if (isTextInputElement(targetNode) || targetNode.contentEditable === 'true') {
+                 activeElement = targetNode;
+                 activeElementInst = targetInst;
+                 lastSelection = null;
+               }
+               break;
+             case topLevelTypes.topBlur:
+               activeElement = null;
+               activeElementInst = null;
+               lastSelection = null;
+               break;
+       
+             // Don't fire the event while the user is dragging. This matches the
+             // semantics of the native select event.
+             case topLevelTypes.topMouseDown:
+               mouseDown = true;
+               break;
+             case topLevelTypes.topContextMenu:
+             case topLevelTypes.topMouseUp:
+               mouseDown = false;
+               return constructSelectEvent(nativeEvent, nativeEventTarget);
+       
+             // Chrome and IE fire non-standard event when selection is changed (and
+             // sometimes when it hasn't). IE's event fires out of order with respect
+             // to key and input events on deletion, so we discard it.
+             //
+             // Firefox doesn't support selectionchange, so check selection status
+             // after each key entry. The selection changes after keydown and before
+             // keyup, but we check on keydown as well in the case of holding down a
+             // key, when multiple keydown events are fired but only one keyup is.
+             // This is also our approach for IE handling, for the reason above.
+             case topLevelTypes.topSelectionChange:
+               if (skipSelectionChangeEvent) {
+                 break;
+               }
+             // falls through
+             case topLevelTypes.topKeyDown:
+             case topLevelTypes.topKeyUp:
+               return constructSelectEvent(nativeEvent, nativeEventTarget);
+           }
+       
+           return null;
+         },
+       
+         didPutListener: function (inst, registrationName, listener) {
+           if (registrationName === ON_SELECT_KEY) {
+             hasListener = true;
+           }
+         }
+       };
+       
+       module.exports = SelectEventPlugin;
+
+/***/ },
+/* 158 */
+/***/ function(module, exports, __webpack_require__) {
+
+       /* WEBPACK VAR INJECTION */(function(process) {/**
+        * Copyright 2013-present, 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.
+        *
+        * @providesModule SimpleEventPlugin
+        */
+       
+       'use strict';
+       
+       var _prodInvariant = __webpack_require__(9);
+       
+       var EventConstants = __webpack_require__(44);
+       var EventListener = __webpack_require__(145);
+       var EventPropagators = __webpack_require__(45);
+       var ReactDOMComponentTree = __webpack_require__(39);
+       var SyntheticAnimationEvent = __webpack_require__(159);
+       var SyntheticClipboardEvent = __webpack_require__(160);
+       var SyntheticEvent = __webpack_require__(56);
+       var SyntheticFocusEvent = __webpack_require__(161);
+       var SyntheticKeyboardEvent = __webpack_require__(162);
+       var SyntheticMouseEvent = __webpack_require__(78);
+       var SyntheticDragEvent = __webpack_require__(165);
+       var SyntheticTouchEvent = __webpack_require__(166);
+       var SyntheticTransitionEvent = __webpack_require__(167);
+       var SyntheticUIEvent = __webpack_require__(79);
+       var SyntheticWheelEvent = __webpack_require__(168);
+       
+       var emptyFunction = __webpack_require__(14);
+       var getEventCharCode = __webpack_require__(163);
+       var invariant = __webpack_require__(10);
+       var keyOf = __webpack_require__(27);
+       
+       var topLevelTypes = EventConstants.topLevelTypes;
+       
+       var eventTypes = {
+         abort: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onAbort: true }),
+             captured: keyOf({ onAbortCapture: true })
+           }
+         },
+         animationEnd: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onAnimationEnd: true }),
+             captured: keyOf({ onAnimationEndCapture: true })
+           }
+         },
+         animationIteration: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onAnimationIteration: true }),
+             captured: keyOf({ onAnimationIterationCapture: true })
+           }
+         },
+         animationStart: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onAnimationStart: true }),
+             captured: keyOf({ onAnimationStartCapture: true })
+           }
+         },
+         blur: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onBlur: true }),
+             captured: keyOf({ onBlurCapture: true })
+           }
+         },
+         canPlay: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onCanPlay: true }),
+             captured: keyOf({ onCanPlayCapture: true })
+           }
+         },
+         canPlayThrough: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onCanPlayThrough: true }),
+             captured: keyOf({ onCanPlayThroughCapture: true })
+           }
+         },
+         click: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onClick: true }),
+             captured: keyOf({ onClickCapture: true })
+           }
+         },
+         contextMenu: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onContextMenu: true }),
+             captured: keyOf({ onContextMenuCapture: true })
+           }
+         },
+         copy: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onCopy: true }),
+             captured: keyOf({ onCopyCapture: true })
+           }
+         },
+         cut: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onCut: true }),
+             captured: keyOf({ onCutCapture: true })
+           }
+         },
+         doubleClick: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onDoubleClick: true }),
+             captured: keyOf({ onDoubleClickCapture: true })
+           }
+         },
+         drag: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onDrag: true }),
+             captured: keyOf({ onDragCapture: true })
+           }
+         },
+         dragEnd: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onDragEnd: true }),
+             captured: keyOf({ onDragEndCapture: true })
+           }
+         },
+         dragEnter: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onDragEnter: true }),
+             captured: keyOf({ onDragEnterCapture: true })
+           }
+         },
+         dragExit: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onDragExit: true }),
+             captured: keyOf({ onDragExitCapture: true })
+           }
+         },
+         dragLeave: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onDragLeave: true }),
+             captured: keyOf({ onDragLeaveCapture: true })
+           }
+         },
+         dragOver: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onDragOver: true }),
+             captured: keyOf({ onDragOverCapture: true })
+           }
+         },
+         dragStart: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onDragStart: true }),
+             captured: keyOf({ onDragStartCapture: true })
+           }
+         },
+         drop: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onDrop: true }),
+             captured: keyOf({ onDropCapture: true })
+           }
+         },
+         durationChange: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onDurationChange: true }),
+             captured: keyOf({ onDurationChangeCapture: true })
+           }
+         },
+         emptied: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onEmptied: true }),
+             captured: keyOf({ onEmptiedCapture: true })
+           }
+         },
+         encrypted: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onEncrypted: true }),
+             captured: keyOf({ onEncryptedCapture: true })
+           }
+         },
+         ended: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onEnded: true }),
+             captured: keyOf({ onEndedCapture: true })
+           }
+         },
+         error: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onError: true }),
+             captured: keyOf({ onErrorCapture: true })
+           }
+         },
+         focus: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onFocus: true }),
+             captured: keyOf({ onFocusCapture: true })
+           }
+         },
+         input: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onInput: true }),
+             captured: keyOf({ onInputCapture: true })
+           }
+         },
+         invalid: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onInvalid: true }),
+             captured: keyOf({ onInvalidCapture: true })
+           }
+         },
+         keyDown: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onKeyDown: true }),
+             captured: keyOf({ onKeyDownCapture: true })
+           }
+         },
+         keyPress: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onKeyPress: true }),
+             captured: keyOf({ onKeyPressCapture: true })
+           }
+         },
+         keyUp: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onKeyUp: true }),
+             captured: keyOf({ onKeyUpCapture: true })
+           }
+         },
+         load: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onLoad: true }),
+             captured: keyOf({ onLoadCapture: true })
+           }
+         },
+         loadedData: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onLoadedData: true }),
+             captured: keyOf({ onLoadedDataCapture: true })
+           }
+         },
+         loadedMetadata: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onLoadedMetadata: true }),
+             captured: keyOf({ onLoadedMetadataCapture: true })
+           }
+         },
+         loadStart: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onLoadStart: true }),
+             captured: keyOf({ onLoadStartCapture: true })
+           }
+         },
+         // Note: We do not allow listening to mouseOver events. Instead, use the
+         // onMouseEnter/onMouseLeave created by `EnterLeaveEventPlugin`.
+         mouseDown: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onMouseDown: true }),
+             captured: keyOf({ onMouseDownCapture: true })
+           }
+         },
+         mouseMove: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onMouseMove: true }),
+             captured: keyOf({ onMouseMoveCapture: true })
+           }
+         },
+         mouseOut: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onMouseOut: true }),
+             captured: keyOf({ onMouseOutCapture: true })
+           }
+         },
+         mouseOver: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onMouseOver: true }),
+             captured: keyOf({ onMouseOverCapture: true })
+           }
+         },
+         mouseUp: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onMouseUp: true }),
+             captured: keyOf({ onMouseUpCapture: true })
+           }
+         },
+         paste: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onPaste: true }),
+             captured: keyOf({ onPasteCapture: true })
+           }
+         },
+         pause: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onPause: true }),
+             captured: keyOf({ onPauseCapture: true })
+           }
+         },
+         play: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onPlay: true }),
+             captured: keyOf({ onPlayCapture: true })
+           }
+         },
+         playing: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onPlaying: true }),
+             captured: keyOf({ onPlayingCapture: true })
+           }
+         },
+         progress: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onProgress: true }),
+             captured: keyOf({ onProgressCapture: true })
+           }
+         },
+         rateChange: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onRateChange: true }),
+             captured: keyOf({ onRateChangeCapture: true })
+           }
+         },
+         reset: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onReset: true }),
+             captured: keyOf({ onResetCapture: true })
+           }
+         },
+         scroll: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onScroll: true }),
+             captured: keyOf({ onScrollCapture: true })
+           }
+         },
+         seeked: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onSeeked: true }),
+             captured: keyOf({ onSeekedCapture: true })
+           }
+         },
+         seeking: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onSeeking: true }),
+             captured: keyOf({ onSeekingCapture: true })
+           }
+         },
+         stalled: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onStalled: true }),
+             captured: keyOf({ onStalledCapture: true })
+           }
+         },
+         submit: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onSubmit: true }),
+             captured: keyOf({ onSubmitCapture: true })
+           }
+         },
+         suspend: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onSuspend: true }),
+             captured: keyOf({ onSuspendCapture: true })
+           }
+         },
+         timeUpdate: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onTimeUpdate: true }),
+             captured: keyOf({ onTimeUpdateCapture: true })
+           }
+         },
+         touchCancel: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onTouchCancel: true }),
+             captured: keyOf({ onTouchCancelCapture: true })
+           }
+         },
+         touchEnd: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onTouchEnd: true }),
+             captured: keyOf({ onTouchEndCapture: true })
+           }
+         },
+         touchMove: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onTouchMove: true }),
+             captured: keyOf({ onTouchMoveCapture: true })
+           }
+         },
+         touchStart: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onTouchStart: true }),
+             captured: keyOf({ onTouchStartCapture: true })
+           }
+         },
+         transitionEnd: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onTransitionEnd: true }),
+             captured: keyOf({ onTransitionEndCapture: true })
+           }
+         },
+         volumeChange: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onVolumeChange: true }),
+             captured: keyOf({ onVolumeChangeCapture: true })
+           }
+         },
+         waiting: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onWaiting: true }),
+             captured: keyOf({ onWaitingCapture: true })
+           }
+         },
+         wheel: {
+           phasedRegistrationNames: {
+             bubbled: keyOf({ onWheel: true }),
+             captured: keyOf({ onWheelCapture: true })
+           }
+         }
+       };
+       
+       var topLevelEventsToDispatchConfig = {
+         topAbort: eventTypes.abort,
+         topAnimationEnd: eventTypes.animationEnd,
+         topAnimationIteration: eventTypes.animationIteration,
+         topAnimationStart: eventTypes.animationStart,
+         topBlur: eventTypes.blur,
+         topCanPlay: eventTypes.canPlay,
+         topCanPlayThrough: eventTypes.canPlayThrough,
          topClick: eventTypes.click,
          topContextMenu: eventTypes.contextMenu,
          topCopy: eventTypes.copy,
          topError: eventTypes.error,
          topFocus: eventTypes.focus,
          topInput: eventTypes.input,
+         topInvalid: eventTypes.invalid,
          topKeyDown: eventTypes.keyDown,
          topKeyPress: eventTypes.keyPress,
          topKeyUp: eventTypes.keyUp,
          topTouchEnd: eventTypes.touchEnd,
          topTouchMove: eventTypes.touchMove,
          topTouchStart: eventTypes.touchStart,
+         topTransitionEnd: eventTypes.transitionEnd,
          topVolumeChange: eventTypes.volumeChange,
          topWaiting: eventTypes.waiting,
          topWheel: eventTypes.wheel
        };
        
-       for (var type in topLevelEventsToDispatchConfig) {
-         topLevelEventsToDispatchConfig[type].dependencies = [type];
+       for (var type in topLevelEventsToDispatchConfig) {
+         topLevelEventsToDispatchConfig[type].dependencies = [type];
+       }
+       
+       var ON_CLICK_KEY = keyOf({ onClick: null });
+       var onClickListeners = {};
+       
+       function getDictionaryKey(inst) {
+         return '.' + inst._rootNodeID;
+       }
+       
+       var SimpleEventPlugin = {
+       
+         eventTypes: eventTypes,
+       
+         extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {
+           var dispatchConfig = topLevelEventsToDispatchConfig[topLevelType];
+           if (!dispatchConfig) {
+             return null;
+           }
+           var EventConstructor;
+           switch (topLevelType) {
+             case topLevelTypes.topAbort:
+             case topLevelTypes.topCanPlay:
+             case topLevelTypes.topCanPlayThrough:
+             case topLevelTypes.topDurationChange:
+             case topLevelTypes.topEmptied:
+             case topLevelTypes.topEncrypted:
+             case topLevelTypes.topEnded:
+             case topLevelTypes.topError:
+             case topLevelTypes.topInput:
+             case topLevelTypes.topInvalid:
+             case topLevelTypes.topLoad:
+             case topLevelTypes.topLoadedData:
+             case topLevelTypes.topLoadedMetadata:
+             case topLevelTypes.topLoadStart:
+             case topLevelTypes.topPause:
+             case topLevelTypes.topPlay:
+             case topLevelTypes.topPlaying:
+             case topLevelTypes.topProgress:
+             case topLevelTypes.topRateChange:
+             case topLevelTypes.topReset:
+             case topLevelTypes.topSeeked:
+             case topLevelTypes.topSeeking:
+             case topLevelTypes.topStalled:
+             case topLevelTypes.topSubmit:
+             case topLevelTypes.topSuspend:
+             case topLevelTypes.topTimeUpdate:
+             case topLevelTypes.topVolumeChange:
+             case topLevelTypes.topWaiting:
+               // HTML Events
+               // @see http://www.w3.org/TR/html5/index.html#events-0
+               EventConstructor = SyntheticEvent;
+               break;
+             case topLevelTypes.topKeyPress:
+               // Firefox creates a keypress event for function keys too. This removes
+               // the unwanted keypress events. Enter is however both printable and
+               // non-printable. One would expect Tab to be as well (but it isn't).
+               if (getEventCharCode(nativeEvent) === 0) {
+                 return null;
+               }
+             /* falls through */
+             case topLevelTypes.topKeyDown:
+             case topLevelTypes.topKeyUp:
+               EventConstructor = SyntheticKeyboardEvent;
+               break;
+             case topLevelTypes.topBlur:
+             case topLevelTypes.topFocus:
+               EventConstructor = SyntheticFocusEvent;
+               break;
+             case topLevelTypes.topClick:
+               // Firefox creates a click event on right mouse clicks. This removes the
+               // unwanted click events.
+               if (nativeEvent.button === 2) {
+                 return null;
+               }
+             /* falls through */
+             case topLevelTypes.topContextMenu:
+             case topLevelTypes.topDoubleClick:
+             case topLevelTypes.topMouseDown:
+             case topLevelTypes.topMouseMove:
+             case topLevelTypes.topMouseOut:
+             case topLevelTypes.topMouseOver:
+             case topLevelTypes.topMouseUp:
+               EventConstructor = SyntheticMouseEvent;
+               break;
+             case topLevelTypes.topDrag:
+             case topLevelTypes.topDragEnd:
+             case topLevelTypes.topDragEnter:
+             case topLevelTypes.topDragExit:
+             case topLevelTypes.topDragLeave:
+             case topLevelTypes.topDragOver:
+             case topLevelTypes.topDragStart:
+             case topLevelTypes.topDrop:
+               EventConstructor = SyntheticDragEvent;
+               break;
+             case topLevelTypes.topTouchCancel:
+             case topLevelTypes.topTouchEnd:
+             case topLevelTypes.topTouchMove:
+             case topLevelTypes.topTouchStart:
+               EventConstructor = SyntheticTouchEvent;
+               break;
+             case topLevelTypes.topAnimationEnd:
+             case topLevelTypes.topAnimationIteration:
+             case topLevelTypes.topAnimationStart:
+               EventConstructor = SyntheticAnimationEvent;
+               break;
+             case topLevelTypes.topTransitionEnd:
+               EventConstructor = SyntheticTransitionEvent;
+               break;
+             case topLevelTypes.topScroll:
+               EventConstructor = SyntheticUIEvent;
+               break;
+             case topLevelTypes.topWheel:
+               EventConstructor = SyntheticWheelEvent;
+               break;
+             case topLevelTypes.topCopy:
+             case topLevelTypes.topCut:
+             case topLevelTypes.topPaste:
+               EventConstructor = SyntheticClipboardEvent;
+               break;
+           }
+           !EventConstructor ? process.env.NODE_ENV !== 'production' ? invariant(false, 'SimpleEventPlugin: Unhandled event type, `%s`.', topLevelType) : _prodInvariant('86', topLevelType) : void 0;
+           var event = EventConstructor.getPooled(dispatchConfig, targetInst, nativeEvent, nativeEventTarget);
+           EventPropagators.accumulateTwoPhaseDispatches(event);
+           return event;
+         },
+       
+         didPutListener: function (inst, registrationName, listener) {
+           // Mobile Safari does not fire properly bubble click events on
+           // non-interactive elements, which means delegated click listeners do not
+           // fire. The workaround for this bug involves attaching an empty click
+           // listener on the target node.
+           if (registrationName === ON_CLICK_KEY) {
+             var key = getDictionaryKey(inst);
+             var node = ReactDOMComponentTree.getNodeFromInstance(inst);
+             if (!onClickListeners[key]) {
+               onClickListeners[key] = EventListener.listen(node, 'click', emptyFunction);
+             }
+           }
+         },
+       
+         willDeleteListener: function (inst, registrationName) {
+           if (registrationName === ON_CLICK_KEY) {
+             var key = getDictionaryKey(inst);
+             onClickListeners[key].remove();
+             delete onClickListeners[key];
+           }
+         }
+       
+       };
+       
+       module.exports = SimpleEventPlugin;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
+
+/***/ },
+/* 159 */
+/***/ function(module, exports, __webpack_require__) {
+
+       /**
+        * Copyright 2013-present, 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.
+        *
+        * @providesModule SyntheticAnimationEvent
+        */
+       
+       'use strict';
+       
+       var SyntheticEvent = __webpack_require__(56);
+       
+       /**
+        * @interface Event
+        * @see http://www.w3.org/TR/css3-animations/#AnimationEvent-interface
+        * @see https://developer.mozilla.org/en-US/docs/Web/API/AnimationEvent
+        */
+       var AnimationEventInterface = {
+         animationName: null,
+         elapsedTime: null,
+         pseudoElement: null
+       };
+       
+       /**
+        * @param {object} dispatchConfig Configuration used to dispatch this event.
+        * @param {string} dispatchMarker Marker identifying the event target.
+        * @param {object} nativeEvent Native browser event.
+        * @extends {SyntheticEvent}
+        */
+       function SyntheticAnimationEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
+         return SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
+       }
+       
+       SyntheticEvent.augmentClass(SyntheticAnimationEvent, AnimationEventInterface);
+       
+       module.exports = SyntheticAnimationEvent;
+
+/***/ },
+/* 160 */
+/***/ function(module, exports, __webpack_require__) {
+
+       /**
+        * Copyright 2013-present, 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.
+        *
+        * @providesModule SyntheticClipboardEvent
+        */
+       
+       'use strict';
+       
+       var SyntheticEvent = __webpack_require__(56);
+       
+       /**
+        * @interface Event
+        * @see http://www.w3.org/TR/clipboard-apis/
+        */
+       var ClipboardEventInterface = {
+         clipboardData: function (event) {
+           return 'clipboardData' in event ? event.clipboardData : window.clipboardData;
+         }
+       };
+       
+       /**
+        * @param {object} dispatchConfig Configuration used to dispatch this event.
+        * @param {string} dispatchMarker Marker identifying the event target.
+        * @param {object} nativeEvent Native browser event.
+        * @extends {SyntheticUIEvent}
+        */
+       function SyntheticClipboardEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
+         return SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
+       }
+       
+       SyntheticEvent.augmentClass(SyntheticClipboardEvent, ClipboardEventInterface);
+       
+       module.exports = SyntheticClipboardEvent;
+
+/***/ },
+/* 161 */
+/***/ function(module, exports, __webpack_require__) {
+
+       /**
+        * Copyright 2013-present, 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.
+        *
+        * @providesModule SyntheticFocusEvent
+        */
+       
+       'use strict';
+       
+       var SyntheticUIEvent = __webpack_require__(79);
+       
+       /**
+        * @interface FocusEvent
+        * @see http://www.w3.org/TR/DOM-Level-3-Events/
+        */
+       var FocusEventInterface = {
+         relatedTarget: null
+       };
+       
+       /**
+        * @param {object} dispatchConfig Configuration used to dispatch this event.
+        * @param {string} dispatchMarker Marker identifying the event target.
+        * @param {object} nativeEvent Native browser event.
+        * @extends {SyntheticUIEvent}
+        */
+       function SyntheticFocusEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
+         return SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
+       }
+       
+       SyntheticUIEvent.augmentClass(SyntheticFocusEvent, FocusEventInterface);
+       
+       module.exports = SyntheticFocusEvent;
+
+/***/ },
+/* 162 */
+/***/ function(module, exports, __webpack_require__) {
+
+       /**
+        * Copyright 2013-present, 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.
+        *
+        * @providesModule SyntheticKeyboardEvent
+        */
+       
+       'use strict';
+       
+       var SyntheticUIEvent = __webpack_require__(79);
+       
+       var getEventCharCode = __webpack_require__(163);
+       var getEventKey = __webpack_require__(164);
+       var getEventModifierState = __webpack_require__(81);
+       
+       /**
+        * @interface KeyboardEvent
+        * @see http://www.w3.org/TR/DOM-Level-3-Events/
+        */
+       var KeyboardEventInterface = {
+         key: getEventKey,
+         location: null,
+         ctrlKey: null,
+         shiftKey: null,
+         altKey: null,
+         metaKey: null,
+         repeat: null,
+         locale: null,
+         getModifierState: getEventModifierState,
+         // Legacy Interface
+         charCode: function (event) {
+           // `charCode` is the result of a KeyPress event and represents the value of
+           // the actual printable character.
+       
+           // KeyPress is deprecated, but its replacement is not yet final and not
+           // implemented in any major browser. Only KeyPress has charCode.
+           if (event.type === 'keypress') {
+             return getEventCharCode(event);
+           }
+           return 0;
+         },
+         keyCode: function (event) {
+           // `keyCode` is the result of a KeyDown/Up event and represents the value of
+           // physical keyboard key.
+       
+           // The actual meaning of the value depends on the users' keyboard layout
+           // which cannot be detected. Assuming that it is a US keyboard layout
+           // provides a surprisingly accurate mapping for US and European users.
+           // Due to this, it is left to the user to implement at this time.
+           if (event.type === 'keydown' || event.type === 'keyup') {
+             return event.keyCode;
+           }
+           return 0;
+         },
+         which: function (event) {
+           // `which` is an alias for either `keyCode` or `charCode` depending on the
+           // type of the event.
+           if (event.type === 'keypress') {
+             return getEventCharCode(event);
+           }
+           if (event.type === 'keydown' || event.type === 'keyup') {
+             return event.keyCode;
+           }
+           return 0;
+         }
+       };
+       
+       /**
+        * @param {object} dispatchConfig Configuration used to dispatch this event.
+        * @param {string} dispatchMarker Marker identifying the event target.
+        * @param {object} nativeEvent Native browser event.
+        * @extends {SyntheticUIEvent}
+        */
+       function SyntheticKeyboardEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
+         return SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
+       }
+       
+       SyntheticUIEvent.augmentClass(SyntheticKeyboardEvent, KeyboardEventInterface);
+       
+       module.exports = SyntheticKeyboardEvent;
+
+/***/ },
+/* 163 */
+/***/ function(module, exports) {
+
+       /**
+        * Copyright 2013-present, 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.
+        *
+        * @providesModule getEventCharCode
+        */
+       
+       'use strict';
+       
+       /**
+        * `charCode` represents the actual "character code" and is safe to use with
+        * `String.fromCharCode`. As such, only keys that correspond to printable
+        * characters produce a valid `charCode`, the only exception to this is Enter.
+        * The Tab-key is considered non-printable and does not have a `charCode`,
+        * presumably because it does not produce a tab-character in browsers.
+        *
+        * @param {object} nativeEvent Native browser event.
+        * @return {number} Normalized `charCode` property.
+        */
+       
+       function getEventCharCode(nativeEvent) {
+         var charCode;
+         var keyCode = nativeEvent.keyCode;
+       
+         if ('charCode' in nativeEvent) {
+           charCode = nativeEvent.charCode;
+       
+           // FF does not set `charCode` for the Enter-key, check against `keyCode`.
+           if (charCode === 0 && keyCode === 13) {
+             charCode = 13;
+           }
+         } else {
+           // IE8 does not implement `charCode`, but `keyCode` has the correct value.
+           charCode = keyCode;
+         }
+       
+         // Some non-printable keys are reported in `charCode`/`keyCode`, discard them.
+         // Must not discard the (non-)printable Enter-key.
+         if (charCode >= 32 || charCode === 13) {
+           return charCode;
+         }
+       
+         return 0;
+       }
+       
+       module.exports = getEventCharCode;
+
+/***/ },
+/* 164 */
+/***/ function(module, exports, __webpack_require__) {
+
+       /**
+        * Copyright 2013-present, 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.
+        *
+        * @providesModule getEventKey
+        */
+       
+       'use strict';
+       
+       var getEventCharCode = __webpack_require__(163);
+       
+       /**
+        * Normalization of deprecated HTML5 `key` values
+        * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names
+        */
+       var normalizeKey = {
+         'Esc': 'Escape',
+         'Spacebar': ' ',
+         'Left': 'ArrowLeft',
+         'Up': 'ArrowUp',
+         'Right': 'ArrowRight',
+         'Down': 'ArrowDown',
+         'Del': 'Delete',
+         'Win': 'OS',
+         'Menu': 'ContextMenu',
+         'Apps': 'ContextMenu',
+         'Scroll': 'ScrollLock',
+         'MozPrintableKey': 'Unidentified'
+       };
+       
+       /**
+        * Translation from legacy `keyCode` to HTML5 `key`
+        * Only special keys supported, all others depend on keyboard layout or browser
+        * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names
+        */
+       var translateToKey = {
+         8: 'Backspace',
+         9: 'Tab',
+         12: 'Clear',
+         13: 'Enter',
+         16: 'Shift',
+         17: 'Control',
+         18: 'Alt',
+         19: 'Pause',
+         20: 'CapsLock',
+         27: 'Escape',
+         32: ' ',
+         33: 'PageUp',
+         34: 'PageDown',
+         35: 'End',
+         36: 'Home',
+         37: 'ArrowLeft',
+         38: 'ArrowUp',
+         39: 'ArrowRight',
+         40: 'ArrowDown',
+         45: 'Insert',
+         46: 'Delete',
+         112: 'F1', 113: 'F2', 114: 'F3', 115: 'F4', 116: 'F5', 117: 'F6',
+         118: 'F7', 119: 'F8', 120: 'F9', 121: 'F10', 122: 'F11', 123: 'F12',
+         144: 'NumLock',
+         145: 'ScrollLock',
+         224: 'Meta'
+       };
+       
+       /**
+        * @param {object} nativeEvent Native browser event.
+        * @return {string} Normalized `key` property.
+        */
+       function getEventKey(nativeEvent) {
+         if (nativeEvent.key) {
+           // Normalize inconsistent values reported by browsers due to
+           // implementations of a working draft specification.
+       
+           // FireFox implements `key` but returns `MozPrintableKey` for all
+           // printable characters (normalized to `Unidentified`), ignore it.
+           var key = normalizeKey[nativeEvent.key] || nativeEvent.key;
+           if (key !== 'Unidentified') {
+             return key;
+           }
+         }
+       
+         // Browser does not implement `key`, polyfill as much of it as we can.
+         if (nativeEvent.type === 'keypress') {
+           var charCode = getEventCharCode(nativeEvent);
+       
+           // The enter-key is technically both printable and non-printable and can
+           // thus be captured by `keypress`, no other non-printable key should.
+           return charCode === 13 ? 'Enter' : String.fromCharCode(charCode);
+         }
+         if (nativeEvent.type === 'keydown' || nativeEvent.type === 'keyup') {
+           // While user keyboard layout determines the actual meaning of each
+           // `keyCode` value, almost all function keys have a universal value.
+           return translateToKey[nativeEvent.keyCode] || 'Unidentified';
+         }
+         return '';
+       }
+       
+       module.exports = getEventKey;
+
+/***/ },
+/* 165 */
+/***/ function(module, exports, __webpack_require__) {
+
+       /**
+        * Copyright 2013-present, 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.
+        *
+        * @providesModule SyntheticDragEvent
+        */
+       
+       'use strict';
+       
+       var SyntheticMouseEvent = __webpack_require__(78);
+       
+       /**
+        * @interface DragEvent
+        * @see http://www.w3.org/TR/DOM-Level-3-Events/
+        */
+       var DragEventInterface = {
+         dataTransfer: null
+       };
+       
+       /**
+        * @param {object} dispatchConfig Configuration used to dispatch this event.
+        * @param {string} dispatchMarker Marker identifying the event target.
+        * @param {object} nativeEvent Native browser event.
+        * @extends {SyntheticUIEvent}
+        */
+       function SyntheticDragEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
+         return SyntheticMouseEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
+       }
+       
+       SyntheticMouseEvent.augmentClass(SyntheticDragEvent, DragEventInterface);
+       
+       module.exports = SyntheticDragEvent;
+
+/***/ },
+/* 166 */
+/***/ function(module, exports, __webpack_require__) {
+
+       /**
+        * Copyright 2013-present, 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.
+        *
+        * @providesModule SyntheticTouchEvent
+        */
+       
+       'use strict';
+       
+       var SyntheticUIEvent = __webpack_require__(79);
+       
+       var getEventModifierState = __webpack_require__(81);
+       
+       /**
+        * @interface TouchEvent
+        * @see http://www.w3.org/TR/touch-events/
+        */
+       var TouchEventInterface = {
+         touches: null,
+         targetTouches: null,
+         changedTouches: null,
+         altKey: null,
+         metaKey: null,
+         ctrlKey: null,
+         shiftKey: null,
+         getModifierState: getEventModifierState
+       };
+       
+       /**
+        * @param {object} dispatchConfig Configuration used to dispatch this event.
+        * @param {string} dispatchMarker Marker identifying the event target.
+        * @param {object} nativeEvent Native browser event.
+        * @extends {SyntheticUIEvent}
+        */
+       function SyntheticTouchEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
+         return SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
+       }
+       
+       SyntheticUIEvent.augmentClass(SyntheticTouchEvent, TouchEventInterface);
+       
+       module.exports = SyntheticTouchEvent;
+
+/***/ },
+/* 167 */
+/***/ function(module, exports, __webpack_require__) {
+
+       /**
+        * Copyright 2013-present, 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.
+        *
+        * @providesModule SyntheticTransitionEvent
+        */
+       
+       'use strict';
+       
+       var SyntheticEvent = __webpack_require__(56);
+       
+       /**
+        * @interface Event
+        * @see http://www.w3.org/TR/2009/WD-css3-transitions-20090320/#transition-events-
+        * @see https://developer.mozilla.org/en-US/docs/Web/API/TransitionEvent
+        */
+       var TransitionEventInterface = {
+         propertyName: null,
+         elapsedTime: null,
+         pseudoElement: null
+       };
+       
+       /**
+        * @param {object} dispatchConfig Configuration used to dispatch this event.
+        * @param {string} dispatchMarker Marker identifying the event target.
+        * @param {object} nativeEvent Native browser event.
+        * @extends {SyntheticEvent}
+        */
+       function SyntheticTransitionEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
+         return SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
+       }
+       
+       SyntheticEvent.augmentClass(SyntheticTransitionEvent, TransitionEventInterface);
+       
+       module.exports = SyntheticTransitionEvent;
+
+/***/ },
+/* 168 */
+/***/ function(module, exports, __webpack_require__) {
+
+       /**
+        * Copyright 2013-present, 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.
+        *
+        * @providesModule SyntheticWheelEvent
+        */
+       
+       'use strict';
+       
+       var SyntheticMouseEvent = __webpack_require__(78);
+       
+       /**
+        * @interface WheelEvent
+        * @see http://www.w3.org/TR/DOM-Level-3-Events/
+        */
+       var WheelEventInterface = {
+         deltaX: function (event) {
+           return 'deltaX' in event ? event.deltaX :
+           // Fallback to `wheelDeltaX` for Webkit and normalize (right is positive).
+           'wheelDeltaX' in event ? -event.wheelDeltaX : 0;
+         },
+         deltaY: function (event) {
+           return 'deltaY' in event ? event.deltaY :
+           // Fallback to `wheelDeltaY` for Webkit and normalize (down is positive).
+           'wheelDeltaY' in event ? -event.wheelDeltaY :
+           // Fallback to `wheelDelta` for IE<9 and normalize (down is positive).
+           'wheelDelta' in event ? -event.wheelDelta : 0;
+         },
+         deltaZ: null,
+       
+         // Browsers without "deltaMode" is reporting in raw wheel delta where one
+         // notch on the scroll is always +/- 120, roughly equivalent to pixels.
+         // A good approximation of DOM_DELTA_LINE (1) is 5% of viewport size or
+         // ~40 pixels, for DOM_DELTA_SCREEN (2) it is 87.5% of viewport size.
+         deltaMode: null
+       };
+       
+       /**
+        * @param {object} dispatchConfig Configuration used to dispatch this event.
+        * @param {string} dispatchMarker Marker identifying the event target.
+        * @param {object} nativeEvent Native browser event.
+        * @extends {SyntheticMouseEvent}
+        */
+       function SyntheticWheelEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
+         return SyntheticMouseEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
+       }
+       
+       SyntheticMouseEvent.augmentClass(SyntheticWheelEvent, WheelEventInterface);
+       
+       module.exports = SyntheticWheelEvent;
+
+/***/ },
+/* 169 */
+/***/ function(module, exports, __webpack_require__) {
+
+       /* WEBPACK VAR INJECTION */(function(process) {/**
+        * Copyright 2013-present, 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.
+        *
+        * @providesModule ReactMount
+        */
+       
+       'use strict';
+       
+       var _prodInvariant = __webpack_require__(9);
+       
+       var DOMLazyTree = __webpack_require__(85);
+       var DOMProperty = __webpack_require__(40);
+       var ReactBrowserEventEmitter = __webpack_require__(114);
+       var ReactCurrentOwner = __webpack_require__(12);
+       var ReactDOMComponentTree = __webpack_require__(39);
+       var ReactDOMContainerInfo = __webpack_require__(170);
+       var ReactDOMFeatureFlags = __webpack_require__(171);
+       var ReactElement = __webpack_require__(11);
+       var ReactFeatureFlags = __webpack_require__(61);
+       var ReactInstanceMap = __webpack_require__(126);
+       var ReactInstrumentation = __webpack_require__(65);
+       var ReactMarkupChecksum = __webpack_require__(172);
+       var ReactReconciler = __webpack_require__(62);
+       var ReactUpdateQueue = __webpack_require__(138);
+       var ReactUpdates = __webpack_require__(59);
+       
+       var emptyObject = __webpack_require__(21);
+       var instantiateReactComponent = __webpack_require__(128);
+       var invariant = __webpack_require__(10);
+       var setInnerHTML = __webpack_require__(87);
+       var shouldUpdateReactComponent = __webpack_require__(132);
+       var warning = __webpack_require__(13);
+       
+       var ATTR_NAME = DOMProperty.ID_ATTRIBUTE_NAME;
+       var ROOT_ATTR_NAME = DOMProperty.ROOT_ATTRIBUTE_NAME;
+       
+       var ELEMENT_NODE_TYPE = 1;
+       var DOC_NODE_TYPE = 9;
+       var DOCUMENT_FRAGMENT_NODE_TYPE = 11;
+       
+       var instancesByReactRootID = {};
+       
+       /**
+        * Finds the index of the first character
+        * that's not common between the two given strings.
+        *
+        * @return {number} the index of the character where the strings diverge
+        */
+       function firstDifferenceIndex(string1, string2) {
+         var minLen = Math.min(string1.length, string2.length);
+         for (var i = 0; i < minLen; i++) {
+           if (string1.charAt(i) !== string2.charAt(i)) {
+             return i;
+           }
+         }
+         return string1.length === string2.length ? -1 : minLen;
+       }
+       
+       /**
+        * @param {DOMElement|DOMDocument} container DOM element that may contain
+        * a React component
+        * @return {?*} DOM element that may have the reactRoot ID, or null.
+        */
+       function getReactRootElementInContainer(container) {
+         if (!container) {
+           return null;
+         }
+       
+         if (container.nodeType === DOC_NODE_TYPE) {
+           return container.documentElement;
+         } else {
+           return container.firstChild;
+         }
+       }
+       
+       function internalGetID(node) {
+         // If node is something like a window, document, or text node, none of
+         // which support attributes or a .getAttribute method, gracefully return
+         // the empty string, as if the attribute were missing.
+         return node.getAttribute && node.getAttribute(ATTR_NAME) || '';
+       }
+       
+       /**
+        * Mounts this component and inserts it into the DOM.
+        *
+        * @param {ReactComponent} componentInstance The instance to mount.
+        * @param {DOMElement} container DOM element to mount into.
+        * @param {ReactReconcileTransaction} transaction
+        * @param {boolean} shouldReuseMarkup If true, do not insert markup
+        */
+       function mountComponentIntoNode(wrapperInstance, container, transaction, shouldReuseMarkup, context) {
+         var markerName;
+         if (ReactFeatureFlags.logTopLevelRenders) {
+           var wrappedElement = wrapperInstance._currentElement.props;
+           var type = wrappedElement.type;
+           markerName = 'React mount: ' + (typeof type === 'string' ? type : type.displayName || type.name);
+           console.time(markerName);
+         }
+       
+         var markup = ReactReconciler.mountComponent(wrapperInstance, transaction, null, ReactDOMContainerInfo(wrapperInstance, container), context);
+       
+         if (markerName) {
+           console.timeEnd(markerName);
+         }
+       
+         wrapperInstance._renderedComponent._topLevelWrapper = wrapperInstance;
+         ReactMount._mountImageIntoNode(markup, container, wrapperInstance, shouldReuseMarkup, transaction);
+       }
+       
+       /**
+        * Batched mount.
+        *
+        * @param {ReactComponent} componentInstance The instance to mount.
+        * @param {DOMElement} container DOM element to mount into.
+        * @param {boolean} shouldReuseMarkup If true, do not insert markup
+        */
+       function batchedMountComponentIntoNode(componentInstance, container, shouldReuseMarkup, context) {
+         var transaction = ReactUpdates.ReactReconcileTransaction.getPooled(
+         /* useCreateElement */
+         !shouldReuseMarkup && ReactDOMFeatureFlags.useCreateElement);
+         transaction.perform(mountComponentIntoNode, null, componentInstance, container, transaction, shouldReuseMarkup, context);
+         ReactUpdates.ReactReconcileTransaction.release(transaction);
+       }
+       
+       /**
+        * Unmounts a component and removes it from the DOM.
+        *
+        * @param {ReactComponent} instance React component instance.
+        * @param {DOMElement} container DOM element to unmount from.
+        * @final
+        * @internal
+        * @see {ReactMount.unmountComponentAtNode}
+        */
+       function unmountComponentFromNode(instance, container, safely) {
+         if (process.env.NODE_ENV !== 'production') {
+           ReactInstrumentation.debugTool.onBeginFlush();
+         }
+         ReactReconciler.unmountComponent(instance, safely);
+         if (process.env.NODE_ENV !== 'production') {
+           ReactInstrumentation.debugTool.onEndFlush();
+         }
+       
+         if (container.nodeType === DOC_NODE_TYPE) {
+           container = container.documentElement;
+         }
+       
+         // http://jsperf.com/emptying-a-node
+         while (container.lastChild) {
+           container.removeChild(container.lastChild);
+         }
        }
        
-       var ON_CLICK_KEY = keyOf({ onClick: null });
-       var onClickListeners = {};
+       /**
+        * True if the supplied DOM node has a direct React-rendered child that is
+        * not a React root element. Useful for warning in `render`,
+        * `unmountComponentAtNode`, etc.
+        *
+        * @param {?DOMElement} node The candidate DOM node.
+        * @return {boolean} True if the DOM element contains a direct child that was
+        * rendered by React but is not a root element.
+        * @internal
+        */
+       function hasNonRootReactChild(container) {
+         var rootEl = getReactRootElementInContainer(container);
+         if (rootEl) {
+           var inst = ReactDOMComponentTree.getInstanceFromNode(rootEl);
+           return !!(inst && inst._hostParent);
+         }
+       }
        
-       var SimpleEventPlugin = {
+       function getHostRootInstanceInContainer(container) {
+         var rootEl = getReactRootElementInContainer(container);
+         var prevHostInstance = rootEl && ReactDOMComponentTree.getInstanceFromNode(rootEl);
+         return prevHostInstance && !prevHostInstance._hostParent ? prevHostInstance : null;
+       }
        
-         eventTypes: eventTypes,
+       function getTopLevelWrapperInContainer(container) {
+         var root = getHostRootInstanceInContainer(container);
+         return root ? root._hostContainerInfo._topLevelWrapper : null;
+       }
+       
+       /**
+        * Temporary (?) hack so that we can store all top-level pending updates on
+        * composites instead of having to worry about different types of components
+        * here.
+        */
+       var topLevelRootCounter = 1;
+       var TopLevelWrapper = function () {
+         this.rootID = topLevelRootCounter++;
+       };
+       TopLevelWrapper.prototype.isReactComponent = {};
+       if (process.env.NODE_ENV !== 'production') {
+         TopLevelWrapper.displayName = 'TopLevelWrapper';
+       }
+       TopLevelWrapper.prototype.render = function () {
+         // this.props is actually a ReactElement
+         return this.props;
+       };
+       
+       /**
+        * Mounting is the process of initializing a React component by creating its
+        * representative DOM elements and inserting them into a supplied `container`.
+        * Any prior content inside `container` is destroyed in the process.
+        *
+        *   ReactMount.render(
+        *     component,
+        *     document.getElementById('container')
+        *   );
+        *
+        *   <div id="container">                   <-- Supplied `container`.
+        *     <div data-reactid=".3">              <-- Rendered reactRoot of React
+        *       // ...                                 component.
+        *     </div>
+        *   </div>
+        *
+        * Inside of `container`, the first element rendered is the "reactRoot".
+        */
+       var ReactMount = {
+       
+         TopLevelWrapper: TopLevelWrapper,
        
          /**
-          * @param {string} topLevelType Record from `EventConstants`.
-          * @param {DOMEventTarget} topLevelTarget The listening component root node.
-          * @param {string} topLevelTargetID ID of `topLevelTarget`.
-          * @param {object} nativeEvent Native browser event.
-          * @return {*} An accumulation of synthetic events.
-          * @see {EventPluginHub.extractEvents}
+          * Used by devtools. The keys are not important.
           */
-         extractEvents: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) {
-           var dispatchConfig = topLevelEventsToDispatchConfig[topLevelType];
-           if (!dispatchConfig) {
-             return null;
-           }
-           var EventConstructor;
-           switch (topLevelType) {
-             case topLevelTypes.topAbort:
-             case topLevelTypes.topCanPlay:
-             case topLevelTypes.topCanPlayThrough:
-             case topLevelTypes.topDurationChange:
-             case topLevelTypes.topEmptied:
-             case topLevelTypes.topEncrypted:
-             case topLevelTypes.topEnded:
-             case topLevelTypes.topError:
-             case topLevelTypes.topInput:
-             case topLevelTypes.topLoad:
-             case topLevelTypes.topLoadedData:
-             case topLevelTypes.topLoadedMetadata:
-             case topLevelTypes.topLoadStart:
-             case topLevelTypes.topPause:
-             case topLevelTypes.topPlay:
-             case topLevelTypes.topPlaying:
-             case topLevelTypes.topProgress:
-             case topLevelTypes.topRateChange:
-             case topLevelTypes.topReset:
-             case topLevelTypes.topSeeked:
-             case topLevelTypes.topSeeking:
-             case topLevelTypes.topStalled:
-             case topLevelTypes.topSubmit:
-             case topLevelTypes.topSuspend:
-             case topLevelTypes.topTimeUpdate:
-             case topLevelTypes.topVolumeChange:
-             case topLevelTypes.topWaiting:
-               // HTML Events
-               // @see http://www.w3.org/TR/html5/index.html#events-0
-               EventConstructor = SyntheticEvent;
-               break;
-             case topLevelTypes.topKeyPress:
-               // FireFox creates a keypress event for function keys too. This removes
-               // the unwanted keypress events. Enter is however both printable and
-               // non-printable. One would expect Tab to be as well (but it isn't).
-               if (getEventCharCode(nativeEvent) === 0) {
-                 return null;
-               }
-             /* falls through */
-             case topLevelTypes.topKeyDown:
-             case topLevelTypes.topKeyUp:
-               EventConstructor = SyntheticKeyboardEvent;
-               break;
-             case topLevelTypes.topBlur:
-             case topLevelTypes.topFocus:
-               EventConstructor = SyntheticFocusEvent;
-               break;
-             case topLevelTypes.topClick:
-               // Firefox creates a click event on right mouse clicks. This removes the
-               // unwanted click events.
-               if (nativeEvent.button === 2) {
-                 return null;
-               }
-             /* falls through */
-             case topLevelTypes.topContextMenu:
-             case topLevelTypes.topDoubleClick:
-             case topLevelTypes.topMouseDown:
-             case topLevelTypes.topMouseMove:
-             case topLevelTypes.topMouseOut:
-             case topLevelTypes.topMouseOver:
-             case topLevelTypes.topMouseUp:
-               EventConstructor = SyntheticMouseEvent;
-               break;
-             case topLevelTypes.topDrag:
-             case topLevelTypes.topDragEnd:
-             case topLevelTypes.topDragEnter:
-             case topLevelTypes.topDragExit:
-             case topLevelTypes.topDragLeave:
-             case topLevelTypes.topDragOver:
-             case topLevelTypes.topDragStart:
-             case topLevelTypes.topDrop:
-               EventConstructor = SyntheticDragEvent;
-               break;
-             case topLevelTypes.topTouchCancel:
-             case topLevelTypes.topTouchEnd:
-             case topLevelTypes.topTouchMove:
-             case topLevelTypes.topTouchStart:
-               EventConstructor = SyntheticTouchEvent;
-               break;
-             case topLevelTypes.topScroll:
-               EventConstructor = SyntheticUIEvent;
-               break;
-             case topLevelTypes.topWheel:
-               EventConstructor = SyntheticWheelEvent;
-               break;
-             case topLevelTypes.topCopy:
-             case topLevelTypes.topCut:
-             case topLevelTypes.topPaste:
-               EventConstructor = SyntheticClipboardEvent;
-               break;
-           }
-           !EventConstructor ? process.env.NODE_ENV !== 'production' ? invariant(false, 'SimpleEventPlugin: Unhandled event type, `%s`.', topLevelType) : invariant(false) : undefined;
-           var event = EventConstructor.getPooled(dispatchConfig, topLevelTargetID, nativeEvent, nativeEventTarget);
-           EventPropagators.accumulateTwoPhaseDispatches(event);
-           return event;
+         _instancesByReactRootID: instancesByReactRootID,
+       
+         /**
+          * This is a hook provided to support rendering React components while
+          * ensuring that the apparent scroll position of its `container` does not
+          * change.
+          *
+          * @param {DOMElement} container The `container` being rendered into.
+          * @param {function} renderCallback This must be called once to do the render.
+          */
+         scrollMonitor: function (container, renderCallback) {
+           renderCallback();
          },
        
-         didPutListener: function (id, registrationName, listener) {
-           // Mobile Safari does not fire properly bubble click events on
-           // non-interactive elements, which means delegated click listeners do not
-           // fire. The workaround for this bug involves attaching an empty click
-           // listener on the target node.
-           if (registrationName === ON_CLICK_KEY) {
-             var node = ReactMount.getNode(id);
-             if (!onClickListeners[id]) {
-               onClickListeners[id] = EventListener.listen(node, 'click', emptyFunction);
+         /**
+          * Take a component that's already mounted into the DOM and replace its props
+          * @param {ReactComponent} prevComponent component instance already in the DOM
+          * @param {ReactElement} nextElement component instance to render
+          * @param {DOMElement} container container to render into
+          * @param {?function} callback function triggered on completion
+          */
+         _updateRootComponent: function (prevComponent, nextElement, nextContext, container, callback) {
+           ReactMount.scrollMonitor(container, function () {
+             ReactUpdateQueue.enqueueElementInternal(prevComponent, nextElement, nextContext);
+             if (callback) {
+               ReactUpdateQueue.enqueueCallbackInternal(prevComponent, callback);
              }
+           });
+       
+           return prevComponent;
+         },
+       
+         /**
+          * Render a new component into the DOM. Hooked by devtools!
+          *
+          * @param {ReactElement} nextElement element to render
+          * @param {DOMElement} container container to render into
+          * @param {boolean} shouldReuseMarkup if we should skip the markup insertion
+          * @return {ReactComponent} nextComponent
+          */
+         _renderNewRootComponent: function (nextElement, container, shouldReuseMarkup, context) {
+           // Various parts of our code (such as ReactCompositeComponent's
+           // _renderValidatedComponent) assume that calls to render aren't nested;
+           // verify that that's the case.
+           process.env.NODE_ENV !== 'production' ? warning(ReactCurrentOwner.current == null, '_renderNewRootComponent(): Render methods should be a pure function ' + 'of props and state; triggering nested component updates from ' + 'render is not allowed. If necessary, trigger nested updates in ' + 'componentDidUpdate. Check the render method of %s.', ReactCurrentOwner.current && ReactCurrentOwner.current.getName() || 'ReactCompositeComponent') : void 0;
+       
+           !(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE || container.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE)) ? process.env.NODE_ENV !== 'production' ? invariant(false, '_registerComponent(...): Target container is not a DOM element.') : _prodInvariant('37') : void 0;
+       
+           ReactBrowserEventEmitter.ensureScrollValueMonitoring();
+           var componentInstance = instantiateReactComponent(nextElement, false);
+       
+           // The initial render is synchronous but any updates that happen during
+           // rendering, in componentWillMount or componentDidMount, will be batched
+           // according to the current batching strategy.
+       
+           ReactUpdates.batchedUpdates(batchedMountComponentIntoNode, componentInstance, container, shouldReuseMarkup, context);
+       
+           var wrapperID = componentInstance._instance.rootID;
+           instancesByReactRootID[wrapperID] = componentInstance;
+       
+           if (process.env.NODE_ENV !== 'production') {
+             // The instance here is TopLevelWrapper so we report mount for its child.
+             ReactInstrumentation.debugTool.onMountRootComponent(componentInstance._renderedComponent._debugID);
            }
+       
+           return componentInstance;
          },
        
-         willDeleteListener: function (id, registrationName) {
-           if (registrationName === ON_CLICK_KEY) {
-             onClickListeners[id].remove();
-             delete onClickListeners[id];
+         /**
+          * Renders a React component into the DOM in the supplied `container`.
+          *
+          * If the React component was previously rendered into `container`, this will
+          * perform an update on it and only mutate the DOM as necessary to reflect the
+          * latest React component.
+          *
+          * @param {ReactComponent} parentComponent The conceptual parent of this render tree.
+          * @param {ReactElement} nextElement Component element to render.
+          * @param {DOMElement} container DOM element to render into.
+          * @param {?function} callback function triggered on completion
+          * @return {ReactComponent} Component instance rendered in `container`.
+          */
+         renderSubtreeIntoContainer: function (parentComponent, nextElement, container, callback) {
+           !(parentComponent != null && ReactInstanceMap.has(parentComponent)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'parentComponent must be a valid React Component') : _prodInvariant('38') : void 0;
+           return ReactMount._renderSubtreeIntoContainer(parentComponent, nextElement, container, callback);
+         },
+       
+         _renderSubtreeIntoContainer: function (parentComponent, nextElement, container, callback) {
+           ReactUpdateQueue.validateCallback(callback, 'ReactDOM.render');
+           !ReactElement.isValidElement(nextElement) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactDOM.render(): Invalid component element.%s', typeof nextElement === 'string' ? ' Instead of passing a string like \'div\', pass ' + 'React.createElement(\'div\') or <div />.' : typeof nextElement === 'function' ? ' Instead of passing a class like Foo, pass ' + 'React.createElement(Foo) or <Foo />.' :
+           // Check if it quacks like an element
+           nextElement != null && nextElement.props !== undefined ? ' This may be caused by unintentionally loading two independent ' + 'copies of React.' : '') : _prodInvariant('39', typeof nextElement === 'string' ? ' Instead of passing a string like \'div\', pass ' + 'React.createElement(\'div\') or <div />.' : typeof nextElement === 'function' ? ' Instead of passing a class like Foo, pass ' + 'React.createElement(Foo) or <Foo />.' : nextElement != null && nextElement.props !== undefined ? ' This may be caused by unintentionally loading two independent ' + 'copies of React.' : '') : void 0;
+       
+           process.env.NODE_ENV !== 'production' ? warning(!container || !container.tagName || container.tagName.toUpperCase() !== 'BODY', 'render(): Rendering components directly into document.body is ' + 'discouraged, since its children are often manipulated by third-party ' + 'scripts and browser extensions. This may lead to subtle ' + 'reconciliation issues. Try rendering into a container element created ' + 'for your app.') : void 0;
+       
+           var nextWrappedElement = ReactElement(TopLevelWrapper, null, null, null, null, null, nextElement);
+       
+           var nextContext;
+           if (parentComponent) {
+             var parentInst = ReactInstanceMap.get(parentComponent);
+             nextContext = parentInst._processChildContext(parentInst._context);
+           } else {
+             nextContext = emptyObject;
            }
-         }
        
-       };
+           var prevComponent = getTopLevelWrapperInContainer(container);
        
-       module.exports = SimpleEventPlugin;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
-
-/***/ },
-/* 135 */
-/***/ 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.
-        *
-        * @providesModule SyntheticClipboardEvent
-        * @typechecks static-only
-        */
+           if (prevComponent) {
+             var prevWrappedElement = prevComponent._currentElement;
+             var prevElement = prevWrappedElement.props;
+             if (shouldUpdateReactComponent(prevElement, nextElement)) {
+               var publicInst = prevComponent._renderedComponent.getPublicInstance();
+               var updatedCallback = callback && function () {
+                 callback.call(publicInst);
+               };
+               ReactMount._updateRootComponent(prevComponent, nextWrappedElement, nextContext, container, updatedCallback);
+               return publicInst;
+             } else {
+               ReactMount.unmountComponentAtNode(container);
+             }
+           }
        
-       'use strict';
+           var reactRootElement = getReactRootElementInContainer(container);
+           var containerHasReactMarkup = reactRootElement && !!internalGetID(reactRootElement);
+           var containerHasNonRootReactChild = hasNonRootReactChild(container);
        
-       var SyntheticEvent = __webpack_require__(79);
+           if (process.env.NODE_ENV !== 'production') {
+             process.env.NODE_ENV !== 'production' ? warning(!containerHasNonRootReactChild, 'render(...): Replacing React-rendered children with a new root ' + 'component. If you intended to update the children of this node, ' + 'you should instead have the existing children update their state ' + 'and render the new components instead of calling ReactDOM.render.') : void 0;
        
-       /**
-        * @interface Event
-        * @see http://www.w3.org/TR/clipboard-apis/
-        */
-       var ClipboardEventInterface = {
-         clipboardData: function (event) {
-           return 'clipboardData' in event ? event.clipboardData : window.clipboardData;
-         }
-       };
+             if (!containerHasReactMarkup || reactRootElement.nextSibling) {
+               var rootElementSibling = reactRootElement;
+               while (rootElementSibling) {
+                 if (internalGetID(rootElementSibling)) {
+                   process.env.NODE_ENV !== 'production' ? warning(false, 'render(): Target node has markup rendered by React, but there ' + 'are unrelated nodes as well. This is most commonly caused by ' + 'white-space inserted around server-rendered markup.') : void 0;
+                   break;
+                 }
+                 rootElementSibling = rootElementSibling.nextSibling;
+               }
+             }
+           }
        
-       /**
-        * @param {object} dispatchConfig Configuration used to dispatch this event.
-        * @param {string} dispatchMarker Marker identifying the event target.
-        * @param {object} nativeEvent Native browser event.
-        * @extends {SyntheticUIEvent}
-        */
-       function SyntheticClipboardEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
-         SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
-       }
+           var shouldReuseMarkup = containerHasReactMarkup && !prevComponent && !containerHasNonRootReactChild;
+           var component = ReactMount._renderNewRootComponent(nextWrappedElement, container, shouldReuseMarkup, nextContext)._renderedComponent.getPublicInstance();
+           if (callback) {
+             callback.call(component);
+           }
+           return component;
+         },
        
-       SyntheticEvent.augmentClass(SyntheticClipboardEvent, ClipboardEventInterface);
+         /**
+          * Renders a React component into the DOM in the supplied `container`.
+          * See https://facebook.github.io/react/docs/top-level-api.html#reactdom.render
+          *
+          * If the React component was previously rendered into `container`, this will
+          * perform an update on it and only mutate the DOM as necessary to reflect the
+          * latest React component.
+          *
+          * @param {ReactElement} nextElement Component element to render.
+          * @param {DOMElement} container DOM element to render into.
+          * @param {?function} callback function triggered on completion
+          * @return {ReactComponent} Component instance rendered in `container`.
+          */
+         render: function (nextElement, container, callback) {
+           return ReactMount._renderSubtreeIntoContainer(null, nextElement, container, callback);
+         },
        
-       module.exports = SyntheticClipboardEvent;
-
-/***/ },
-/* 136 */
-/***/ 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.
-        *
-        * @providesModule SyntheticFocusEvent
-        * @typechecks static-only
-        */
+         /**
+          * Unmounts and destroys the React component rendered in the `container`.
+          * See https://facebook.github.io/react/docs/top-level-api.html#reactdom.unmountcomponentatnode
+          *
+          * @param {DOMElement} container DOM element containing a React component.
+          * @return {boolean} True if a component was found in and unmounted from
+          *                   `container`
+          */
+         unmountComponentAtNode: function (container) {
+           // Various parts of our code (such as ReactCompositeComponent's
+           // _renderValidatedComponent) assume that calls to render aren't nested;
+           // verify that that's the case. (Strictly speaking, unmounting won't cause a
+           // render but we still don't expect to be in a render call here.)
+           process.env.NODE_ENV !== 'production' ? warning(ReactCurrentOwner.current == null, 'unmountComponentAtNode(): Render methods should be a pure function ' + 'of props and state; triggering nested component updates from render ' + 'is not allowed. If necessary, trigger nested updates in ' + 'componentDidUpdate. Check the render method of %s.', ReactCurrentOwner.current && ReactCurrentOwner.current.getName() || 'ReactCompositeComponent') : void 0;
        
-       'use strict';
+           !(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE || container.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'unmountComponentAtNode(...): Target container is not a DOM element.') : _prodInvariant('40') : void 0;
        
-       var SyntheticUIEvent = __webpack_require__(89);
+           var prevComponent = getTopLevelWrapperInContainer(container);
+           if (!prevComponent) {
+             // Check if the node being unmounted was rendered by React, but isn't a
+             // root node.
+             var containerHasNonRootReactChild = hasNonRootReactChild(container);
        
-       /**
-        * @interface FocusEvent
-        * @see http://www.w3.org/TR/DOM-Level-3-Events/
-        */
-       var FocusEventInterface = {
-         relatedTarget: null
-       };
+             // Check if the container itself is a React root node.
+             var isContainerReactRoot = container.nodeType === 1 && container.hasAttribute(ROOT_ATTR_NAME);
        
-       /**
-        * @param {object} dispatchConfig Configuration used to dispatch this event.
-        * @param {string} dispatchMarker Marker identifying the event target.
-        * @param {object} nativeEvent Native browser event.
-        * @extends {SyntheticUIEvent}
-        */
-       function SyntheticFocusEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
-         SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
-       }
+             if (process.env.NODE_ENV !== 'production') {
+               process.env.NODE_ENV !== 'production' ? warning(!containerHasNonRootReactChild, 'unmountComponentAtNode(): The node you\'re attempting to unmount ' + 'was rendered by React and is not a top-level container. %s', isContainerReactRoot ? 'You may have accidentally passed in a React root node instead ' + 'of its container.' : 'Instead, have the parent component update its state and ' + 'rerender in order to remove this component.') : void 0;
+             }
        
-       SyntheticUIEvent.augmentClass(SyntheticFocusEvent, FocusEventInterface);
+             return false;
+           }
+           delete instancesByReactRootID[prevComponent._instance.rootID];
+           ReactUpdates.batchedUpdates(unmountComponentFromNode, prevComponent, container, false);
+           return true;
+         },
        
-       module.exports = SyntheticFocusEvent;
-
-/***/ },
-/* 137 */
-/***/ 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.
-        *
-        * @providesModule SyntheticKeyboardEvent
-        * @typechecks static-only
-        */
+         _mountImageIntoNode: function (markup, container, instance, shouldReuseMarkup, transaction) {
+           !(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE || container.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'mountComponentIntoNode(...): Target container is not valid.') : _prodInvariant('41') : void 0;
        
-       'use strict';
+           if (shouldReuseMarkup) {
+             var rootElement = getReactRootElementInContainer(container);
+             if (ReactMarkupChecksum.canReuseMarkup(markup, rootElement)) {
+               ReactDOMComponentTree.precacheNode(instance, rootElement);
+               return;
+             } else {
+               var checksum = rootElement.getAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME);
+               rootElement.removeAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME);
        
-       var SyntheticUIEvent = __webpack_require__(89);
+               var rootMarkup = rootElement.outerHTML;
+               rootElement.setAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME, checksum);
        
-       var getEventCharCode = __webpack_require__(138);
-       var getEventKey = __webpack_require__(139);
-       var getEventModifierState = __webpack_require__(90);
+               var normalizedMarkup = markup;
+               if (process.env.NODE_ENV !== 'production') {
+                 // because rootMarkup is retrieved from the DOM, various normalizations
+                 // will have occurred which will not be present in `markup`. Here,
+                 // insert markup into a <div> or <iframe> depending on the container
+                 // type to perform the same normalizations before comparing.
+                 var normalizer;
+                 if (container.nodeType === ELEMENT_NODE_TYPE) {
+                   normalizer = document.createElement('div');
+                   normalizer.innerHTML = markup;
+                   normalizedMarkup = normalizer.innerHTML;
+                 } else {
+                   normalizer = document.createElement('iframe');
+                   document.body.appendChild(normalizer);
+                   normalizer.contentDocument.write(markup);
+                   normalizedMarkup = normalizer.contentDocument.documentElement.outerHTML;
+                   document.body.removeChild(normalizer);
+                 }
+               }
        
-       /**
-        * @interface KeyboardEvent
-        * @see http://www.w3.org/TR/DOM-Level-3-Events/
-        */
-       var KeyboardEventInterface = {
-         key: getEventKey,
-         location: null,
-         ctrlKey: null,
-         shiftKey: null,
-         altKey: null,
-         metaKey: null,
-         repeat: null,
-         locale: null,
-         getModifierState: getEventModifierState,
-         // Legacy Interface
-         charCode: function (event) {
-           // `charCode` is the result of a KeyPress event and represents the value of
-           // the actual printable character.
+               var diffIndex = firstDifferenceIndex(normalizedMarkup, rootMarkup);
+               var difference = ' (client) ' + normalizedMarkup.substring(diffIndex - 20, diffIndex + 20) + '\n (server) ' + rootMarkup.substring(diffIndex - 20, diffIndex + 20);
        
-           // KeyPress is deprecated, but its replacement is not yet final and not
-           // implemented in any major browser. Only KeyPress has charCode.
-           if (event.type === 'keypress') {
-             return getEventCharCode(event);
-           }
-           return 0;
-         },
-         keyCode: function (event) {
-           // `keyCode` is the result of a KeyDown/Up event and represents the value of
-           // physical keyboard key.
+               !(container.nodeType !== DOC_NODE_TYPE) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'You\'re trying to render a component to the document using server rendering but the checksum was invalid. This usually means you rendered a different component type or props on the client from the one on the server, or your render() methods are impure. React cannot handle this case due to cross-browser quirks by rendering at the document root. You should look for environment dependent code in your components and ensure the props are the same client and server side:\n%s', difference) : _prodInvariant('42', difference) : void 0;
        
-           // The actual meaning of the value depends on the users' keyboard layout
-           // which cannot be detected. Assuming that it is a US keyboard layout
-           // provides a surprisingly accurate mapping for US and European users.
-           // Due to this, it is left to the user to implement at this time.
-           if (event.type === 'keydown' || event.type === 'keyup') {
-             return event.keyCode;
-           }
-           return 0;
-         },
-         which: function (event) {
-           // `which` is an alias for either `keyCode` or `charCode` depending on the
-           // type of the event.
-           if (event.type === 'keypress') {
-             return getEventCharCode(event);
-           }
-           if (event.type === 'keydown' || event.type === 'keyup') {
-             return event.keyCode;
+               if (process.env.NODE_ENV !== 'production') {
+                 process.env.NODE_ENV !== 'production' ? warning(false, 'React attempted to reuse markup in a container but the ' + 'checksum was invalid. This generally means that you are ' + 'using server rendering and the markup generated on the ' + 'server was not what the client was expecting. React injected ' + 'new markup to compensate which works but you have lost many ' + 'of the benefits of server rendering. Instead, figure out ' + 'why the markup being generated is different on the client ' + 'or server:\n%s', difference) : void 0;
+               }
+             }
            }
-           return 0;
-         }
-       };
        
-       /**
-        * @param {object} dispatchConfig Configuration used to dispatch this event.
-        * @param {string} dispatchMarker Marker identifying the event target.
-        * @param {object} nativeEvent Native browser event.
-        * @extends {SyntheticUIEvent}
-        */
-       function SyntheticKeyboardEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
-         SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
-       }
+           !(container.nodeType !== DOC_NODE_TYPE) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'You\'re trying to render a component to the document but you didn\'t use server rendering. We can\'t do this without using server rendering due to cross-browser quirks. See ReactDOMServer.renderToString() for server rendering.') : _prodInvariant('43') : void 0;
        
-       SyntheticUIEvent.augmentClass(SyntheticKeyboardEvent, KeyboardEventInterface);
+           if (transaction.useCreateElement) {
+             while (container.lastChild) {
+               container.removeChild(container.lastChild);
+             }
+             DOMLazyTree.insertTreeBefore(container, markup, null);
+           } else {
+             setInnerHTML(container, markup);
+             ReactDOMComponentTree.precacheNode(instance, container.firstChild);
+           }
+       
+           if (process.env.NODE_ENV !== 'production') {
+             var hostNode = ReactDOMComponentTree.getInstanceFromNode(container.firstChild);
+             if (hostNode._debugID !== 0) {
+               ReactInstrumentation.debugTool.onHostOperation(hostNode._debugID, 'mount', markup.toString());
+             }
+           }
+         }
+       };
        
-       module.exports = SyntheticKeyboardEvent;
+       module.exports = ReactMount;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
 
 /***/ },
-/* 138 */
-/***/ function(module, exports) {
+/* 170 */
+/***/ function(module, exports, __webpack_require__) {
 
-       /**
-        * Copyright 2013-2015, Facebook, Inc.
+       /* WEBPACK VAR INJECTION */(function(process) {/**
+        * Copyright 2013-present, 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.
         *
-        * @providesModule getEventCharCode
-        * @typechecks static-only
+        * @providesModule ReactDOMContainerInfo
         */
        
        'use strict';
        
-       /**
-        * `charCode` represents the actual "character code" and is safe to use with
-        * `String.fromCharCode`. As such, only keys that correspond to printable
-        * characters produce a valid `charCode`, the only exception to this is Enter.
-        * The Tab-key is considered non-printable and does not have a `charCode`,
-        * presumably because it does not produce a tab-character in browsers.
-        *
-        * @param {object} nativeEvent Native browser event.
-        * @return {number} Normalized `charCode` property.
-        */
-       function getEventCharCode(nativeEvent) {
-         var charCode;
-         var keyCode = nativeEvent.keyCode;
-       
-         if ('charCode' in nativeEvent) {
-           charCode = nativeEvent.charCode;
+       var validateDOMNesting = __webpack_require__(139);
        
-           // FF does not set `charCode` for the Enter-key, check against `keyCode`.
-           if (charCode === 0 && keyCode === 13) {
-             charCode = 13;
-           }
-         } else {
-           // IE8 does not implement `charCode`, but `keyCode` has the correct value.
-           charCode = keyCode;
-         }
+       var DOC_NODE_TYPE = 9;
        
-         // Some non-printable keys are reported in `charCode`/`keyCode`, discard them.
-         // Must not discard the (non-)printable Enter-key.
-         if (charCode >= 32 || charCode === 13) {
-           return charCode;
+       function ReactDOMContainerInfo(topLevelWrapper, node) {
+         var info = {
+           _topLevelWrapper: topLevelWrapper,
+           _idCounter: 1,
+           _ownerDocument: node ? node.nodeType === DOC_NODE_TYPE ? node : node.ownerDocument : null,
+           _node: node,
+           _tag: node ? node.nodeName.toLowerCase() : null,
+           _namespaceURI: node ? node.namespaceURI : null
+         };
+         if (process.env.NODE_ENV !== 'production') {
+           info._ancestorInfo = node ? validateDOMNesting.updatedAncestorInfo(null, info._tag, null) : null;
          }
-       
-         return 0;
+         return info;
        }
        
-       module.exports = getEventCharCode;
+       module.exports = ReactDOMContainerInfo;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
 
 /***/ },
-/* 139 */
-/***/ function(module, exports, __webpack_require__) {
+/* 171 */
+/***/ function(module, exports) {
 
        /**
-        * Copyright 2013-2015, Facebook, Inc.
+        * Copyright 2013-present, 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.
         *
-        * @providesModule getEventKey
-        * @typechecks static-only
+        * @providesModule ReactDOMFeatureFlags
         */
        
        'use strict';
        
-       var getEventCharCode = __webpack_require__(138);
-       
-       /**
-        * Normalization of deprecated HTML5 `key` values
-        * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names
-        */
-       var normalizeKey = {
-         'Esc': 'Escape',
-         'Spacebar': ' ',
-         'Left': 'ArrowLeft',
-         'Up': 'ArrowUp',
-         'Right': 'ArrowRight',
-         'Down': 'ArrowDown',
-         'Del': 'Delete',
-         'Win': 'OS',
-         'Menu': 'ContextMenu',
-         'Apps': 'ContextMenu',
-         'Scroll': 'ScrollLock',
-         'MozPrintableKey': 'Unidentified'
-       };
-       
-       /**
-        * Translation from legacy `keyCode` to HTML5 `key`
-        * Only special keys supported, all others depend on keyboard layout or browser
-        * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names
-        */
-       var translateToKey = {
-         8: 'Backspace',
-         9: 'Tab',
-         12: 'Clear',
-         13: 'Enter',
-         16: 'Shift',
-         17: 'Control',
-         18: 'Alt',
-         19: 'Pause',
-         20: 'CapsLock',
-         27: 'Escape',
-         32: ' ',
-         33: 'PageUp',
-         34: 'PageDown',
-         35: 'End',
-         36: 'Home',
-         37: 'ArrowLeft',
-         38: 'ArrowUp',
-         39: 'ArrowRight',
-         40: 'ArrowDown',
-         45: 'Insert',
-         46: 'Delete',
-         112: 'F1', 113: 'F2', 114: 'F3', 115: 'F4', 116: 'F5', 117: 'F6',
-         118: 'F7', 119: 'F8', 120: 'F9', 121: 'F10', 122: 'F11', 123: 'F12',
-         144: 'NumLock',
-         145: 'ScrollLock',
-         224: 'Meta'
+       var ReactDOMFeatureFlags = {
+         useCreateElement: true
        };
        
-       /**
-        * @param {object} nativeEvent Native browser event.
-        * @return {string} Normalized `key` property.
-        */
-       function getEventKey(nativeEvent) {
-         if (nativeEvent.key) {
-           // Normalize inconsistent values reported by browsers due to
-           // implementations of a working draft specification.
-       
-           // FireFox implements `key` but returns `MozPrintableKey` for all
-           // printable characters (normalized to `Unidentified`), ignore it.
-           var key = normalizeKey[nativeEvent.key] || nativeEvent.key;
-           if (key !== 'Unidentified') {
-             return key;
-           }
-         }
-       
-         // Browser does not implement `key`, polyfill as much of it as we can.
-         if (nativeEvent.type === 'keypress') {
-           var charCode = getEventCharCode(nativeEvent);
-       
-           // The enter-key is technically both printable and non-printable and can
-           // thus be captured by `keypress`, no other non-printable key should.
-           return charCode === 13 ? 'Enter' : String.fromCharCode(charCode);
-         }
-         if (nativeEvent.type === 'keydown' || nativeEvent.type === 'keyup') {
-           // While user keyboard layout determines the actual meaning of each
-           // `keyCode` value, almost all function keys have a universal value.
-           return translateToKey[nativeEvent.keyCode] || 'Unidentified';
-         }
-         return '';
-       }
-       
-       module.exports = getEventKey;
+       module.exports = ReactDOMFeatureFlags;
 
 /***/ },
-/* 140 */
+/* 172 */
 /***/ function(module, exports, __webpack_require__) {
 
        /**
-        * Copyright 2013-2015, Facebook, Inc.
+        * Copyright 2013-present, 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.
         *
-        * @providesModule SyntheticDragEvent
-        * @typechecks static-only
+        * @providesModule ReactMarkupChecksum
         */
        
        'use strict';
        
-       var SyntheticMouseEvent = __webpack_require__(88);
+       var adler32 = __webpack_require__(173);
        
-       /**
-        * @interface DragEvent
-        * @see http://www.w3.org/TR/DOM-Level-3-Events/
-        */
-       var DragEventInterface = {
-         dataTransfer: null
-       };
+       var TAG_END = /\/?>/;
+       var COMMENT_START = /^<\!\-\-/;
        
-       /**
-        * @param {object} dispatchConfig Configuration used to dispatch this event.
-        * @param {string} dispatchMarker Marker identifying the event target.
-        * @param {object} nativeEvent Native browser event.
-        * @extends {SyntheticUIEvent}
-        */
-       function SyntheticDragEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
-         SyntheticMouseEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
-       }
+       var ReactMarkupChecksum = {
+         CHECKSUM_ATTR_NAME: 'data-react-checksum',
        
-       SyntheticMouseEvent.augmentClass(SyntheticDragEvent, DragEventInterface);
+         /**
+          * @param {string} markup Markup string
+          * @return {string} Markup string with checksum attribute attached
+          */
+         addChecksumToMarkup: function (markup) {
+           var checksum = adler32(markup);
        
-       module.exports = SyntheticDragEvent;
+           // Add checksum (handle both parent tags, comments and self-closing tags)
+           if (COMMENT_START.test(markup)) {
+             return markup;
+           } else {
+             return markup.replace(TAG_END, ' ' + ReactMarkupChecksum.CHECKSUM_ATTR_NAME + '="' + checksum + '"$&');
+           }
+         },
+       
+         /**
+          * @param {string} markup to use
+          * @param {DOMElement} element root React element
+          * @returns {boolean} whether or not the markup is the same
+          */
+         canReuseMarkup: function (markup, element) {
+           var existingChecksum = element.getAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME);
+           existingChecksum = existingChecksum && parseInt(existingChecksum, 10);
+           var markupChecksum = adler32(markup);
+           return markupChecksum === existingChecksum;
+         }
+       };
+       
+       module.exports = ReactMarkupChecksum;
 
 /***/ },
-/* 141 */
-/***/ function(module, exports, __webpack_require__) {
+/* 173 */
+/***/ function(module, exports) {
 
        /**
-        * Copyright 2013-2015, Facebook, Inc.
+        * Copyright 2013-present, 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.
         *
-        * @providesModule SyntheticTouchEvent
-        * @typechecks static-only
+        * @providesModule adler32
+        * 
         */
        
        'use strict';
        
-       var SyntheticUIEvent = __webpack_require__(89);
-       
-       var getEventModifierState = __webpack_require__(90);
-       
-       /**
-        * @interface TouchEvent
-        * @see http://www.w3.org/TR/touch-events/
-        */
-       var TouchEventInterface = {
-         touches: null,
-         targetTouches: null,
-         changedTouches: null,
-         altKey: null,
-         metaKey: null,
-         ctrlKey: null,
-         shiftKey: null,
-         getModifierState: getEventModifierState
-       };
+       var MOD = 65521;
        
-       /**
-        * @param {object} dispatchConfig Configuration used to dispatch this event.
-        * @param {string} dispatchMarker Marker identifying the event target.
-        * @param {object} nativeEvent Native browser event.
-        * @extends {SyntheticUIEvent}
-        */
-       function SyntheticTouchEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
-         SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
+       // adler32 is not cryptographically strong, and is only used to sanity check that
+       // markup generated on the server matches the markup generated on the client.
+       // This implementation (a modified version of the SheetJS version) has been optimized
+       // for our use case, at the expense of conforming to the adler32 specification
+       // for non-ascii inputs.
+       function adler32(data) {
+         var a = 1;
+         var b = 0;
+         var i = 0;
+         var l = data.length;
+         var m = l & ~0x3;
+         while (i < m) {
+           var n = Math.min(i + 4096, m);
+           for (; i < n; i += 4) {
+             b += (a += data.charCodeAt(i)) + (a += data.charCodeAt(i + 1)) + (a += data.charCodeAt(i + 2)) + (a += data.charCodeAt(i + 3));
+           }
+           a %= MOD;
+           b %= MOD;
+         }
+         for (; i < l; i++) {
+           b += a += data.charCodeAt(i);
+         }
+         a %= MOD;
+         b %= MOD;
+         return a | b << 16;
        }
        
-       SyntheticUIEvent.augmentClass(SyntheticTouchEvent, TouchEventInterface);
-       
-       module.exports = SyntheticTouchEvent;
+       module.exports = adler32;
 
 /***/ },
-/* 142 */
+/* 174 */
 /***/ function(module, exports, __webpack_require__) {
 
-       /**
-        * Copyright 2013-2015, Facebook, Inc.
+       /* WEBPACK VAR INJECTION */(function(process) {/**
+        * Copyright 2013-present, 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.
         *
-        * @providesModule SyntheticWheelEvent
-        * @typechecks static-only
+        * @providesModule findDOMNode
         */
        
        'use strict';
        
-       var SyntheticMouseEvent = __webpack_require__(88);
+       var _prodInvariant = __webpack_require__(9);
        
-       /**
-        * @interface WheelEvent
-        * @see http://www.w3.org/TR/DOM-Level-3-Events/
-        */
-       var WheelEventInterface = {
-         deltaX: function (event) {
-           return 'deltaX' in event ? event.deltaX :
-           // Fallback to `wheelDeltaX` for Webkit and normalize (right is positive).
-           'wheelDeltaX' in event ? -event.wheelDeltaX : 0;
-         },
-         deltaY: function (event) {
-           return 'deltaY' in event ? event.deltaY :
-           // Fallback to `wheelDeltaY` for Webkit and normalize (down is positive).
-           'wheelDeltaY' in event ? -event.wheelDeltaY :
-           // Fallback to `wheelDelta` for IE<9 and normalize (down is positive).
-           'wheelDelta' in event ? -event.wheelDelta : 0;
-         },
-         deltaZ: null,
+       var ReactCurrentOwner = __webpack_require__(12);
+       var ReactDOMComponentTree = __webpack_require__(39);
+       var ReactInstanceMap = __webpack_require__(126);
        
-         // Browsers without "deltaMode" is reporting in raw wheel delta where one
-         // notch on the scroll is always +/- 120, roughly equivalent to pixels.
-         // A good approximation of DOM_DELTA_LINE (1) is 5% of viewport size or
-         // ~40 pixels, for DOM_DELTA_SCREEN (2) it is 87.5% of viewport size.
-         deltaMode: null
-       };
+       var getHostComponentFromComposite = __webpack_require__(175);
+       var invariant = __webpack_require__(10);
+       var warning = __webpack_require__(13);
        
        /**
-        * @param {object} dispatchConfig Configuration used to dispatch this event.
-        * @param {string} dispatchMarker Marker identifying the event target.
-        * @param {object} nativeEvent Native browser event.
-        * @extends {SyntheticMouseEvent}
+        * Returns the DOM node rendered by this element.
+        *
+        * See https://facebook.github.io/react/docs/top-level-api.html#reactdom.finddomnode
+        *
+        * @param {ReactComponent|DOMElement} componentOrElement
+        * @return {?DOMElement} The root node of this element.
         */
-       function SyntheticWheelEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
-         SyntheticMouseEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
-       }
+       function findDOMNode(componentOrElement) {
+         if (process.env.NODE_ENV !== 'production') {
+           var owner = ReactCurrentOwner.current;
+           if (owner !== null) {
+             process.env.NODE_ENV !== 'production' ? warning(owner._warnedAboutRefsInRender, '%s is accessing findDOMNode inside its render(). ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', owner.getName() || 'A component') : void 0;
+             owner._warnedAboutRefsInRender = true;
+           }
+         }
+         if (componentOrElement == null) {
+           return null;
+         }
+         if (componentOrElement.nodeType === 1) {
+           return componentOrElement;
+         }
        
-       SyntheticMouseEvent.augmentClass(SyntheticWheelEvent, WheelEventInterface);
+         var inst = ReactInstanceMap.get(componentOrElement);
+         if (inst) {
+           inst = getHostComponentFromComposite(inst);
+           return inst ? ReactDOMComponentTree.getNodeFromInstance(inst) : null;
+         }
        
-       module.exports = SyntheticWheelEvent;
+         if (typeof componentOrElement.render === 'function') {
+            true ? process.env.NODE_ENV !== 'production' ? invariant(false, 'findDOMNode was called on an unmounted component.') : _prodInvariant('44') : void 0;
+         } else {
+            true ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Element appears to be neither ReactComponent nor DOMNode (keys: %s)', Object.keys(componentOrElement)) : _prodInvariant('45', Object.keys(componentOrElement)) : void 0;
+         }
+       }
+       
+       module.exports = findDOMNode;
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
 
 /***/ },
-/* 143 */
+/* 175 */
 /***/ function(module, exports, __webpack_require__) {
 
        /**
-        * Copyright 2013-2015, Facebook, Inc.
+        * Copyright 2013-present, 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.
         *
-        * @providesModule SVGDOMPropertyConfig
+        * @providesModule getHostComponentFromComposite
         */
        
        'use strict';
        
-       var DOMProperty = __webpack_require__(25);
+       var ReactNodeTypes = __webpack_require__(130);
        
-       var MUST_USE_ATTRIBUTE = DOMProperty.injection.MUST_USE_ATTRIBUTE;
+       function getHostComponentFromComposite(inst) {
+         var type;
        
-       var NS = {
-         xlink: 'http://www.w3.org/1999/xlink',
-         xml: 'http://www.w3.org/XML/1998/namespace'
-       };
+         while ((type = inst._renderedNodeType) === ReactNodeTypes.COMPOSITE) {
+           inst = inst._renderedComponent;
+         }
        
-       var SVGDOMPropertyConfig = {
-         Properties: {
-           clipPath: MUST_USE_ATTRIBUTE,
-           cx: MUST_USE_ATTRIBUTE,
-           cy: MUST_USE_ATTRIBUTE,
-           d: MUST_USE_ATTRIBUTE,
-           dx: MUST_USE_ATTRIBUTE,
-           dy: MUST_USE_ATTRIBUTE,
-           fill: MUST_USE_ATTRIBUTE,
-           fillOpacity: MUST_USE_ATTRIBUTE,
-           fontFamily: MUST_USE_ATTRIBUTE,
-           fontSize: MUST_USE_ATTRIBUTE,
-           fx: MUST_USE_ATTRIBUTE,
-           fy: MUST_USE_ATTRIBUTE,
-           gradientTransform: MUST_USE_ATTRIBUTE,
-           gradientUnits: MUST_USE_ATTRIBUTE,
-           markerEnd: MUST_USE_ATTRIBUTE,
-           markerMid: MUST_USE_ATTRIBUTE,
-           markerStart: MUST_USE_ATTRIBUTE,
-           offset: MUST_USE_ATTRIBUTE,
-           opacity: MUST_USE_ATTRIBUTE,
-           patternContentUnits: MUST_USE_ATTRIBUTE,
-           patternUnits: MUST_USE_ATTRIBUTE,
-           points: MUST_USE_ATTRIBUTE,
-           preserveAspectRatio: MUST_USE_ATTRIBUTE,
-           r: MUST_USE_ATTRIBUTE,
-           rx: MUST_USE_ATTRIBUTE,
-           ry: MUST_USE_ATTRIBUTE,
-           spreadMethod: MUST_USE_ATTRIBUTE,
-           stopColor: MUST_USE_ATTRIBUTE,
-           stopOpacity: MUST_USE_ATTRIBUTE,
-           stroke: MUST_USE_ATTRIBUTE,
-           strokeDasharray: MUST_USE_ATTRIBUTE,
-           strokeLinecap: MUST_USE_ATTRIBUTE,
-           strokeOpacity: MUST_USE_ATTRIBUTE,
-           strokeWidth: MUST_USE_ATTRIBUTE,
-           textAnchor: MUST_USE_ATTRIBUTE,
-           transform: MUST_USE_ATTRIBUTE,
-           version: MUST_USE_ATTRIBUTE,
-           viewBox: MUST_USE_ATTRIBUTE,
-           x1: MUST_USE_ATTRIBUTE,
-           x2: MUST_USE_ATTRIBUTE,
-           x: MUST_USE_ATTRIBUTE,
-           xlinkActuate: MUST_USE_ATTRIBUTE,
-           xlinkArcrole: MUST_USE_ATTRIBUTE,
-           xlinkHref: MUST_USE_ATTRIBUTE,
-           xlinkRole: MUST_USE_ATTRIBUTE,
-           xlinkShow: MUST_USE_ATTRIBUTE,
-           xlinkTitle: MUST_USE_ATTRIBUTE,
-           xlinkType: MUST_USE_ATTRIBUTE,
-           xmlBase: MUST_USE_ATTRIBUTE,
-           xmlLang: MUST_USE_ATTRIBUTE,
-           xmlSpace: MUST_USE_ATTRIBUTE,
-           y1: MUST_USE_ATTRIBUTE,
-           y2: MUST_USE_ATTRIBUTE,
-           y: MUST_USE_ATTRIBUTE
-         },
-         DOMAttributeNamespaces: {
-           xlinkActuate: NS.xlink,
-           xlinkArcrole: NS.xlink,
-           xlinkHref: NS.xlink,
-           xlinkRole: NS.xlink,
-           xlinkShow: NS.xlink,
-           xlinkTitle: NS.xlink,
-           xlinkType: NS.xlink,
-           xmlBase: NS.xml,
-           xmlLang: NS.xml,
-           xmlSpace: NS.xml
-         },
-         DOMAttributeNames: {
-           clipPath: 'clip-path',
-           fillOpacity: 'fill-opacity',
-           fontFamily: 'font-family',
-           fontSize: 'font-size',
-           gradientTransform: 'gradientTransform',
-           gradientUnits: 'gradientUnits',
-           markerEnd: 'marker-end',
-           markerMid: 'marker-mid',
-           markerStart: 'marker-start',
-           patternContentUnits: 'patternContentUnits',
-           patternUnits: 'patternUnits',
-           preserveAspectRatio: 'preserveAspectRatio',
-           spreadMethod: 'spreadMethod',
-           stopColor: 'stop-color',
-           stopOpacity: 'stop-opacity',
-           strokeDasharray: 'stroke-dasharray',
-           strokeLinecap: 'stroke-linecap',
-           strokeOpacity: 'stroke-opacity',
-           strokeWidth: 'stroke-width',
-           textAnchor: 'text-anchor',
-           viewBox: 'viewBox',
-           xlinkActuate: 'xlink:actuate',
-           xlinkArcrole: 'xlink:arcrole',
-           xlinkHref: 'xlink:href',
-           xlinkRole: 'xlink:role',
-           xlinkShow: 'xlink:show',
-           xlinkTitle: 'xlink:title',
-           xlinkType: 'xlink:type',
-           xmlBase: 'xml:base',
-           xmlLang: 'xml:lang',
-           xmlSpace: 'xml:space'
+         if (type === ReactNodeTypes.HOST) {
+           return inst._renderedComponent;
+         } else if (type === ReactNodeTypes.EMPTY) {
+           return null;
          }
-       };
+       }
        
-       module.exports = SVGDOMPropertyConfig;
+       module.exports = getHostComponentFromComposite;
 
 /***/ },
-/* 144 */
+/* 176 */
 /***/ function(module, exports, __webpack_require__) {
 
        /**
-        * Copyright 2013-2015, Facebook, Inc.
+        * Copyright 2013-present, 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.
         *
-        * @providesModule ReactDefaultPerf
-        * @typechecks static-only
-        */
+       * @providesModule renderSubtreeIntoContainer
+       */
        
        'use strict';
        
-       var DOMProperty = __webpack_require__(25);
-       var ReactDefaultPerfAnalysis = __webpack_require__(145);
-       var ReactMount = __webpack_require__(30);
-       var ReactPerf = __webpack_require__(20);
-       
-       var performanceNow = __webpack_require__(146);
+       var ReactMount = __webpack_require__(169);
        
-       function roundFloat(val) {
-         return Math.floor(val * 100) / 100;
-       }
+       module.exports = ReactMount.renderSubtreeIntoContainer;
+
+/***/ },
+/* 177 */
+/***/ function(module, exports) {
+
+       //! moment.js
+       //! version : 2.14.1
+       //! authors : Tim Wood, Iskren Chernev, Moment.js contributors
+       //! license : MIT
+       //! momentjs.com
        
-       function addValue(obj, key, val) {
-         obj[key] = (obj[key] || 0) + val;
-       }
+       ;(function (global, factory) {
+           typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+           typeof define === 'function' && define.amd ? define(factory) :
+           global.moment = factory()
+       }(this, function () { 'use strict';
        
-       var ReactDefaultPerf = {
-         _allMeasurements: [], // last item in the list is the current one
-         _mountStack: [0],
-         _injected: false,
+           var hookCallback;
        
-         start: function () {
-           if (!ReactDefaultPerf._injected) {
-             ReactPerf.injection.injectMeasure(ReactDefaultPerf.measure);
+           function utils_hooks__hooks () {
+               return hookCallback.apply(null, arguments);
            }
        
-           ReactDefaultPerf._allMeasurements.length = 0;
-           ReactPerf.enableMeasure = true;
-         },
-       
-         stop: function () {
-           ReactPerf.enableMeasure = false;
-         },
-       
-         getLastMeasurements: function () {
-           return ReactDefaultPerf._allMeasurements;
-         },
+           // This is done to register the method called with moment()
+           // without creating circular dependencies.
+           function setHookCallback (callback) {
+               hookCallback = callback;
+           }
        
-         printExclusive: function (measurements) {
-           measurements = measurements || ReactDefaultPerf._allMeasurements;
-           var summary = ReactDefaultPerfAnalysis.getExclusiveSummary(measurements);
-           console.table(summary.map(function (item) {
-             return {
-               'Component class name': item.componentName,
-               'Total inclusive time (ms)': roundFloat(item.inclusive),
-               'Exclusive mount time (ms)': roundFloat(item.exclusive),
-               'Exclusive render time (ms)': roundFloat(item.render),
-               'Mount time per instance (ms)': roundFloat(item.exclusive / item.count),
-               'Render time per instance (ms)': roundFloat(item.render / item.count),
-               'Instances': item.count
-             };
-           }));
-           // TODO: ReactDefaultPerfAnalysis.getTotalTime() does not return the correct
-           // number.
-         },
+           function isArray(input) {
+               return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]';
+           }
        
-         printInclusive: function (measurements) {
-           measurements = measurements || ReactDefaultPerf._allMeasurements;
-           var summary = ReactDefaultPerfAnalysis.getInclusiveSummary(measurements);
-           console.table(summary.map(function (item) {
-             return {
-               'Owner > component': item.componentName,
-               'Inclusive time (ms)': roundFloat(item.time),
-               'Instances': item.count
-             };
-           }));
-           console.log('Total time:', ReactDefaultPerfAnalysis.getTotalTime(measurements).toFixed(2) + ' ms');
-         },
+           function isObject(input) {
+               return Object.prototype.toString.call(input) === '[object Object]';
+           }
        
-         getMeasurementsSummaryMap: function (measurements) {
-           var summary = ReactDefaultPerfAnalysis.getInclusiveSummary(measurements, true);
-           return summary.map(function (item) {
-             return {
-               'Owner > component': item.componentName,
-               'Wasted time (ms)': item.time,
-               'Instances': item.count
-             };
-           });
-         },
+           function isObjectEmpty(obj) {
+               var k;
+               for (k in obj) {
+                   // even if its not own property I'd still call it non-empty
+                   return false;
+               }
+               return true;
+           }
        
-         printWasted: function (measurements) {
-           measurements = measurements || ReactDefaultPerf._allMeasurements;
-           console.table(ReactDefaultPerf.getMeasurementsSummaryMap(measurements));
-           console.log('Total time:', ReactDefaultPerfAnalysis.getTotalTime(measurements).toFixed(2) + ' ms');
-         },
+           function isDate(input) {
+               return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]';
+           }
        
-         printDOM: function (measurements) {
-           measurements = measurements || ReactDefaultPerf._allMeasurements;
-           var summary = ReactDefaultPerfAnalysis.getDOMSummary(measurements);
-           console.table(summary.map(function (item) {
-             var result = {};
-             result[DOMProperty.ID_ATTRIBUTE_NAME] = item.id;
-             result.type = item.type;
-             result.args = JSON.stringify(item.args);
-             return result;
-           }));
-           console.log('Total time:', ReactDefaultPerfAnalysis.getTotalTime(measurements).toFixed(2) + ' ms');
-         },
+           function map(arr, fn) {
+               var res = [], i;
+               for (i = 0; i < arr.length; ++i) {
+                   res.push(fn(arr[i], i));
+               }
+               return res;
+           }
        
-         _recordWrite: function (id, fnName, totalTime, args) {
-           // TODO: totalTime isn't that useful since it doesn't count paints/reflows
-           var writes = ReactDefaultPerf._allMeasurements[ReactDefaultPerf._allMeasurements.length - 1].writes;
-           writes[id] = writes[id] || [];
-           writes[id].push({
-             type: fnName,
-             time: totalTime,
-             args: args
-           });
-         },
+           function hasOwnProp(a, b) {
+               return Object.prototype.hasOwnProperty.call(a, b);
+           }
        
-         measure: function (moduleName, fnName, func) {
-           return function () {
-             for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
-               args[_key] = arguments[_key];
-             }
-       
-             var totalTime;
-             var rv;
-             var start;
-       
-             if (fnName === '_renderNewRootComponent' || fnName === 'flushBatchedUpdates') {
-               // A "measurement" is a set of metrics recorded for each flush. We want
-               // to group the metrics for a given flush together so we can look at the
-               // components that rendered and the DOM operations that actually
-               // happened to determine the amount of "wasted work" performed.
-               ReactDefaultPerf._allMeasurements.push({
-                 exclusive: {},
-                 inclusive: {},
-                 render: {},
-                 counts: {},
-                 writes: {},
-                 displayNames: {},
-                 totalTime: 0,
-                 created: {}
-               });
-               start = performanceNow();
-               rv = func.apply(this, args);
-               ReactDefaultPerf._allMeasurements[ReactDefaultPerf._allMeasurements.length - 1].totalTime = performanceNow() - start;
-               return rv;
-             } else if (fnName === '_mountImageIntoNode' || moduleName === 'ReactBrowserEventEmitter' || moduleName === 'ReactDOMIDOperations' || moduleName === 'CSSPropertyOperations' || moduleName === 'DOMChildrenOperations' || moduleName === 'DOMPropertyOperations') {
-               start = performanceNow();
-               rv = func.apply(this, args);
-               totalTime = performanceNow() - start;
-       
-               if (fnName === '_mountImageIntoNode') {
-                 var mountID = ReactMount.getID(args[1]);
-                 ReactDefaultPerf._recordWrite(mountID, fnName, totalTime, args[0]);
-               } else if (fnName === 'dangerouslyProcessChildrenUpdates') {
-                 // special format
-                 args[0].forEach(function (update) {
-                   var writeArgs = {};
-                   if (update.fromIndex !== null) {
-                     writeArgs.fromIndex = update.fromIndex;
+           function extend(a, b) {
+               for (var i in b) {
+                   if (hasOwnProp(b, i)) {
+                       a[i] = b[i];
                    }
-                   if (update.toIndex !== null) {
-                     writeArgs.toIndex = update.toIndex;
-                   }
-                   if (update.textContent !== null) {
-                     writeArgs.textContent = update.textContent;
-                   }
-                   if (update.markupIndex !== null) {
-                     writeArgs.markup = args[1][update.markupIndex];
-                   }
-                   ReactDefaultPerf._recordWrite(update.parentID, update.type, totalTime, writeArgs);
-                 });
-               } else {
-                 // basic format
-                 var id = args[0];
-                 if (typeof id === 'object') {
-                   id = ReactMount.getID(args[0]);
-                 }
-                 ReactDefaultPerf._recordWrite(id, fnName, totalTime, Array.prototype.slice.call(args, 1));
                }
-               return rv;
-             } else if (moduleName === 'ReactCompositeComponent' && (fnName === 'mountComponent' || fnName === 'updateComponent' || // TODO: receiveComponent()?
-             fnName === '_renderValidatedComponent')) {
        
-               if (this._currentElement.type === ReactMount.TopLevelWrapper) {
-                 return func.apply(this, args);
+               if (hasOwnProp(b, 'toString')) {
+                   a.toString = b.toString;
                }
        
-               var rootNodeID = fnName === 'mountComponent' ? args[0] : this._rootNodeID;
-               var isRender = fnName === '_renderValidatedComponent';
-               var isMount = fnName === 'mountComponent';
-       
-               var mountStack = ReactDefaultPerf._mountStack;
-               var entry = ReactDefaultPerf._allMeasurements[ReactDefaultPerf._allMeasurements.length - 1];
-       
-               if (isRender) {
-                 addValue(entry.counts, rootNodeID, 1);
-               } else if (isMount) {
-                 entry.created[rootNodeID] = true;
-                 mountStack.push(0);
+               if (hasOwnProp(b, 'valueOf')) {
+                   a.valueOf = b.valueOf;
                }
        
-               start = performanceNow();
-               rv = func.apply(this, args);
-               totalTime = performanceNow() - start;
+               return a;
+           }
        
-               if (isRender) {
-                 addValue(entry.render, rootNodeID, totalTime);
-               } else if (isMount) {
-                 var subMountTime = mountStack.pop();
-                 mountStack[mountStack.length - 1] += totalTime;
-                 addValue(entry.exclusive, rootNodeID, totalTime - subMountTime);
-                 addValue(entry.inclusive, rootNodeID, totalTime);
-               } else {
-                 addValue(entry.inclusive, rootNodeID, totalTime);
-               }
+           function create_utc__createUTC (input, format, locale, strict) {
+               return createLocalOrUTC(input, format, locale, strict, true).utc();
+           }
        
-               entry.displayNames[rootNodeID] = {
-                 current: this.getName(),
-                 owner: this._currentElement._owner ? this._currentElement._owner.getName() : '<root>'
+           function defaultParsingFlags() {
+               // We need to deep clone this object.
+               return {
+                   empty           : false,
+                   unusedTokens    : [],
+                   unusedInput     : [],
+                   overflow        : -2,
+                   charsLeftOver   : 0,
+                   nullInput       : false,
+                   invalidMonth    : null,
+                   invalidFormat   : false,
+                   userInvalidated : false,
+                   iso             : false,
+                   parsedDateParts : [],
+                   meridiem        : null
                };
-       
-               return rv;
-             } else {
-               return func.apply(this, args);
-             }
-           };
-         }
-       };
-       
-       module.exports = ReactDefaultPerf;
-
-/***/ },
-/* 145 */
-/***/ 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.
-        *
-        * @providesModule ReactDefaultPerfAnalysis
-        */
-       
-       'use strict';
-       
-       var assign = __webpack_require__(41);
-       
-       // Don't try to save users less than 1.2ms (a number I made up)
-       var DONT_CARE_THRESHOLD = 1.2;
-       var DOM_OPERATION_TYPES = {
-         '_mountImageIntoNode': 'set innerHTML',
-         INSERT_MARKUP: 'set innerHTML',
-         MOVE_EXISTING: 'move',
-         REMOVE_NODE: 'remove',
-         SET_MARKUP: 'set innerHTML',
-         TEXT_CONTENT: 'set textContent',
-         'setValueForProperty': 'update attribute',
-         'setValueForAttribute': 'update attribute',
-         'deleteValueForProperty': 'remove attribute',
-         'dangerouslyReplaceNodeWithMarkupByID': 'replace'
-       };
-       
-       function getTotalTime(measurements) {
-         // TODO: return number of DOM ops? could be misleading.
-         // TODO: measure dropped frames after reconcile?
-         // TODO: log total time of each reconcile and the top-level component
-         // class that triggered it.
-         var totalTime = 0;
-         for (var i = 0; i < measurements.length; i++) {
-           var measurement = measurements[i];
-           totalTime += measurement.totalTime;
-         }
-         return totalTime;
-       }
-       
-       function getDOMSummary(measurements) {
-         var items = [];
-         measurements.forEach(function (measurement) {
-           Object.keys(measurement.writes).forEach(function (id) {
-             measurement.writes[id].forEach(function (write) {
-               items.push({
-                 id: id,
-                 type: DOM_OPERATION_TYPES[write.type] || write.type,
-                 args: write.args
-               });
-             });
-           });
-         });
-         return items;
-       }
-       
-       function getExclusiveSummary(measurements) {
-         var candidates = {};
-         var displayName;
-       
-         for (var i = 0; i < measurements.length; i++) {
-           var measurement = measurements[i];
-           var allIDs = assign({}, measurement.exclusive, measurement.inclusive);
-       
-           for (var id in allIDs) {
-             displayName = measurement.displayNames[id].current;
-       
-             candidates[displayName] = candidates[displayName] || {
-               componentName: displayName,
-               inclusive: 0,
-               exclusive: 0,
-               render: 0,
-               count: 0
-             };
-             if (measurement.render[id]) {
-               candidates[displayName].render += measurement.render[id];
-             }
-             if (measurement.exclusive[id]) {
-               candidates[displayName].exclusive += measurement.exclusive[id];
-             }
-             if (measurement.inclusive[id]) {
-               candidates[displayName].inclusive += measurement.inclusive[id];
-             }
-             if (measurement.counts[id]) {
-               candidates[displayName].count += measurement.counts[id];
-             }
            }
-         }
        
-         // Now make a sorted array with the results.
-         var arr = [];
-         for (displayName in candidates) {
-           if (candidates[displayName].exclusive >= DONT_CARE_THRESHOLD) {
-             arr.push(candidates[displayName]);
+           function getParsingFlags(m) {
+               if (m._pf == null) {
+                   m._pf = defaultParsingFlags();
+               }
+               return m._pf;
            }
-         }
-       
-         arr.sort(function (a, b) {
-           return b.exclusive - a.exclusive;
-         });
-       
-         return arr;
-       }
        
-       function getInclusiveSummary(measurements, onlyClean) {
-         var candidates = {};
-         var inclusiveKey;
+           var some;
+           if (Array.prototype.some) {
+               some = Array.prototype.some;
+           } else {
+               some = function (fun) {
+                   var t = Object(this);
+                   var len = t.length >>> 0;
        
-         for (var i = 0; i < measurements.length; i++) {
-           var measurement = measurements[i];
-           var allIDs = assign({}, measurement.exclusive, measurement.inclusive);
-           var cleanComponents;
+                   for (var i = 0; i < len; i++) {
+                       if (i in t && fun.call(this, t[i], i, t)) {
+                           return true;
+                       }
+                   }
        
-           if (onlyClean) {
-             cleanComponents = getUnchangedComponents(measurement);
+                   return false;
+               };
            }
        
-           for (var id in allIDs) {
-             if (onlyClean && !cleanComponents[id]) {
-               continue;
-             }
-       
-             var displayName = measurement.displayNames[id];
-       
-             // Inclusive time is not useful for many components without knowing where
-             // they are instantiated. So we aggregate inclusive time with both the
-             // owner and current displayName as the key.
-             inclusiveKey = displayName.owner + ' > ' + displayName.current;
+           function valid__isValid(m) {
+               if (m._isValid == null) {
+                   var flags = getParsingFlags(m);
+                   var parsedParts = some.call(flags.parsedDateParts, function (i) {
+                       return i != null;
+                   });
+                   m._isValid = !isNaN(m._d.getTime()) &&
+                       flags.overflow < 0 &&
+                       !flags.empty &&
+                       !flags.invalidMonth &&
+                       !flags.invalidWeekday &&
+                       !flags.nullInput &&
+                       !flags.invalidFormat &&
+                       !flags.userInvalidated &&
+                       (!flags.meridiem || (flags.meridiem && parsedParts));
+       
+                   if (m._strict) {
+                       m._isValid = m._isValid &&
+                           flags.charsLeftOver === 0 &&
+                           flags.unusedTokens.length === 0 &&
+                           flags.bigHour === undefined;
+                   }
+               }
+               return m._isValid;
+           }
        
-             candidates[inclusiveKey] = candidates[inclusiveKey] || {
-               componentName: inclusiveKey,
-               time: 0,
-               count: 0
-             };
+           function valid__createInvalid (flags) {
+               var m = create_utc__createUTC(NaN);
+               if (flags != null) {
+                   extend(getParsingFlags(m), flags);
+               }
+               else {
+                   getParsingFlags(m).userInvalidated = true;
+               }
        
-             if (measurement.inclusive[id]) {
-               candidates[inclusiveKey].time += measurement.inclusive[id];
-             }
-             if (measurement.counts[id]) {
-               candidates[inclusiveKey].count += measurement.counts[id];
-             }
+               return m;
            }
-         }
        
-         // Now make a sorted array with the results.
-         var arr = [];
-         for (inclusiveKey in candidates) {
-           if (candidates[inclusiveKey].time >= DONT_CARE_THRESHOLD) {
-             arr.push(candidates[inclusiveKey]);
+           function isUndefined(input) {
+               return input === void 0;
            }
-         }
        
-         arr.sort(function (a, b) {
-           return b.time - a.time;
-         });
+           // Plugins that add properties should also add the key here (null value),
+           // so we can properly clone ourselves.
+           var momentProperties = utils_hooks__hooks.momentProperties = [];
        
-         return arr;
-       }
+           function copyConfig(to, from) {
+               var i, prop, val;
        
-       function getUnchangedComponents(measurement) {
-         // For a given reconcile, look at which components did not actually
-         // render anything to the DOM and return a mapping of their ID to
-         // the amount of time it took to render the entire subtree.
-         var cleanComponents = {};
-         var dirtyLeafIDs = Object.keys(measurement.writes);
-         var allIDs = assign({}, measurement.exclusive, measurement.inclusive);
-       
-         for (var id in allIDs) {
-           var isDirty = false;
-           // For each component that rendered, see if a component that triggered
-           // a DOM op is in its subtree.
-           for (var i = 0; i < dirtyLeafIDs.length; i++) {
-             if (dirtyLeafIDs[i].indexOf(id) === 0) {
-               isDirty = true;
-               break;
-             }
-           }
-           // check if component newly created
-           if (measurement.created[id]) {
-             isDirty = true;
-           }
-           if (!isDirty && measurement.counts[id] > 0) {
-             cleanComponents[id] = true;
-           }
-         }
-         return cleanComponents;
-       }
+               if (!isUndefined(from._isAMomentObject)) {
+                   to._isAMomentObject = from._isAMomentObject;
+               }
+               if (!isUndefined(from._i)) {
+                   to._i = from._i;
+               }
+               if (!isUndefined(from._f)) {
+                   to._f = from._f;
+               }
+               if (!isUndefined(from._l)) {
+                   to._l = from._l;
+               }
+               if (!isUndefined(from._strict)) {
+                   to._strict = from._strict;
+               }
+               if (!isUndefined(from._tzm)) {
+                   to._tzm = from._tzm;
+               }
+               if (!isUndefined(from._isUTC)) {
+                   to._isUTC = from._isUTC;
+               }
+               if (!isUndefined(from._offset)) {
+                   to._offset = from._offset;
+               }
+               if (!isUndefined(from._pf)) {
+                   to._pf = getParsingFlags(from);
+               }
+               if (!isUndefined(from._locale)) {
+                   to._locale = from._locale;
+               }
        
-       var ReactDefaultPerfAnalysis = {
-         getExclusiveSummary: getExclusiveSummary,
-         getInclusiveSummary: getInclusiveSummary,
-         getDOMSummary: getDOMSummary,
-         getTotalTime: getTotalTime
-       };
+               if (momentProperties.length > 0) {
+                   for (i in momentProperties) {
+                       prop = momentProperties[i];
+                       val = from[prop];
+                       if (!isUndefined(val)) {
+                           to[prop] = val;
+                       }
+                   }
+               }
        
-       module.exports = ReactDefaultPerfAnalysis;
-
-/***/ },
-/* 146 */
-/***/ 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.
-        *
-        * @providesModule performanceNow
-        * @typechecks
-        */
+               return to;
+           }
        
-       'use strict';
+           var updateInProgress = false;
        
-       var performance = __webpack_require__(147);
-       var curPerformance = performance;
+           // Moment prototype object
+           function Moment(config) {
+               copyConfig(this, config);
+               this._d = new Date(config._d != null ? config._d.getTime() : NaN);
+               // Prevent infinite loop in case updateOffset creates new moment
+               // objects.
+               if (updateInProgress === false) {
+                   updateInProgress = true;
+                   utils_hooks__hooks.updateOffset(this);
+                   updateInProgress = false;
+               }
+           }
        
-       /**
-        * Detect if we can use `window.performance.now()` and gracefully fallback to
-        * `Date.now()` if it doesn't exist. We need to support Firefox < 15 for now
-        * because of Facebook's testing infrastructure.
-        */
-       if (!curPerformance || !curPerformance.now) {
-         curPerformance = Date;
-       }
+           function isMoment (obj) {
+               return obj instanceof Moment || (obj != null && obj._isAMomentObject != null);
+           }
        
-       var performanceNow = curPerformance.now.bind(curPerformance);
+           function absFloor (number) {
+               if (number < 0) {
+                   // -0 -> 0
+                   return Math.ceil(number) || 0;
+               } else {
+                   return Math.floor(number);
+               }
+           }
        
-       module.exports = performanceNow;
-
-/***/ },
-/* 147 */
-/***/ 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.
-        *
-        * @providesModule performance
-        * @typechecks
-        */
+           function toInt(argumentForCoercion) {
+               var coercedNumber = +argumentForCoercion,
+                   value = 0;
        
-       'use strict';
+               if (coercedNumber !== 0 && isFinite(coercedNumber)) {
+                   value = absFloor(coercedNumber);
+               }
        
-       var ExecutionEnvironment = __webpack_require__(11);
+               return value;
+           }
        
-       var performance;
+           // compare two arrays, return the number of differences
+           function compareArrays(array1, array2, dontConvert) {
+               var len = Math.min(array1.length, array2.length),
+                   lengthDiff = Math.abs(array1.length - array2.length),
+                   diffs = 0,
+                   i;
+               for (i = 0; i < len; i++) {
+                   if ((dontConvert && array1[i] !== array2[i]) ||
+                       (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) {
+                       diffs++;
+                   }
+               }
+               return diffs + lengthDiff;
+           }
        
-       if (ExecutionEnvironment.canUseDOM) {
-         performance = window.performance || window.msPerformance || window.webkitPerformance;
-       }
+           function warn(msg) {
+               if (utils_hooks__hooks.suppressDeprecationWarnings === false &&
+                       (typeof console !==  'undefined') && console.warn) {
+                   console.warn('Deprecation warning: ' + msg);
+               }
+           }
        
-       module.exports = performance || {};
-
-/***/ },
-/* 148 */
-/***/ function(module, exports) {
-
-       /**
-        * 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.
-        *
-        * @providesModule ReactVersion
-        */
+           function deprecate(msg, fn) {
+               var firstTime = true;
        
-       'use strict';
+               return extend(function () {
+                   if (utils_hooks__hooks.deprecationHandler != null) {
+                       utils_hooks__hooks.deprecationHandler(null, msg);
+                   }
+                   if (firstTime) {
+                       warn(msg + '\nArguments: ' + Array.prototype.slice.call(arguments).join(', ') + '\n' + (new Error()).stack);
+                       firstTime = false;
+                   }
+                   return fn.apply(this, arguments);
+               }, fn);
+           }
        
-       module.exports = '0.14.3';
-
-/***/ },
-/* 149 */
-/***/ 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.
-        *
-       * @providesModule renderSubtreeIntoContainer
-       */
+           var deprecations = {};
        
-       'use strict';
+           function deprecateSimple(name, msg) {
+               if (utils_hooks__hooks.deprecationHandler != null) {
+                   utils_hooks__hooks.deprecationHandler(name, msg);
+               }
+               if (!deprecations[name]) {
+                   warn(msg);
+                   deprecations[name] = true;
+               }
+           }
        
-       var ReactMount = __webpack_require__(30);
+           utils_hooks__hooks.suppressDeprecationWarnings = false;
+           utils_hooks__hooks.deprecationHandler = null;
        
-       module.exports = ReactMount.renderSubtreeIntoContainer;
-
-/***/ },
-/* 150 */
-/***/ 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.
-        *
-        * @providesModule ReactDOMServer
-        */
+           function isFunction(input) {
+               return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';
+           }
        
-       'use strict';
+           function locale_set__set (config) {
+               var prop, i;
+               for (i in config) {
+                   prop = config[i];
+                   if (isFunction(prop)) {
+                       this[i] = prop;
+                   } else {
+                       this['_' + i] = prop;
+                   }
+               }
+               this._config = config;
+               // Lenient ordinal parsing accepts just a number in addition to
+               // number + (possibly) stuff coming from _ordinalParseLenient.
+               this._ordinalParseLenient = new RegExp(this._ordinalParse.source + '|' + (/\d{1,2}/).source);
+           }
+       
+           function mergeConfigs(parentConfig, childConfig) {
+               var res = extend({}, parentConfig), prop;
+               for (prop in childConfig) {
+                   if (hasOwnProp(childConfig, prop)) {
+                       if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {
+                           res[prop] = {};
+                           extend(res[prop], parentConfig[prop]);
+                           extend(res[prop], childConfig[prop]);
+                       } else if (childConfig[prop] != null) {
+                           res[prop] = childConfig[prop];
+                       } else {
+                           delete res[prop];
+                       }
+                   }
+               }
+               for (prop in parentConfig) {
+                   if (hasOwnProp(parentConfig, prop) &&
+                           !hasOwnProp(childConfig, prop) &&
+                           isObject(parentConfig[prop])) {
+                       // make sure changes to properties don't modify parent config
+                       res[prop] = extend({}, res[prop]);
+                   }
+               }
+               return res;
+           }
        
-       var ReactDefaultInjection = __webpack_require__(73);
-       var ReactServerRendering = __webpack_require__(151);
-       var ReactVersion = __webpack_require__(148);
+           function Locale(config) {
+               if (config != null) {
+                   this.set(config);
+               }
+           }
        
-       ReactDefaultInjection.inject();
+           var keys;
        
-       var ReactDOMServer = {
-         renderToString: ReactServerRendering.renderToString,
-         renderToStaticMarkup: ReactServerRendering.renderToStaticMarkup,
-         version: ReactVersion
-       };
+           if (Object.keys) {
+               keys = Object.keys;
+           } else {
+               keys = function (obj) {
+                   var i, res = [];
+                   for (i in obj) {
+                       if (hasOwnProp(obj, i)) {
+                           res.push(i);
+                       }
+                   }
+                   return res;
+               };
+           }
        
-       module.exports = ReactDOMServer;
-
-/***/ },
-/* 151 */
-/***/ function(module, exports, __webpack_require__) {
-
-       /* WEBPACK VAR INJECTION */(function(process) {/**
-        * 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.
-        *
-        * @typechecks static-only
-        * @providesModule ReactServerRendering
-        */
-       'use strict';
+           var defaultCalendar = {
+               sameDay : '[Today at] LT',
+               nextDay : '[Tomorrow at] LT',
+               nextWeek : 'dddd [at] LT',
+               lastDay : '[Yesterday at] LT',
+               lastWeek : '[Last] dddd [at] LT',
+               sameElse : 'L'
+           };
+       
+           function locale_calendar__calendar (key, mom, now) {
+               var output = this._calendar[key] || this._calendar['sameElse'];
+               return isFunction(output) ? output.call(mom, now) : output;
+           }
        
-       var ReactDefaultBatchingStrategy = __webpack_require__(94);
-       var ReactElement = __webpack_require__(44);
-       var ReactInstanceHandles = __webpack_require__(47);
-       var ReactMarkupChecksum = __webpack_require__(50);
-       var ReactServerBatchingStrategy = __webpack_require__(152);
-       var ReactServerRenderingTransaction = __webpack_require__(153);
-       var ReactUpdates = __webpack_require__(56);
+           var defaultLongDateFormat = {
+               LTS  : 'h:mm:ss A',
+               LT   : 'h:mm A',
+               L    : 'MM/DD/YYYY',
+               LL   : 'MMMM D, YYYY',
+               LLL  : 'MMMM D, YYYY h:mm A',
+               LLLL : 'dddd, MMMM D, YYYY h:mm A'
+           };
        
-       var emptyObject = __webpack_require__(60);
-       var instantiateReactComponent = __webpack_require__(64);
-       var invariant = __webpack_require__(15);
+           function longDateFormat (key) {
+               var format = this._longDateFormat[key],
+                   formatUpper = this._longDateFormat[key.toUpperCase()];
        
-       /**
-        * @param {ReactElement} element
-        * @return {string} the HTML markup
-        */
-       function renderToString(element) {
-         !ReactElement.isValidElement(element) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'renderToString(): You must pass a valid ReactElement.') : invariant(false) : undefined;
+               if (format || !formatUpper) {
+                   return format;
+               }
        
-         var transaction;
-         try {
-           ReactUpdates.injection.injectBatchingStrategy(ReactServerBatchingStrategy);
+               this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) {
+                   return val.slice(1);
+               });
        
-           var id = ReactInstanceHandles.createReactRootID();
-           transaction = ReactServerRenderingTransaction.getPooled(false);
+               return this._longDateFormat[key];
+           }
        
-           return transaction.perform(function () {
-             var componentInstance = instantiateReactComponent(element, null);
-             var markup = componentInstance.mountComponent(id, transaction, emptyObject);
-             return ReactMarkupChecksum.addChecksumToMarkup(markup);
-           }, null);
-         } finally {
-           ReactServerRenderingTransaction.release(transaction);
-           // Revert to the DOM batching strategy since these two renderers
-           // currently share these stateful modules.
-           ReactUpdates.injection.injectBatchingStrategy(ReactDefaultBatchingStrategy);
-         }
-       }
+           var defaultInvalidDate = 'Invalid date';
        
-       /**
-        * @param {ReactElement} element
-        * @return {string} the HTML markup, without the extra React ID and checksum
-        * (for generating static pages)
-        */
-       function renderToStaticMarkup(element) {
-         !ReactElement.isValidElement(element) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'renderToStaticMarkup(): You must pass a valid ReactElement.') : invariant(false) : undefined;
+           function invalidDate () {
+               return this._invalidDate;
+           }
        
-         var transaction;
-         try {
-           ReactUpdates.injection.injectBatchingStrategy(ReactServerBatchingStrategy);
+           var defaultOrdinal = '%d';
+           var defaultOrdinalParse = /\d{1,2}/;
        
-           var id = ReactInstanceHandles.createReactRootID();
-           transaction = ReactServerRenderingTransaction.getPooled(true);
+           function ordinal (number) {
+               return this._ordinal.replace('%d', number);
+           }
        
-           return transaction.perform(function () {
-             var componentInstance = instantiateReactComponent(element, null);
-             return componentInstance.mountComponent(id, transaction, emptyObject);
-           }, null);
-         } finally {
-           ReactServerRenderingTransaction.release(transaction);
-           // Revert to the DOM batching strategy since these two renderers
-           // currently share these stateful modules.
-           ReactUpdates.injection.injectBatchingStrategy(ReactDefaultBatchingStrategy);
-         }
-       }
+           var defaultRelativeTime = {
+               future : 'in %s',
+               past   : '%s ago',
+               s  : 'a few seconds',
+               m  : 'a minute',
+               mm : '%d minutes',
+               h  : 'an hour',
+               hh : '%d hours',
+               d  : 'a day',
+               dd : '%d days',
+               M  : 'a month',
+               MM : '%d months',
+               y  : 'a year',
+               yy : '%d years'
+           };
        
-       module.exports = {
-         renderToString: renderToString,
-         renderToStaticMarkup: renderToStaticMarkup
-       };
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
-
-/***/ },
-/* 152 */
-/***/ function(module, exports) {
-
-       /**
-        * Copyright 2014-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.
-        *
-        * @providesModule ReactServerBatchingStrategy
-        * @typechecks
-        */
+           function relative__relativeTime (number, withoutSuffix, string, isFuture) {
+               var output = this._relativeTime[string];
+               return (isFunction(output)) ?
+                   output(number, withoutSuffix, string, isFuture) :
+                   output.replace(/%d/i, number);
+           }
        
-       'use strict';
+           function pastFuture (diff, output) {
+               var format = this._relativeTime[diff > 0 ? 'future' : 'past'];
+               return isFunction(format) ? format(output) : format.replace(/%s/i, output);
+           }
        
-       var ReactServerBatchingStrategy = {
-         isBatchingUpdates: false,
-         batchedUpdates: function (callback) {
-           // Don't do anything here. During the server rendering we don't want to
-           // schedule any updates. We will simply ignore them.
-         }
-       };
+           var aliases = {};
        
-       module.exports = ReactServerBatchingStrategy;
-
-/***/ },
-/* 153 */
-/***/ function(module, exports, __webpack_require__) {
-
-       /**
-        * Copyright 2014-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.
-        *
-        * @providesModule ReactServerRenderingTransaction
-        * @typechecks
-        */
+           function addUnitAlias (unit, shorthand) {
+               var lowerCase = unit.toLowerCase();
+               aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;
+           }
        
-       'use strict';
+           function normalizeUnits(units) {
+               return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined;
+           }
+       
+           function normalizeObjectUnits(inputObject) {
+               var normalizedInput = {},
+                   normalizedProp,
+                   prop;
+       
+               for (prop in inputObject) {
+                   if (hasOwnProp(inputObject, prop)) {
+                       normalizedProp = normalizeUnits(prop);
+                       if (normalizedProp) {
+                           normalizedInput[normalizedProp] = inputObject[prop];
+                       }
+                   }
+               }
        
-       var PooledClass = __webpack_require__(58);
-       var CallbackQueue = __webpack_require__(57);
-       var Transaction = __webpack_require__(59);
+               return normalizedInput;
+           }
        
-       var assign = __webpack_require__(41);
-       var emptyFunction = __webpack_require__(17);
+           var priorities = {};
        
-       /**
-        * Provides a `CallbackQueue` queue for collecting `onDOMReady` callbacks
-        * during the performing of the transaction.
-        */
-       var ON_DOM_READY_QUEUEING = {
-         /**
-          * Initializes the internal `onDOMReady` queue.
-          */
-         initialize: function () {
-           this.reactMountReady.reset();
-         },
+           function addUnitPriority(unit, priority) {
+               priorities[unit] = priority;
+           }
        
-         close: emptyFunction
-       };
+           function getPrioritizedUnits(unitsObj) {
+               var units = [];
+               for (var u in unitsObj) {
+                   units.push({unit: u, priority: priorities[u]});
+               }
+               units.sort(function (a, b) {
+                   return a.priority - b.priority;
+               });
+               return units;
+           }
        
-       /**
-        * Executed within the scope of the `Transaction` instance. Consider these as
-        * being member methods, but with an implied ordering while being isolated from
-        * each other.
-        */
-       var TRANSACTION_WRAPPERS = [ON_DOM_READY_QUEUEING];
+           function makeGetSet (unit, keepTime) {
+               return function (value) {
+                   if (value != null) {
+                       get_set__set(this, unit, value);
+                       utils_hooks__hooks.updateOffset(this, keepTime);
+                       return this;
+                   } else {
+                       return get_set__get(this, unit);
+                   }
+               };
+           }
        
-       /**
-        * @class ReactServerRenderingTransaction
-        * @param {boolean} renderToStaticMarkup
-        */
-       function ReactServerRenderingTransaction(renderToStaticMarkup) {
-         this.reinitializeTransaction();
-         this.renderToStaticMarkup = renderToStaticMarkup;
-         this.reactMountReady = CallbackQueue.getPooled(null);
-         this.useCreateElement = false;
-       }
+           function get_set__get (mom, unit) {
+               return mom.isValid() ?
+                   mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN;
+           }
        
-       var Mixin = {
-         /**
-          * @see Transaction
-          * @abstract
-          * @final
-          * @return {array} Empty list of operation wrap procedures.
-          */
-         getTransactionWrappers: function () {
-           return TRANSACTION_WRAPPERS;
-         },
+           function get_set__set (mom, unit, value) {
+               if (mom.isValid()) {
+                   mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);
+               }
+           }
        
-         /**
-          * @return {object} The queue to collect `onDOMReady` callbacks with.
-          */
-         getReactMountReady: function () {
-           return this.reactMountReady;
-         },
+           // MOMENTS
+       
+           function stringGet (units) {
+               units = normalizeUnits(units);
+               if (isFunction(this[units])) {
+                   return this[units]();
+               }
+               return this;
+           }
+       
+       
+           function stringSet (units, value) {
+               if (typeof units === 'object') {
+                   units = normalizeObjectUnits(units);
+                   var prioritized = getPrioritizedUnits(units);
+                   for (var i = 0; i < prioritized.length; i++) {
+                       this[prioritized[i].unit](units[prioritized[i].unit]);
+                   }
+               } else {
+                   units = normalizeUnits(units);
+                   if (isFunction(this[units])) {
+                       return this[units](value);
+                   }
+               }
+               return this;
+           }
        
-         /**
-          * `PooledClass` looks for this, and will invoke this before allowing this
-          * instance to be reused.
-          */
-         destructor: function () {
-           CallbackQueue.release(this.reactMountReady);
-           this.reactMountReady = null;
-         }
-       };
+           function zeroFill(number, targetLength, forceSign) {
+               var absNumber = '' + Math.abs(number),
+                   zerosToFill = targetLength - absNumber.length,
+                   sign = number >= 0;
+               return (sign ? (forceSign ? '+' : '') : '-') +
+                   Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;
+           }
        
-       assign(ReactServerRenderingTransaction.prototype, Transaction.Mixin, Mixin);
+           var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g;
        
-       PooledClass.addPoolingTo(ReactServerRenderingTransaction);
+           var localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g;
        
-       module.exports = ReactServerRenderingTransaction;
-
-/***/ },
-/* 154 */
-/***/ function(module, exports, __webpack_require__) {
-
-       /* WEBPACK VAR INJECTION */(function(process) {/**
-        * 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.
-        *
-        * @providesModule ReactIsomorphic
-        */
+           var formatFunctions = {};
        
-       'use strict';
+           var formatTokenFunctions = {};
        
-       var ReactChildren = __webpack_require__(112);
-       var ReactComponent = __webpack_require__(125);
-       var ReactClass = __webpack_require__(124);
-       var ReactDOMFactories = __webpack_require__(155);
-       var ReactElement = __webpack_require__(44);
-       var ReactElementValidator = __webpack_require__(156);
-       var ReactPropTypes = __webpack_require__(109);
-       var ReactVersion = __webpack_require__(148);
+           // token:    'M'
+           // padded:   ['MM', 2]
+           // ordinal:  'Mo'
+           // callback: function () { this.month() + 1 }
+           function addFormatToken (token, padded, ordinal, callback) {
+               var func = callback;
+               if (typeof callback === 'string') {
+                   func = function () {
+                       return this[callback]();
+                   };
+               }
+               if (token) {
+                   formatTokenFunctions[token] = func;
+               }
+               if (padded) {
+                   formatTokenFunctions[padded[0]] = function () {
+                       return zeroFill(func.apply(this, arguments), padded[1], padded[2]);
+                   };
+               }
+               if (ordinal) {
+                   formatTokenFunctions[ordinal] = function () {
+                       return this.localeData().ordinal(func.apply(this, arguments), token);
+                   };
+               }
+           }
        
-       var assign = __webpack_require__(41);
-       var onlyChild = __webpack_require__(158);
+           function removeFormattingTokens(input) {
+               if (input.match(/\[[\s\S]/)) {
+                   return input.replace(/^\[|\]$/g, '');
+               }
+               return input.replace(/\\/g, '');
+           }
        
-       var createElement = ReactElement.createElement;
-       var createFactory = ReactElement.createFactory;
-       var cloneElement = ReactElement.cloneElement;
+           function makeFormatFunction(format) {
+               var array = format.match(formattingTokens), i, length;
        
-       if (process.env.NODE_ENV !== 'production') {
-         createElement = ReactElementValidator.createElement;
-         createFactory = ReactElementValidator.createFactory;
-         cloneElement = ReactElementValidator.cloneElement;
-       }
+               for (i = 0, length = array.length; i < length; i++) {
+                   if (formatTokenFunctions[array[i]]) {
+                       array[i] = formatTokenFunctions[array[i]];
+                   } else {
+                       array[i] = removeFormattingTokens(array[i]);
+                   }
+               }
        
-       var React = {
+               return function (mom) {
+                   var output = '', i;
+                   for (i = 0; i < length; i++) {
+                       output += array[i] instanceof Function ? array[i].call(mom, format) : array[i];
+                   }
+                   return output;
+               };
+           }
        
-         // Modern
+           // format date using native date object
+           function formatMoment(m, format) {
+               if (!m.isValid()) {
+                   return m.localeData().invalidDate();
+               }
        
-         Children: {
-           map: ReactChildren.map,
-           forEach: ReactChildren.forEach,
-           count: ReactChildren.count,
-           toArray: ReactChildren.toArray,
-           only: onlyChild
-         },
+               format = expandFormat(format, m.localeData());
+               formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format);
        
-         Component: ReactComponent,
+               return formatFunctions[format](m);
+           }
        
-         createElement: createElement,
-         cloneElement: cloneElement,
-         isValidElement: ReactElement.isValidElement,
+           function expandFormat(format, locale) {
+               var i = 5;
        
-         // Classic
+               function replaceLongDateFormatTokens(input) {
+                   return locale.longDateFormat(input) || input;
+               }
        
-         PropTypes: ReactPropTypes,
-         createClass: ReactClass.createClass,
-         createFactory: createFactory,
-         createMixin: function (mixin) {
-           // Currently a noop. Will be used to validate and trace mixins.
-           return mixin;
-         },
+               localFormattingTokens.lastIndex = 0;
+               while (i >= 0 && localFormattingTokens.test(format)) {
+                   format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);
+                   localFormattingTokens.lastIndex = 0;
+                   i -= 1;
+               }
        
-         // This looks DOM specific but these are actually isomorphic helpers
-         // since they are just generating DOM strings.
-         DOM: ReactDOMFactories,
+               return format;
+           }
        
-         version: ReactVersion,
+           var match1         = /\d/;            //       0 - 9
+           var match2         = /\d\d/;          //      00 - 99
+           var match3         = /\d{3}/;         //     000 - 999
+           var match4         = /\d{4}/;         //    0000 - 9999
+           var match6         = /[+-]?\d{6}/;    // -999999 - 999999
+           var match1to2      = /\d\d?/;         //       0 - 99
+           var match3to4      = /\d\d\d\d?/;     //     999 - 9999
+           var match5to6      = /\d\d\d\d\d\d?/; //   99999 - 999999
+           var match1to3      = /\d{1,3}/;       //       0 - 999
+           var match1to4      = /\d{1,4}/;       //       0 - 9999
+           var match1to6      = /[+-]?\d{1,6}/;  // -999999 - 999999
        
-         // Hook for JSX spread, don't use this for anything else.
-         __spread: assign
-       };
+           var matchUnsigned  = /\d+/;           //       0 - inf
+           var matchSigned    = /[+-]?\d+/;      //    -inf - inf
        
-       module.exports = React;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
-
-/***/ },
-/* 155 */
-/***/ function(module, exports, __webpack_require__) {
-
-       /* WEBPACK VAR INJECTION */(function(process) {/**
-        * 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.
-        *
-        * @providesModule ReactDOMFactories
-        * @typechecks static-only
-        */
+           var matchOffset    = /Z|[+-]\d\d:?\d\d/gi; // +00:00 -00:00 +0000 -0000 or Z
+           var matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z
        
-       'use strict';
+           var matchTimestamp = /[+-]?\d+(\.\d{1,3})?/; // 123456789 123456789.123
        
-       var ReactElement = __webpack_require__(44);
-       var ReactElementValidator = __webpack_require__(156);
+           // any word (or two) characters or numbers including two/three word month in arabic.
+           // includes scottish gaelic two word and hyphenated months
+           var matchWord = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i;
        
-       var mapObject = __webpack_require__(157);
        
-       /**
-        * Create a factory that creates HTML tag elements.
-        *
-        * @param {string} tag Tag name (e.g. `div`).
-        * @private
-        */
-       function createDOMFactory(tag) {
-         if (process.env.NODE_ENV !== 'production') {
-           return ReactElementValidator.createFactory(tag);
-         }
-         return ReactElement.createFactory(tag);
-       }
+           var regexes = {};
        
-       /**
-        * Creates a mapping from supported HTML tags to `ReactDOMComponent` classes.
-        * This is also accessible via `React.DOM`.
-        *
-        * @public
-        */
-       var ReactDOMFactories = mapObject({
-         a: 'a',
-         abbr: 'abbr',
-         address: 'address',
-         area: 'area',
-         article: 'article',
-         aside: 'aside',
-         audio: 'audio',
-         b: 'b',
-         base: 'base',
-         bdi: 'bdi',
-         bdo: 'bdo',
-         big: 'big',
-         blockquote: 'blockquote',
-         body: 'body',
-         br: 'br',
-         button: 'button',
-         canvas: 'canvas',
-         caption: 'caption',
-         cite: 'cite',
-         code: 'code',
-         col: 'col',
-         colgroup: 'colgroup',
-         data: 'data',
-         datalist: 'datalist',
-         dd: 'dd',
-         del: 'del',
-         details: 'details',
-         dfn: 'dfn',
-         dialog: 'dialog',
-         div: 'div',
-         dl: 'dl',
-         dt: 'dt',
-         em: 'em',
-         embed: 'embed',
-         fieldset: 'fieldset',
-         figcaption: 'figcaption',
-         figure: 'figure',
-         footer: 'footer',
-         form: 'form',
-         h1: 'h1',
-         h2: 'h2',
-         h3: 'h3',
-         h4: 'h4',
-         h5: 'h5',
-         h6: 'h6',
-         head: 'head',
-         header: 'header',
-         hgroup: 'hgroup',
-         hr: 'hr',
-         html: 'html',
-         i: 'i',
-         iframe: 'iframe',
-         img: 'img',
-         input: 'input',
-         ins: 'ins',
-         kbd: 'kbd',
-         keygen: 'keygen',
-         label: 'label',
-         legend: 'legend',
-         li: 'li',
-         link: 'link',
-         main: 'main',
-         map: 'map',
-         mark: 'mark',
-         menu: 'menu',
-         menuitem: 'menuitem',
-         meta: 'meta',
-         meter: 'meter',
-         nav: 'nav',
-         noscript: 'noscript',
-         object: 'object',
-         ol: 'ol',
-         optgroup: 'optgroup',
-         option: 'option',
-         output: 'output',
-         p: 'p',
-         param: 'param',
-         picture: 'picture',
-         pre: 'pre',
-         progress: 'progress',
-         q: 'q',
-         rp: 'rp',
-         rt: 'rt',
-         ruby: 'ruby',
-         s: 's',
-         samp: 'samp',
-         script: 'script',
-         section: 'section',
-         select: 'select',
-         small: 'small',
-         source: 'source',
-         span: 'span',
-         strong: 'strong',
-         style: 'style',
-         sub: 'sub',
-         summary: 'summary',
-         sup: 'sup',
-         table: 'table',
-         tbody: 'tbody',
-         td: 'td',
-         textarea: 'textarea',
-         tfoot: 'tfoot',
-         th: 'th',
-         thead: 'thead',
-         time: 'time',
-         title: 'title',
-         tr: 'tr',
-         track: 'track',
-         u: 'u',
-         ul: 'ul',
-         'var': 'var',
-         video: 'video',
-         wbr: 'wbr',
+           function addRegexToken (token, regex, strictRegex) {
+               regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) {
+                   return (isStrict && strictRegex) ? strictRegex : regex;
+               };
+           }
        
-         // SVG
-         circle: 'circle',
-         clipPath: 'clipPath',
-         defs: 'defs',
-         ellipse: 'ellipse',
-         g: 'g',
-         image: 'image',
-         line: 'line',
-         linearGradient: 'linearGradient',
-         mask: 'mask',
-         path: 'path',
-         pattern: 'pattern',
-         polygon: 'polygon',
-         polyline: 'polyline',
-         radialGradient: 'radialGradient',
-         rect: 'rect',
-         stop: 'stop',
-         svg: 'svg',
-         text: 'text',
-         tspan: 'tspan'
+           function getParseRegexForToken (token, config) {
+               if (!hasOwnProp(regexes, token)) {
+                   return new RegExp(unescapeFormat(token));
+               }
+       
+               return regexes[token](config._strict, config._locale);
+           }
+       
+           // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript
+           function unescapeFormat(s) {
+               return regexEscape(s.replace('\\', '').replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (matched, p1, p2, p3, p4) {
+                   return p1 || p2 || p3 || p4;
+               }));
+           }
        
-       }, createDOMFactory);
+           function regexEscape(s) {
+               return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
+           }
        
-       module.exports = ReactDOMFactories;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
-
-/***/ },
-/* 156 */
-/***/ function(module, exports, __webpack_require__) {
-
-       /* WEBPACK VAR INJECTION */(function(process) {/**
-        * Copyright 2014-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.
-        *
-        * @providesModule ReactElementValidator
-        */
+           var tokens = {};
        
-       /**
-        * ReactElementValidator provides a wrapper around a element factory
-        * which validates the props passed to the element. This is intended to be
-        * used only in DEV and could be replaced by a static type checker for languages
-        * that support it.
-        */
+           function addParseToken (token, callback) {
+               var i, func = callback;
+               if (typeof token === 'string') {
+                   token = [token];
+               }
+               if (typeof callback === 'number') {
+                   func = function (input, array) {
+                       array[callback] = toInt(input);
+                   };
+               }
+               for (i = 0; i < token.length; i++) {
+                   tokens[token[i]] = func;
+               }
+           }
        
-       'use strict';
+           function addWeekParseToken (token, callback) {
+               addParseToken(token, function (input, array, config, token) {
+                   config._w = config._w || {};
+                   callback(input, config._w, config, token);
+               });
+           }
        
-       var ReactElement = __webpack_require__(44);
-       var ReactPropTypeLocations = __webpack_require__(67);
-       var ReactPropTypeLocationNames = __webpack_require__(68);
-       var ReactCurrentOwner = __webpack_require__(7);
+           function addTimeToArrayFromToken(token, input, config) {
+               if (input != null && hasOwnProp(tokens, token)) {
+                   tokens[token](input, config._a, config, token);
+               }
+           }
        
-       var canDefineProperty = __webpack_require__(45);
-       var getIteratorFn = __webpack_require__(110);
-       var invariant = __webpack_require__(15);
-       var warning = __webpack_require__(27);
+           var YEAR = 0;
+           var MONTH = 1;
+           var DATE = 2;
+           var HOUR = 3;
+           var MINUTE = 4;
+           var SECOND = 5;
+           var MILLISECOND = 6;
+           var WEEK = 7;
+           var WEEKDAY = 8;
        
-       function getDeclarationErrorAddendum() {
-         if (ReactCurrentOwner.current) {
-           var name = ReactCurrentOwner.current.getName();
-           if (name) {
-             return ' Check the render method of `' + name + '`.';
+           var indexOf;
+       
+           if (Array.prototype.indexOf) {
+               indexOf = Array.prototype.indexOf;
+           } else {
+               indexOf = function (o) {
+                   // I know
+                   var i;
+                   for (i = 0; i < this.length; ++i) {
+                       if (this[i] === o) {
+                           return i;
+                       }
+                   }
+                   return -1;
+               };
            }
-         }
-         return '';
-       }
        
-       /**
-        * Warn if there's no key explicitly set on dynamic arrays of children or
-        * object keys are not valid. This allows us to keep track of children between
-        * updates.
-        */
-       var ownerHasKeyUseWarning = {};
+           function daysInMonth(year, month) {
+               return new Date(Date.UTC(year, month + 1, 0)).getUTCDate();
+           }
        
-       var loggedTypeFailures = {};
+           // FORMATTING
        
-       /**
-        * Warn if the element doesn't have an explicit key assigned to it.
-        * This element is in an array. The array could grow and shrink or be
-        * reordered. All children that haven't already been validated are required to
-        * have a "key" property assigned to it.
-        *
-        * @internal
-        * @param {ReactElement} element Element that requires a key.
-        * @param {*} parentType element's parent's type.
-        */
-       function validateExplicitKey(element, parentType) {
-         if (!element._store || element._store.validated || element.key != null) {
-           return;
-         }
-         element._store.validated = true;
+           addFormatToken('M', ['MM', 2], 'Mo', function () {
+               return this.month() + 1;
+           });
        
-         var addenda = getAddendaForKeyUse('uniqueKey', element, parentType);
-         if (addenda === null) {
-           // we already showed the warning
-           return;
-         }
-         process.env.NODE_ENV !== 'production' ? warning(false, 'Each child in an array or iterator should have a unique "key" prop.' + '%s%s%s', addenda.parentOrOwner || '', addenda.childOwner || '', addenda.url || '') : undefined;
-       }
+           addFormatToken('MMM', 0, 0, function (format) {
+               return this.localeData().monthsShort(this, format);
+           });
        
-       /**
-        * Shared warning and monitoring code for the key warnings.
-        *
-        * @internal
-        * @param {string} messageType A key used for de-duping warnings.
-        * @param {ReactElement} element Component that requires a key.
-        * @param {*} parentType element's parent's type.
-        * @returns {?object} A set of addenda to use in the warning message, or null
-        * if the warning has already been shown before (and shouldn't be shown again).
-        */
-       function getAddendaForKeyUse(messageType, element, parentType) {
-         var addendum = getDeclarationErrorAddendum();
-         if (!addendum) {
-           var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;
-           if (parentName) {
-             addendum = ' Check the top-level render call using <' + parentName + '>.';
-           }
-         }
+           addFormatToken('MMMM', 0, 0, function (format) {
+               return this.localeData().months(this, format);
+           });
        
-         var memoizer = ownerHasKeyUseWarning[messageType] || (ownerHasKeyUseWarning[messageType] = {});
-         if (memoizer[addendum]) {
-           return null;
-         }
-         memoizer[addendum] = true;
+           // ALIASES
        
-         var addenda = {
-           parentOrOwner: addendum,
-           url: ' See https://fb.me/react-warning-keys for more information.',
-           childOwner: null
-         };
+           addUnitAlias('month', 'M');
        
-         // Usually the current owner is the offender, but if it accepts children as a
-         // property, it may be the creator of the child that's responsible for
-         // assigning it a key.
-         if (element && element._owner && element._owner !== ReactCurrentOwner.current) {
-           // Give the component that originally created this child.
-           addenda.childOwner = ' It was passed a child from ' + element._owner.getName() + '.';
-         }
+           // PRIORITY
        
-         return addenda;
-       }
+           addUnitPriority('month', 8);
        
-       /**
-        * Ensure that every element either is passed in a static location, in an
-        * array with an explicit keys property defined, or in an object literal
-        * with valid key property.
-        *
-        * @internal
-        * @param {ReactNode} node Statically passed child of any type.
-        * @param {*} parentType node's parent's type.
-        */
-       function validateChildKeys(node, parentType) {
-         if (typeof node !== 'object') {
-           return;
-         }
-         if (Array.isArray(node)) {
-           for (var i = 0; i < node.length; i++) {
-             var child = node[i];
-             if (ReactElement.isValidElement(child)) {
-               validateExplicitKey(child, parentType);
-             }
+           // PARSING
+       
+           addRegexToken('M',    match1to2);
+           addRegexToken('MM',   match1to2, match2);
+           addRegexToken('MMM',  function (isStrict, locale) {
+               return locale.monthsShortRegex(isStrict);
+           });
+           addRegexToken('MMMM', function (isStrict, locale) {
+               return locale.monthsRegex(isStrict);
+           });
+       
+           addParseToken(['M', 'MM'], function (input, array) {
+               array[MONTH] = toInt(input) - 1;
+           });
+       
+           addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {
+               var month = config._locale.monthsParse(input, token, config._strict);
+               // if we didn't find a month name, mark the date as invalid.
+               if (month != null) {
+                   array[MONTH] = month;
+               } else {
+                   getParsingFlags(config).invalidMonth = input;
+               }
+           });
+       
+           // LOCALES
+       
+           var MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/;
+           var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_');
+           function localeMonths (m, format) {
+               return isArray(this._months) ? this._months[m.month()] :
+                   this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()];
            }
-         } else if (ReactElement.isValidElement(node)) {
-           // This element was passed in a valid location.
-           if (node._store) {
-             node._store.validated = true;
+       
+           var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_');
+           function localeMonthsShort (m, format) {
+               return isArray(this._monthsShort) ? this._monthsShort[m.month()] :
+                   this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()];
            }
-         } else if (node) {
-           var iteratorFn = getIteratorFn(node);
-           // Entry iterators provide implicit keys.
-           if (iteratorFn) {
-             if (iteratorFn !== node.entries) {
-               var iterator = iteratorFn.call(node);
-               var step;
-               while (!(step = iterator.next()).done) {
-                 if (ReactElement.isValidElement(step.value)) {
-                   validateExplicitKey(step.value, parentType);
-                 }
+       
+           function units_month__handleStrictParse(monthName, format, strict) {
+               var i, ii, mom, llc = monthName.toLocaleLowerCase();
+               if (!this._monthsParse) {
+                   // this is not used
+                   this._monthsParse = [];
+                   this._longMonthsParse = [];
+                   this._shortMonthsParse = [];
+                   for (i = 0; i < 12; ++i) {
+                       mom = create_utc__createUTC([2000, i]);
+                       this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase();
+                       this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();
+                   }
+               }
+       
+               if (strict) {
+                   if (format === 'MMM') {
+                       ii = indexOf.call(this._shortMonthsParse, llc);
+                       return ii !== -1 ? ii : null;
+                   } else {
+                       ii = indexOf.call(this._longMonthsParse, llc);
+                       return ii !== -1 ? ii : null;
+                   }
+               } else {
+                   if (format === 'MMM') {
+                       ii = indexOf.call(this._shortMonthsParse, llc);
+                       if (ii !== -1) {
+                           return ii;
+                       }
+                       ii = indexOf.call(this._longMonthsParse, llc);
+                       return ii !== -1 ? ii : null;
+                   } else {
+                       ii = indexOf.call(this._longMonthsParse, llc);
+                       if (ii !== -1) {
+                           return ii;
+                       }
+                       ii = indexOf.call(this._shortMonthsParse, llc);
+                       return ii !== -1 ? ii : null;
+                   }
                }
-             }
            }
-         }
-       }
        
-       /**
-        * Assert that the props are valid
-        *
-        * @param {string} componentName Name of the component for error messages.
-        * @param {object} propTypes Map of prop name to a ReactPropType
-        * @param {object} props
-        * @param {string} location e.g. "prop", "context", "child context"
-        * @private
-        */
-       function checkPropTypes(componentName, propTypes, props, location) {
-         for (var propName in propTypes) {
-           if (propTypes.hasOwnProperty(propName)) {
-             var error;
-             // Prop type validation may throw. In case they do, we don't want to
-             // fail the render phase where it didn't fail before. So we log it.
-             // After these have been cleaned up, we'll let them throw.
-             try {
-               // This is intentionally an invariant that gets caught. It's the same
-               // behavior as without this statement except with a better message.
-               !(typeof propTypes[propName] === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s: %s type `%s` is invalid; it must be a function, usually from ' + 'React.PropTypes.', componentName || 'React class', ReactPropTypeLocationNames[location], propName) : invariant(false) : undefined;
-               error = propTypes[propName](props, propName, componentName, location);
-             } catch (ex) {
-               error = ex;
-             }
-             process.env.NODE_ENV !== 'production' ? warning(!error || error instanceof Error, '%s: type specification of %s `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', ReactPropTypeLocationNames[location], propName, typeof error) : undefined;
-             if (error instanceof Error && !(error.message in loggedTypeFailures)) {
-               // Only monitor this failure once because there tends to be a lot of the
-               // same error.
-               loggedTypeFailures[error.message] = true;
+           function localeMonthsParse (monthName, format, strict) {
+               var i, mom, regex;
        
-               var addendum = getDeclarationErrorAddendum();
-               process.env.NODE_ENV !== 'production' ? warning(false, 'Failed propType: %s%s', error.message, addendum) : undefined;
-             }
+               if (this._monthsParseExact) {
+                   return units_month__handleStrictParse.call(this, monthName, format, strict);
+               }
+       
+               if (!this._monthsParse) {
+                   this._monthsParse = [];
+                   this._longMonthsParse = [];
+                   this._shortMonthsParse = [];
+               }
+       
+               // TODO: add sorting
+               // Sorting makes sure if one month (or abbr) is a prefix of another
+               // see sorting in computeMonthsParse
+               for (i = 0; i < 12; i++) {
+                   // make the regex if we don't have it already
+                   mom = create_utc__createUTC([2000, i]);
+                   if (strict && !this._longMonthsParse[i]) {
+                       this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i');
+                       this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i');
+                   }
+                   if (!strict && !this._monthsParse[i]) {
+                       regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');
+                       this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');
+                   }
+                   // test the regex
+                   if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) {
+                       return i;
+                   } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) {
+                       return i;
+                   } else if (!strict && this._monthsParse[i].test(monthName)) {
+                       return i;
+                   }
+               }
            }
-         }
-       }
        
-       /**
-        * Given an element, validate that its props follow the propTypes definition,
-        * provided by the type.
-        *
-        * @param {ReactElement} element
-        */
-       function validatePropTypes(element) {
-         var componentClass = element.type;
-         if (typeof componentClass !== 'function') {
-           return;
-         }
-         var name = componentClass.displayName || componentClass.name;
-         if (componentClass.propTypes) {
-           checkPropTypes(name, componentClass.propTypes, element.props, ReactPropTypeLocations.prop);
-         }
-         if (typeof componentClass.getDefaultProps === 'function') {
-           process.env.NODE_ENV !== 'production' ? warning(componentClass.getDefaultProps.isReactClassApproved, 'getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.') : undefined;
-         }
-       }
+           // MOMENTS
        
-       var ReactElementValidator = {
+           function setMonth (mom, value) {
+               var dayOfMonth;
        
-         createElement: function (type, props, children) {
-           var validType = typeof type === 'string' || typeof type === 'function';
-           // We warn in this case but don't throw. We expect the element creation to
-           // succeed and there will likely be errors in render.
-           process.env.NODE_ENV !== 'production' ? warning(validType, 'React.createElement: type should not be null, undefined, boolean, or ' + 'number. It should be a string (for DOM elements) or a ReactClass ' + '(for composite components).%s', getDeclarationErrorAddendum()) : undefined;
+               if (!mom.isValid()) {
+                   // No op
+                   return mom;
+               }
        
-           var element = ReactElement.createElement.apply(this, arguments);
+               if (typeof value === 'string') {
+                   if (/^\d+$/.test(value)) {
+                       value = toInt(value);
+                   } else {
+                       value = mom.localeData().monthsParse(value);
+                       // TODO: Another silent failure?
+                       if (typeof value !== 'number') {
+                           return mom;
+                       }
+                   }
+               }
        
-           // The result can be nullish if a mock or a custom function is used.
-           // TODO: Drop this when these are no longer allowed as the type argument.
-           if (element == null) {
-             return element;
+               dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));
+               mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);
+               return mom;
            }
        
-           // Skip key warning if the type isn't valid since our key validation logic
-           // doesn't expect a non-string/function type and can throw confusing errors.
-           // We don't want exception behavior to differ between dev and prod.
-           // (Rendering will throw with a helpful message and as soon as the type is
-           // fixed, the key warnings will appear.)
-           if (validType) {
-             for (var i = 2; i < arguments.length; i++) {
-               validateChildKeys(arguments[i], type);
-             }
+           function getSetMonth (value) {
+               if (value != null) {
+                   setMonth(this, value);
+                   utils_hooks__hooks.updateOffset(this, true);
+                   return this;
+               } else {
+                   return get_set__get(this, 'Month');
+               }
            }
        
-           validatePropTypes(element);
-       
-           return element;
-         },
+           function getDaysInMonth () {
+               return daysInMonth(this.year(), this.month());
+           }
        
-         createFactory: function (type) {
-           var validatedFactory = ReactElementValidator.createElement.bind(null, type);
-           // Legacy hook TODO: Warn if this is accessed
-           validatedFactory.type = type;
+           var defaultMonthsShortRegex = matchWord;
+           function monthsShortRegex (isStrict) {
+               if (this._monthsParseExact) {
+                   if (!hasOwnProp(this, '_monthsRegex')) {
+                       computeMonthsParse.call(this);
+                   }
+                   if (isStrict) {
+                       return this._monthsShortStrictRegex;
+                   } else {
+                       return this._monthsShortRegex;
+                   }
+               } else {
+                   if (!hasOwnProp(this, '_monthsShortRegex')) {
+                       this._monthsShortRegex = defaultMonthsShortRegex;
+                   }
+                   return this._monthsShortStrictRegex && isStrict ?
+                       this._monthsShortStrictRegex : this._monthsShortRegex;
+               }
+           }
        
-           if (process.env.NODE_ENV !== 'production') {
-             if (canDefineProperty) {
-               Object.defineProperty(validatedFactory, 'type', {
-                 enumerable: false,
-                 get: function () {
-                   process.env.NODE_ENV !== 'production' ? warning(false, 'Factory.type is deprecated. Access the class directly ' + 'before passing it to createFactory.') : undefined;
-                   Object.defineProperty(this, 'type', {
-                     value: type
-                   });
-                   return type;
-                 }
-               });
-             }
+           var defaultMonthsRegex = matchWord;
+           function monthsRegex (isStrict) {
+               if (this._monthsParseExact) {
+                   if (!hasOwnProp(this, '_monthsRegex')) {
+                       computeMonthsParse.call(this);
+                   }
+                   if (isStrict) {
+                       return this._monthsStrictRegex;
+                   } else {
+                       return this._monthsRegex;
+                   }
+               } else {
+                   if (!hasOwnProp(this, '_monthsRegex')) {
+                       this._monthsRegex = defaultMonthsRegex;
+                   }
+                   return this._monthsStrictRegex && isStrict ?
+                       this._monthsStrictRegex : this._monthsRegex;
+               }
            }
        
-           return validatedFactory;
-         },
+           function computeMonthsParse () {
+               function cmpLenRev(a, b) {
+                   return b.length - a.length;
+               }
        
-         cloneElement: function (element, props, children) {
-           var newElement = ReactElement.cloneElement.apply(this, arguments);
-           for (var i = 2; i < arguments.length; i++) {
-             validateChildKeys(arguments[i], newElement.type);
-           }
-           validatePropTypes(newElement);
-           return newElement;
-         }
+               var shortPieces = [], longPieces = [], mixedPieces = [],
+                   i, mom;
+               for (i = 0; i < 12; i++) {
+                   // make the regex if we don't have it already
+                   mom = create_utc__createUTC([2000, i]);
+                   shortPieces.push(this.monthsShort(mom, ''));
+                   longPieces.push(this.months(mom, ''));
+                   mixedPieces.push(this.months(mom, ''));
+                   mixedPieces.push(this.monthsShort(mom, ''));
+               }
+               // Sorting makes sure if one month (or abbr) is a prefix of another it
+               // will match the longer piece.
+               shortPieces.sort(cmpLenRev);
+               longPieces.sort(cmpLenRev);
+               mixedPieces.sort(cmpLenRev);
+               for (i = 0; i < 12; i++) {
+                   shortPieces[i] = regexEscape(shortPieces[i]);
+                   longPieces[i] = regexEscape(longPieces[i]);
+               }
+               for (i = 0; i < 24; i++) {
+                   mixedPieces[i] = regexEscape(mixedPieces[i]);
+               }
        
-       };
+               this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
+               this._monthsShortRegex = this._monthsRegex;
+               this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');
+               this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');
+           }
        
-       module.exports = ReactElementValidator;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
-
-/***/ },
-/* 157 */
-/***/ function(module, exports) {
-
-       /**
-        * 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.
-        *
-        * @providesModule mapObject
-        */
+           // FORMATTING
        
-       'use strict';
+           addFormatToken('Y', 0, 0, function () {
+               var y = this.year();
+               return y <= 9999 ? '' + y : '+' + y;
+           });
        
-       var hasOwnProperty = Object.prototype.hasOwnProperty;
+           addFormatToken(0, ['YY', 2], 0, function () {
+               return this.year() % 100;
+           });
        
-       /**
-        * Executes the provided `callback` once for each enumerable own property in the
-        * object and constructs a new object from the results. The `callback` is
-        * invoked with three arguments:
-        *
-        *  - the property value
-        *  - the property name
-        *  - the object being traversed
-        *
-        * Properties that are added after the call to `mapObject` will not be visited
-        * by `callback`. If the values of existing properties are changed, the value
-        * passed to `callback` will be the value at the time `mapObject` visits them.
-        * Properties that are deleted before being visited are not visited.
-        *
-        * @grep function objectMap()
-        * @grep function objMap()
-        *
-        * @param {?object} object
-        * @param {function} callback
-        * @param {*} context
-        * @return {?object}
-        */
-       function mapObject(object, callback, context) {
-         if (!object) {
-           return null;
-         }
-         var result = {};
-         for (var name in object) {
-           if (hasOwnProperty.call(object, name)) {
-             result[name] = callback.call(context, object[name], name, object);
-           }
-         }
-         return result;
-       }
+           addFormatToken(0, ['YYYY',   4],       0, 'year');
+           addFormatToken(0, ['YYYYY',  5],       0, 'year');
+           addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');
        
-       module.exports = mapObject;
-
-/***/ },
-/* 158 */
-/***/ function(module, exports, __webpack_require__) {
-
-       /* WEBPACK VAR INJECTION */(function(process) {/**
-        * 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.
-        *
-        * @providesModule onlyChild
-        */
-       'use strict';
+           // ALIASES
        
-       var ReactElement = __webpack_require__(44);
+           addUnitAlias('year', 'y');
        
-       var invariant = __webpack_require__(15);
+           // PRIORITIES
        
-       /**
-        * Returns the first child in a collection of children and verifies that there
-        * is only one child in the collection. The current implementation of this
-        * function assumes that a single child gets passed without a wrapper, but the
-        * purpose of this helper function is to abstract away the particular structure
-        * of children.
-        *
-        * @param {?object} children Child collection structure.
-        * @return {ReactComponent} The first and only `ReactComponent` contained in the
-        * structure.
-        */
-       function onlyChild(children) {
-         !ReactElement.isValidElement(children) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'onlyChild must be passed a children with exactly one child.') : invariant(false) : undefined;
-         return children;
-       }
+           addUnitPriority('year', 1);
        
-       module.exports = onlyChild;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
-
-/***/ },
-/* 159 */
-/***/ function(module, exports, __webpack_require__) {
-
-       /* WEBPACK VAR INJECTION */(function(process) {/**
-        * 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.
-        *
-        * @providesModule deprecated
-        */
+           // PARSING
        
-       'use strict';
+           addRegexToken('Y',      matchSigned);
+           addRegexToken('YY',     match1to2, match2);
+           addRegexToken('YYYY',   match1to4, match4);
+           addRegexToken('YYYYY',  match1to6, match6);
+           addRegexToken('YYYYYY', match1to6, match6);
        
-       var assign = __webpack_require__(41);
-       var warning = __webpack_require__(27);
+           addParseToken(['YYYYY', 'YYYYYY'], YEAR);
+           addParseToken('YYYY', function (input, array) {
+               array[YEAR] = input.length === 2 ? utils_hooks__hooks.parseTwoDigitYear(input) : toInt(input);
+           });
+           addParseToken('YY', function (input, array) {
+               array[YEAR] = utils_hooks__hooks.parseTwoDigitYear(input);
+           });
+           addParseToken('Y', function (input, array) {
+               array[YEAR] = parseInt(input, 10);
+           });
        
-       /**
-        * This will log a single deprecation notice per function and forward the call
-        * on to the new API.
-        *
-        * @param {string} fnName The name of the function
-        * @param {string} newModule The module that fn will exist in
-        * @param {string} newPackage The module that fn will exist in
-        * @param {*} ctx The context this forwarded call should run in
-        * @param {function} fn The function to forward on to
-        * @return {function} The function that will warn once and then call fn
-        */
-       function deprecated(fnName, newModule, newPackage, ctx, fn) {
-         var warned = false;
-         if (process.env.NODE_ENV !== 'production') {
-           var newFn = function () {
-             process.env.NODE_ENV !== 'production' ? warning(warned,
-             // Require examples in this string must be split to prevent React's
-             // build tools from mistaking them for real requires.
-             // Otherwise the build tools will attempt to build a '%s' module.
-             'React.%s is deprecated. Please use %s.%s from require' + '(\'%s\') ' + 'instead.', fnName, newModule, fnName, newPackage) : undefined;
-             warned = true;
-             return fn.apply(ctx, arguments);
-           };
-           // We need to make sure all properties of the original fn are copied over.
-           // In particular, this is needed to support PropTypes
-           return assign(newFn, fn);
-         }
+           // HELPERS
        
-         return fn;
-       }
+           function daysInYear(year) {
+               return isLeapYear(year) ? 366 : 365;
+           }
        
-       module.exports = deprecated;
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
-
-/***/ },
-/* 160 */
-/***/ function(module, exports, __webpack_require__) {
-
-       'use strict';
+           function isLeapYear(year) {
+               return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
+           }
        
-       module.exports = __webpack_require__(5);
-
-
-/***/ },
-/* 161 */
-/***/ function(module, exports, __webpack_require__) {
-
-       /*
-        * GregorianCalendar class
-        * @ignore
-        * @author yiminghe@gmail.com
-        */
-       'use strict';
+           // HOOKS
        
-       var toInt = parseInt;
-       var Utils = __webpack_require__(162);
-       var defaultLocale = __webpack_require__(164);
-       var Const = __webpack_require__(163);
+           utils_hooks__hooks.parseTwoDigitYear = function (input) {
+               return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);
+           };
        
-       /*
-        * GregorianCalendar class.
-        *
-        * - no arguments:
-        *   Constructs a default GregorianCalendar using the current time
-        *   in the default time zone with the default locale.
-        * - one argument locale:
-        *   Constructs a GregorianCalendar
-        *   based on the current time in the default time zone with the given locale.
-        *
-        * @class Date.Gregorian
-        */
-       function GregorianCalendar(loc) {
-         var locale = loc || defaultLocale;
+           // MOMENTS
        
-         this.locale = locale;
+           var getSetYear = makeGetSet('FullYear', true);
        
-         this.fields = [];
+           function getIsLeapYear () {
+               return isLeapYear(this.year());
+           }
        
-         /*
-          * The currently set time for this date.
-          * @protected
-          * @type Number|undefined
-          */
-         this.time = undefined;
-         /*
-          * The timezoneOffset in minutes used by this date.
-          * @type Number
-          * @protected
-          */
+           function createDate (y, m, d, h, M, s, ms) {
+               //can't just apply() to create a date:
+               //http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply
+               var date = new Date(y, m, d, h, M, s, ms);
        
-         this.timezoneOffset = locale.timezoneOffset;
+               //the date constructor remaps years 0-99 to 1900-1999
+               if (y < 100 && y >= 0 && isFinite(date.getFullYear())) {
+                   date.setFullYear(y);
+               }
+               return date;
+           }
        
-         /*
-          * The first day of the week
-          * @type Number
-          * @protected
-          */
-         this.firstDayOfWeek = locale.firstDayOfWeek;
+           function createUTCDate (y) {
+               var date = new Date(Date.UTC.apply(null, arguments));
        
-         /*
-          * The number of days required for the first week in a month or year,
-          * with possible values from 1 to 7.
-          * @@protected
-          * @type Number
-          */
-         this.minimalDaysInFirstWeek = locale.minimalDaysInFirstWeek;
+               //the Date.UTC function remaps years 0-99 to 1900-1999
+               if (y < 100 && y >= 0 && isFinite(date.getUTCFullYear())) {
+                   date.setUTCFullYear(y);
+               }
+               return date;
+           }
        
-         this.fieldsComputed = false;
-       }
+           // start-of-first-week - start-of-year
+           function firstWeekOffset(year, dow, doy) {
+               var // first-week day -- which january is always in the first week (4 for iso, 1 for other)
+                   fwd = 7 + dow - doy,
+                   // first-week day local weekday -- which local weekday is fwd
+                   fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;
        
-       Utils.mix(GregorianCalendar, Const);
+               return -fwdlw + fwd - 1;
+           }
        
-       Utils.mix(GregorianCalendar, {
-         Utils: Utils,
+           //http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday
+           function dayOfYearFromWeeks(year, week, weekday, dow, doy) {
+               var localWeekday = (7 + weekday - dow) % 7,
+                   weekOffset = firstWeekOffset(year, dow, doy),
+                   dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,
+                   resYear, resDayOfYear;
        
-         defaultLocale: defaultLocale,
+               if (dayOfYear <= 0) {
+                   resYear = year - 1;
+                   resDayOfYear = daysInYear(resYear) + dayOfYear;
+               } else if (dayOfYear > daysInYear(year)) {
+                   resYear = year + 1;
+                   resDayOfYear = dayOfYear - daysInYear(year);
+               } else {
+                   resYear = year;
+                   resDayOfYear = dayOfYear;
+               }
        
-         /*
-          * Determines if the given year is a leap year.
-          * Returns true if the given year is a leap year. To specify BC year numbers,
-          * 1 - year number must be given. For example, year BC 4 is specified as -3.
-          * @param {Number} year the given year.
-          * @returns {Boolean} true if the given year is a leap year; false otherwise.
-          * @static
-          * @method
-          */
-         isLeapYear: Utils.isLeapYear,
+               return {
+                   year: resYear,
+                   dayOfYear: resDayOfYear
+               };
+           }
        
-         /*
-          * Enum indicating year field of date
-          * @type Number
-          */
-         YEAR: 1,
-         /*
-          * Enum indicating month field of date
-          * @type Number
-          */
-         MONTH: 2,
-         /*
-          * Enum indicating the day of the month
-          * @type Number
-          */
-         DAY_OF_MONTH: 3,
-         /*
-          * Enum indicating the hour (24).
-          * @type Number
-          */
-         HOUR_OF_DAY: 4,
-         /*
-          * Enum indicating the minute of the day
-          * @type Number
-          */
-         MINUTES: 5,
-         /*
-          * Enum indicating the second of the day
-          * @type Number
-          */
-         SECONDS: 6,
-         /*
-          * Enum indicating the millisecond of the day
-          * @type Number
-          */
-         MILLISECONDS: 7,
-         /*
-          * Enum indicating the week number within the current year
-          * @type Number
-          */
-         WEEK_OF_YEAR: 8,
-         /*
-          * Enum indicating the week number within the current month
-          * @type Number
-          */
-         WEEK_OF_MONTH: 9,
+           function weekOfYear(mom, dow, doy) {
+               var weekOffset = firstWeekOffset(mom.year(), dow, doy),
+                   week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,
+                   resWeek, resYear;
        
-         /*
-          * Enum indicating the day of the day number within the current year
-          * @type Number
-          */
-         DAY_OF_YEAR: 10,
-         /*
-          * Enum indicating the day of the week
-          * @type Number
-          */
-         DAY_OF_WEEK: 11,
-         /*
-          * Enum indicating the day of the ordinal number of the day of the week
-          * @type Number
-          */
-         DAY_OF_WEEK_IN_MONTH: 12,
+               if (week < 1) {
+                   resYear = mom.year() - 1;
+                   resWeek = week + weeksInYear(resYear, dow, doy);
+               } else if (week > weeksInYear(mom.year(), dow, doy)) {
+                   resWeek = week - weeksInYear(mom.year(), dow, doy);
+                   resYear = mom.year() + 1;
+               } else {
+                   resYear = mom.year();
+                   resWeek = week;
+               }
        
-         /*
-          * Enum indicating am
-          * @type Number
-          */
-         AM: 0,
-         /*
-          * Enum indicating pm
-          * @type Number
-          */
-         PM: 1
-       });
+               return {
+                   week: resWeek,
+                   year: resYear
+               };
+           }
        
-       var FIELDS = ['', 'Year', 'Month', 'DayOfMonth', 'HourOfDay', 'Minutes', 'Seconds', 'Milliseconds', 'WeekOfYear', 'WeekOfMonth', 'DayOfYear', 'DayOfWeek', 'DayOfWeekInMonth'];
+           function weeksInYear(year, dow, doy) {
+               var weekOffset = firstWeekOffset(year, dow, doy),
+                   weekOffsetNext = firstWeekOffset(year + 1, dow, doy);
+               return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;
+           }
        
-       var YEAR = GregorianCalendar.YEAR;
-       var MONTH = GregorianCalendar.MONTH;
-       var DAY_OF_MONTH = GregorianCalendar.DAY_OF_MONTH;
-       var HOUR_OF_DAY = GregorianCalendar.HOUR_OF_DAY;
-       var MINUTE = GregorianCalendar.MINUTES;
-       var SECONDS = GregorianCalendar.SECONDS;
+           // FORMATTING
        
-       var MILLISECONDS = GregorianCalendar.MILLISECONDS;
-       var DAY_OF_WEEK_IN_MONTH = GregorianCalendar.DAY_OF_WEEK_IN_MONTH;
-       var DAY_OF_YEAR = GregorianCalendar.DAY_OF_YEAR;
-       var DAY_OF_WEEK = GregorianCalendar.DAY_OF_WEEK;
+           addFormatToken('w', ['ww', 2], 'wo', 'week');
+           addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');
        
-       var WEEK_OF_MONTH = GregorianCalendar.WEEK_OF_MONTH;
-       var WEEK_OF_YEAR = GregorianCalendar.WEEK_OF_YEAR;
+           // ALIASES
        
-       var MONTH_LENGTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; // 0-based
-       var LEAP_MONTH_LENGTH = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; // 0-based
+           addUnitAlias('week', 'w');
+           addUnitAlias('isoWeek', 'W');
        
-       var ONE_SECOND = 1000;
-       var ONE_MINUTE = 60 * ONE_SECOND;
-       var ONE_HOUR = 60 * ONE_MINUTE;
-       var ONE_DAY = 24 * ONE_HOUR;
-       var ONE_WEEK = ONE_DAY * 7;
+           // PRIORITIES
        
-       var EPOCH_OFFSET = 719163; // Fixed date of January 1, 1970 (Gregorian)
+           addUnitPriority('week', 5);
+           addUnitPriority('isoWeek', 5);
        
-       var mod = Utils.mod;
-       var _isLeapYear = Utils.isLeapYear;
-       var floorDivide = Math.floor;
+           // PARSING
        
-       var MIN_VALUES = [undefined, 1, // YEAR
-       GregorianCalendar.JANUARY, // MONTH
-       1, // DAY_OF_MONTH
-       0, // HOUR_OF_DAY
-       0, // MINUTE
-       0, // SECONDS
-       0, // MILLISECONDS
+           addRegexToken('w',  match1to2);
+           addRegexToken('ww', match1to2, match2);
+           addRegexToken('W',  match1to2);
+           addRegexToken('WW', match1to2, match2);
        
-       1, // WEEK_OF_YEAR
-       undefined, // WEEK_OF_MONTH
+           addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) {
+               week[token.substr(0, 1)] = toInt(input);
+           });
        
-       1, // DAY_OF_YEAR
-       GregorianCalendar.SUNDAY, // DAY_OF_WEEK
-       1];
+           // HELPERS
        
-       // DAY_OF_WEEK_IN_MONTH
-       var MAX_VALUES = [undefined, 292278994, // YEAR
-       GregorianCalendar.DECEMBER, // MONTH
-       undefined, // DAY_OF_MONTH
-       23, // HOUR_OF_DAY
-       59, // MINUTE
-       59, // SECONDS
-       999, // MILLISECONDS
-       undefined, // WEEK_OF_YEAR
-       undefined, // WEEK_OF_MONTH
-       undefined, // DAY_OF_YEAR
-       GregorianCalendar.SATURDAY, // DAY_OF_WEEK
-       undefined];
+           // LOCALES
        
-       // ------------------- private start
+           function localeWeek (mom) {
+               return weekOfYear(mom, this._week.dow, this._week.doy).week;
+           }
        
-       // DAY_OF_WEEK_IN_MONTH
-       function getMonthLength(year, month) {
-         return _isLeapYear(year) ? LEAP_MONTH_LENGTH[month] : MONTH_LENGTH[month];
-       }
+           var defaultLocaleWeek = {
+               dow : 0, // Sunday is the first day of the week.
+               doy : 6  // The week that contains Jan 1st is the first week of the year.
+           };
        
-       function getYearLength(year) {
-         return _isLeapYear(year) ? 366 : 365;
-       }
+           function localeFirstDayOfWeek () {
+               return this._week.dow;
+           }
        
-       function adjustDayOfMonth(self) {
-         var fields = self.fields;
-         var year = fields[YEAR];
-         var month = fields[MONTH];
-         var monthLen = getMonthLength(year, month);
-         var dayOfMonth = fields[DAY_OF_MONTH];
-         if (dayOfMonth > monthLen) {
-           self.set(DAY_OF_MONTH, monthLen);
-         }
-       }
+           function localeFirstDayOfYear () {
+               return this._week.doy;
+           }
        
-       function getDayOfWeekDateOnOrBefore(fixedDate, dayOfWeek) {
-         // 1.1.1 is monday
-         // one week has 7 days
-         return fixedDate - mod(fixedDate - dayOfWeek, 7);
-       }
+           // MOMENTS
        
-       function getWeekNumber(self, fixedDay1, fixedDate) {
-         var fixedDay1st = getDayOfWeekDateOnOrBefore(fixedDay1 + 6, self.firstDayOfWeek);
-         var nDays = fixedDay1st - fixedDay1;
-         if (nDays >= self.minimalDaysInFirstWeek) {
-           fixedDay1st -= 7;
-         }
-         var normalizedDayOfPeriod = fixedDate - fixedDay1st;
-         return floorDivide(normalizedDayOfPeriod / 7) + 1;
-       }
+           function getSetWeek (input) {
+               var week = this.localeData().week(this);
+               return input == null ? week : this.add((input - week) * 7, 'd');
+           }
        
-       // ------------------- private end
+           function getSetISOWeek (input) {
+               var week = weekOfYear(this, 1, 4).week;
+               return input == null ? week : this.add((input - week) * 7, 'd');
+           }
        
-       GregorianCalendar.prototype = {
-         constructor: GregorianCalendar,
+           // FORMATTING
        
-         isGregorianCalendar: 1,
+           addFormatToken('d', 0, 'do', 'day');
        
-         /*
-          * Determines if current year is a leap year.
-          * Returns true if the given year is a leap year. To specify BC year numbers,
-          * 1 - year number must be given. For example, year BC 4 is specified as -3.
-          * @returns {Boolean} true if the given year is a leap year; false otherwise.
-          * @method
-          * @member Date.Gregorian
-          */
-         isLeapYear: function isLeapYear() {
-           return _isLeapYear(this.getYear());
-         },
+           addFormatToken('dd', 0, 0, function (format) {
+               return this.localeData().weekdaysMin(this, format);
+           });
        
-         /*
-          * Return local info for current date instance
-          * @returns {Object}
-          */
-         getLocale: function getLocale() {
-           return this.locale;
-         },
+           addFormatToken('ddd', 0, 0, function (format) {
+               return this.localeData().weekdaysShort(this, format);
+           });
        
-         /*
-          * Returns the minimum value for
-          * the given calendar field of this GregorianCalendar instance.
-          * The minimum value is defined as the smallest value
-          * returned by the get method for any possible time value,
-          * taking into consideration the current values of the getFirstDayOfWeek,
-          * getMinimalDaysInFirstWeek.
-          * @param field the calendar field.
-          * @returns {Number} the minimum value for the given calendar field.
-          */
-         getActualMinimum: function getActualMinimum(field) {
-           if (MIN_VALUES[field] !== undefined) {
-             return MIN_VALUES[field];
-           }
-           if (field === WEEK_OF_MONTH) {
-             var cal = this.clone();
-             cal.clear();
-             cal.set(this.fields[YEAR], this.fields[MONTH], 1);
-             return cal.get(WEEK_OF_MONTH);
-           }
+           addFormatToken('dddd', 0, 0, function (format) {
+               return this.localeData().weekdays(this, format);
+           });
        
-           throw new Error('minimum value not defined!');
-         },
+           addFormatToken('e', 0, 0, 'weekday');
+           addFormatToken('E', 0, 0, 'isoWeekday');
        
-         /*
-          * Returns the maximum value for the given calendar field
-          * of this GregorianCalendar instance.
-          * The maximum value is defined as the largest value returned
-          * by the get method for any possible time value, taking into consideration
-          * the current values of the getFirstDayOfWeek, getMinimalDaysInFirstWeek methods.
-          * @param field the calendar field.
-          * @returns {Number} the maximum value for the given calendar field.
-          */
-         getActualMaximum: function getActualMaximum(field) {
-           if (MAX_VALUES[field] !== undefined) {
-             return MAX_VALUES[field];
-           }
-           var value = undefined;
-           var fields = this.fields;
-           switch (field) {
-             case DAY_OF_MONTH:
-               value = getMonthLength(fields[YEAR], fields[MONTH]);
-               break;
+           // ALIASES
        
-             case WEEK_OF_YEAR:
-               var endOfYear = this.clone();
-               endOfYear.clear();
-               endOfYear.set(fields[YEAR], GregorianCalendar.DECEMBER, 31);
-               value = endOfYear.get(WEEK_OF_YEAR);
-               if (value === 1) {
-                 value = 52;
-               }
-               break;
+           addUnitAlias('day', 'd');
+           addUnitAlias('weekday', 'e');
+           addUnitAlias('isoWeekday', 'E');
        
-             case WEEK_OF_MONTH:
-               var endOfMonth = this.clone();
-               endOfMonth.clear();
-               endOfMonth.set(fields[YEAR], fields[MONTH], getMonthLength(fields[YEAR], fields[MONTH]));
-               value = endOfMonth.get(WEEK_OF_MONTH);
-               break;
+           // PRIORITY
+           addUnitPriority('day', 11);
+           addUnitPriority('weekday', 11);
+           addUnitPriority('isoWeekday', 11);
        
-             case DAY_OF_YEAR:
-               value = getYearLength(fields[YEAR]);
-               break;
+           // PARSING
        
-             case DAY_OF_WEEK_IN_MONTH:
-               value = toInt((getMonthLength(fields[YEAR], fields[MONTH]) - 1) / 7) + 1;
-               break;
-             default:
-               break;
-           }
-           if (value === undefined) {
-             throw new Error('maximum value not defined!');
-           }
-           return value;
-         },
+           addRegexToken('d',    match1to2);
+           addRegexToken('e',    match1to2);
+           addRegexToken('E',    match1to2);
+           addRegexToken('dd',   function (isStrict, locale) {
+               return locale.weekdaysMinRegex(isStrict);
+           });
+           addRegexToken('ddd',   function (isStrict, locale) {
+               return locale.weekdaysShortRegex(isStrict);
+           });
+           addRegexToken('dddd',   function (isStrict, locale) {
+               return locale.weekdaysRegex(isStrict);
+           });
        
-         /*
-          * Determines if the given calendar field has a value set,
-          * including cases that the value has been set by internal fields calculations
-          * triggered by a get method call.
-          * @param field the calendar field to be cleared.
-          * @returns {boolean} true if the given calendar field has a value set; false otherwise.
-          */
-         isSet: function isSet(field) {
-           return this.fields[field] !== undefined;
-         },
+           addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {
+               var weekday = config._locale.weekdaysParse(input, token, config._strict);
+               // if we didn't get a weekday name, mark the date as invalid
+               if (weekday != null) {
+                   week.d = weekday;
+               } else {
+                   getParsingFlags(config).invalidWeekday = input;
+               }
+           });
        
-         /*
-          * Converts the time value (millisecond offset from the Epoch)
-          * to calendar field values.
-          * @protected
-          */
-         computeFields: function computeFields() {
-           var time = this.time;
-           var timezoneOffset = this.timezoneOffset * ONE_MINUTE;
-           var fixedDate = toInt(timezoneOffset / ONE_DAY);
-           var timeOfDay = timezoneOffset % ONE_DAY;
-           fixedDate += toInt(time / ONE_DAY);
-           timeOfDay += time % ONE_DAY;
-           if (timeOfDay >= ONE_DAY) {
-             timeOfDay -= ONE_DAY;
-             fixedDate++;
-           } else {
-             while (timeOfDay < 0) {
-               timeOfDay += ONE_DAY;
-               fixedDate--;
-             }
-           }
+           addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {
+               week[token] = toInt(input);
+           });
        
-           fixedDate += EPOCH_OFFSET;
+           // HELPERS
        
-           var date = Utils.getGregorianDateFromFixedDate(fixedDate);
+           function parseWeekday(input, locale) {
+               if (typeof input !== 'string') {
+                   return input;
+               }
        
-           var year = date.year;
+               if (!isNaN(input)) {
+                   return parseInt(input, 10);
+               }
        
-           var fields = this.fields;
-           fields[YEAR] = year;
-           fields[MONTH] = date.month;
-           fields[DAY_OF_MONTH] = date.dayOfMonth;
-           fields[DAY_OF_WEEK] = date.dayOfWeek;
+               input = locale.weekdaysParse(input);
+               if (typeof input === 'number') {
+                   return input;
+               }
        
-           if (timeOfDay !== 0) {
-             fields[HOUR_OF_DAY] = toInt(timeOfDay / ONE_HOUR);
-             var r = timeOfDay % ONE_HOUR;
-             fields[MINUTE] = toInt(r / ONE_MINUTE);
-             r %= ONE_MINUTE;
-             fields[SECONDS] = toInt(r / ONE_SECOND);
-             fields[MILLISECONDS] = r % ONE_SECOND;
-           } else {
-             fields[HOUR_OF_DAY] = fields[MINUTE] = fields[SECONDS] = fields[MILLISECONDS] = 0;
+               return null;
            }
        
-           var fixedDateJan1 = Utils.getFixedDate(year, GregorianCalendar.JANUARY, 1);
-           var dayOfYear = fixedDate - fixedDateJan1 + 1;
-           var fixDateMonth1 = fixedDate - date.dayOfMonth + 1;
+           function parseIsoWeekday(input, locale) {
+               if (typeof input === 'string') {
+                   return locale.weekdaysParse(input) % 7 || 7;
+               }
+               return isNaN(input) ? null : input;
+           }
        
-           fields[DAY_OF_YEAR] = dayOfYear;
-           fields[DAY_OF_WEEK_IN_MONTH] = toInt((date.dayOfMonth - 1) / 7) + 1;
+           // LOCALES
        
-           var weekOfYear = getWeekNumber(this, fixedDateJan1, fixedDate);
+           var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_');
+           function localeWeekdays (m, format) {
+               return isArray(this._weekdays) ? this._weekdays[m.day()] :
+                   this._weekdays[this._weekdays.isFormat.test(format) ? 'format' : 'standalone'][m.day()];
+           }
        
-           // 本周没有足够的时间在当前年
-           if (weekOfYear === 0) {
-             // If the date belongs to the last week of the
-             // previous year, use the week number of "12/31" of
-             // the "previous" year.
-             var fixedDec31 = fixedDateJan1 - 1;
-             var prevJan1 = fixedDateJan1 - getYearLength(year - 1);
-             weekOfYear = getWeekNumber(this, prevJan1, fixedDec31);
-           } else
-             // 本周是年末最后一周,可能有足够的时间在新的一年
-             if (weekOfYear >= 52) {
-               var nextJan1 = fixedDateJan1 + getYearLength(year);
-               var nextJan1st = getDayOfWeekDateOnOrBefore(nextJan1 + 6, this.firstDayOfWeek);
-               var nDays = nextJan1st - nextJan1;
-               // 本周有足够天数在新的一年
-               if (nDays >= this.minimalDaysInFirstWeek &&
-               // 当天确实在本周,weekOfYear === 53 时是不需要这个判断
-               fixedDate >= nextJan1st - 7) {
-                 weekOfYear = 1;
-               }
-             }
+           var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_');
+           function localeWeekdaysShort (m) {
+               return this._weekdaysShort[m.day()];
+           }
        
-           fields[WEEK_OF_YEAR] = weekOfYear;
-           fields[WEEK_OF_MONTH] = getWeekNumber(this, fixDateMonth1, fixedDate);
+           var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_');
+           function localeWeekdaysMin (m) {
+               return this._weekdaysMin[m.day()];
+           }
        
-           this.fieldsComputed = true;
-         },
+           function day_of_week__handleStrictParse(weekdayName, format, strict) {
+               var i, ii, mom, llc = weekdayName.toLocaleLowerCase();
+               if (!this._weekdaysParse) {
+                   this._weekdaysParse = [];
+                   this._shortWeekdaysParse = [];
+                   this._minWeekdaysParse = [];
        
-         /*
-          * Converts calendar field values to the time value
-          * (millisecond offset from the Epoch).
-          * @protected
-          */
-         computeTime: function computeTime() {
-           var year = undefined;
-           var fields = this.fields;
-           if (this.isSet(YEAR)) {
-             year = fields[YEAR];
-           } else {
-             year = new Date().getFullYear();
-           }
-           var timeOfDay = 0;
-           if (this.isSet(HOUR_OF_DAY)) {
-             timeOfDay += fields[HOUR_OF_DAY];
-           }
-           timeOfDay *= 60;
-           timeOfDay += fields[MINUTE] || 0;
-           timeOfDay *= 60;
-           timeOfDay += fields[SECONDS] || 0;
-           timeOfDay *= 1000;
-           timeOfDay += fields[MILLISECONDS] || 0;
-           var fixedDate = 0;
-           fields[YEAR] = year;
-           fixedDate = fixedDate + this.getFixedDate();
-           // millis represents local wall-clock time in milliseconds.
-           var millis = (fixedDate - EPOCH_OFFSET) * ONE_DAY + timeOfDay;
-           millis -= this.timezoneOffset * ONE_MINUTE;
-           this.time = millis;
-           this.computeFields();
-         },
+                   for (i = 0; i < 7; ++i) {
+                       mom = create_utc__createUTC([2000, 1]).day(i);
+                       this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase();
+                       this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase();
+                       this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();
+                   }
+               }
        
-         /*
-          * Fills in any unset fields in the calendar fields. First,
-          * the computeTime() method is called if the time value (millisecond offset from the Epoch)
-          * has not been calculated from calendar field values.
-          * Then, the computeFields() method is called to calculate all calendar field values.
-          * @protected
-          */
-         complete: function complete() {
-           if (this.time === undefined) {
-             this.computeTime();
-           }
-           if (!this.fieldsComputed) {
-             this.computeFields();
+               if (strict) {
+                   if (format === 'dddd') {
+                       ii = indexOf.call(this._weekdaysParse, llc);
+                       return ii !== -1 ? ii : null;
+                   } else if (format === 'ddd') {
+                       ii = indexOf.call(this._shortWeekdaysParse, llc);
+                       return ii !== -1 ? ii : null;
+                   } else {
+                       ii = indexOf.call(this._minWeekdaysParse, llc);
+                       return ii !== -1 ? ii : null;
+                   }
+               } else {
+                   if (format === 'dddd') {
+                       ii = indexOf.call(this._weekdaysParse, llc);
+                       if (ii !== -1) {
+                           return ii;
+                       }
+                       ii = indexOf.call(this._shortWeekdaysParse, llc);
+                       if (ii !== -1) {
+                           return ii;
+                       }
+                       ii = indexOf.call(this._minWeekdaysParse, llc);
+                       return ii !== -1 ? ii : null;
+                   } else if (format === 'ddd') {
+                       ii = indexOf.call(this._shortWeekdaysParse, llc);
+                       if (ii !== -1) {
+                           return ii;
+                       }
+                       ii = indexOf.call(this._weekdaysParse, llc);
+                       if (ii !== -1) {
+                           return ii;
+                       }
+                       ii = indexOf.call(this._minWeekdaysParse, llc);
+                       return ii !== -1 ? ii : null;
+                   } else {
+                       ii = indexOf.call(this._minWeekdaysParse, llc);
+                       if (ii !== -1) {
+                           return ii;
+                       }
+                       ii = indexOf.call(this._weekdaysParse, llc);
+                       if (ii !== -1) {
+                           return ii;
+                       }
+                       ii = indexOf.call(this._shortWeekdaysParse, llc);
+                       return ii !== -1 ? ii : null;
+                   }
+               }
            }
-         },
        
-         getFixedDate: function getFixedDate() {
-           var self = this;
+           function localeWeekdaysParse (weekdayName, format, strict) {
+               var i, mom, regex;
        
-           var fields = self.fields;
-       
-           var firstDayOfWeekCfg = self.firstDayOfWeek;
+               if (this._weekdaysParseExact) {
+                   return day_of_week__handleStrictParse.call(this, weekdayName, format, strict);
+               }
        
-           var year = fields[YEAR];
+               if (!this._weekdaysParse) {
+                   this._weekdaysParse = [];
+                   this._minWeekdaysParse = [];
+                   this._shortWeekdaysParse = [];
+                   this._fullWeekdaysParse = [];
+               }
        
-           var month = GregorianCalendar.JANUARY;
+               for (i = 0; i < 7; i++) {
+                   // make the regex if we don't have it already
        
-           if (self.isSet(MONTH)) {
-             month = fields[MONTH];
-             if (month > GregorianCalendar.DECEMBER) {
-               year += toInt(month / 12);
-               month %= 12;
-             } else if (month < GregorianCalendar.JANUARY) {
-               year += floorDivide(month / 12);
-               month = mod(month, 12);
-             }
+                   mom = create_utc__createUTC([2000, 1]).day(i);
+                   if (strict && !this._fullWeekdaysParse[i]) {
+                       this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\.?') + '$', 'i');
+                       this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\.?') + '$', 'i');
+                       this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\.?') + '$', 'i');
+                   }
+                   if (!this._weekdaysParse[i]) {
+                       regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');
+                       this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');
+                   }
+                   // test the regex
+                   if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) {
+                       return i;
+                   } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) {
+                       return i;
+                   } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) {
+                       return i;
+                   } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {
+                       return i;
+                   }
+               }
            }
        
-           // Get the fixed date since Jan 1, 1 (Gregorian). We are on
-           // the first day of either `month' or January in 'year'.
-           var fixedDate = Utils.getFixedDate(year, month, 1);
-           var firstDayOfWeek = undefined;
-           var dayOfWeek = self.firstDayOfWeek;
+           // MOMENTS
        
-           if (self.isSet(DAY_OF_WEEK)) {
-             dayOfWeek = fields[DAY_OF_WEEK];
+           function getSetDayOfWeek (input) {
+               if (!this.isValid()) {
+                   return input != null ? this : NaN;
+               }
+               var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();
+               if (input != null) {
+                   input = parseWeekday(input, this.localeData());
+                   return this.add(input - day, 'd');
+               } else {
+                   return day;
+               }
            }
        
-           if (self.isSet(MONTH)) {
-             if (self.isSet(DAY_OF_MONTH)) {
-               fixedDate += fields[DAY_OF_MONTH] - 1;
-             } else {
-               if (self.isSet(WEEK_OF_MONTH)) {
-                 firstDayOfWeek = getDayOfWeekDateOnOrBefore(fixedDate + 6, firstDayOfWeekCfg);
+           function getSetLocaleDayOfWeek (input) {
+               if (!this.isValid()) {
+                   return input != null ? this : NaN;
+               }
+               var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;
+               return input == null ? weekday : this.add(input - weekday, 'd');
+           }
        
-                 // If we have enough days in the first week, then
-                 // move to the previous week.
-                 if (firstDayOfWeek - fixedDate >= self.minimalDaysInFirstWeek) {
-                   firstDayOfWeek -= 7;
-                 }
+           function getSetISODayOfWeek (input) {
+               if (!this.isValid()) {
+                   return input != null ? this : NaN;
+               }
        
-                 if (dayOfWeek !== firstDayOfWeekCfg) {
-                   firstDayOfWeek = getDayOfWeekDateOnOrBefore(firstDayOfWeek + 6, dayOfWeek);
-                 }
+               // behaves the same as moment#day except
+               // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)
+               // as a setter, sunday should belong to the previous week.
        
-                 fixedDate = firstDayOfWeek + 7 * (fields[WEEK_OF_MONTH] - 1);
+               if (input != null) {
+                   var weekday = parseIsoWeekday(input, this.localeData());
+                   return this.day(this.day() % 7 ? weekday : weekday - 7);
                } else {
-                 var dowim = undefined;
-                 if (self.isSet(DAY_OF_WEEK_IN_MONTH)) {
-                   dowim = fields[DAY_OF_WEEK_IN_MONTH];
-                 } else {
-                   dowim = 1;
-                 }
-                 var lastDate = 7 * dowim;
-                 if (dowim < 0) {
-                   lastDate = getMonthLength(year, month) + 7 * (dowim + 1);
-                 }
-                 fixedDate = getDayOfWeekDateOnOrBefore(fixedDate + lastDate - 1, dayOfWeek);
-               }
-             }
-           } else {
-             // We are on the first day of the year.
-             if (self.isSet(DAY_OF_YEAR)) {
-               fixedDate += fields[DAY_OF_YEAR] - 1;
-             } else if (self.isSet(WEEK_OF_YEAR)) {
-               firstDayOfWeek = getDayOfWeekDateOnOrBefore(fixedDate + 6, firstDayOfWeekCfg);
-               // If we have enough days in the first week, then move
-               // to the previous week.
-               if (firstDayOfWeek - fixedDate >= self.minimalDaysInFirstWeek) {
-                 firstDayOfWeek -= 7;
-               }
-               if (dayOfWeek !== firstDayOfWeekCfg) {
-                 firstDayOfWeek = getDayOfWeekDateOnOrBefore(firstDayOfWeek + 6, dayOfWeek);
+                   return this.day() || 7;
                }
-               fixedDate = firstDayOfWeek + 7 * (fields[WEEK_OF_YEAR] - 1);
-             }
            }
        
-           return fixedDate;
-         },
+           var defaultWeekdaysRegex = matchWord;
+           function weekdaysRegex (isStrict) {
+               if (this._weekdaysParseExact) {
+                   if (!hasOwnProp(this, '_weekdaysRegex')) {
+                       computeWeekdaysParse.call(this);
+                   }
+                   if (isStrict) {
+                       return this._weekdaysStrictRegex;
+                   } else {
+                       return this._weekdaysRegex;
+                   }
+               } else {
+                   if (!hasOwnProp(this, '_weekdaysRegex')) {
+                       this._weekdaysRegex = defaultWeekdaysRegex;
+                   }
+                   return this._weekdaysStrictRegex && isStrict ?
+                       this._weekdaysStrictRegex : this._weekdaysRegex;
+               }
+           }
        
-         /*
-          * Returns this Calendar's time value in milliseconds
-          * @member Date.Gregorian
-          * @returns {Number} the current time as UTC milliseconds from the epoch.
-          */
-         getTime: function getTime() {
-           if (this.time === undefined) {
-             this.computeTime();
+           var defaultWeekdaysShortRegex = matchWord;
+           function weekdaysShortRegex (isStrict) {
+               if (this._weekdaysParseExact) {
+                   if (!hasOwnProp(this, '_weekdaysRegex')) {
+                       computeWeekdaysParse.call(this);
+                   }
+                   if (isStrict) {
+                       return this._weekdaysShortStrictRegex;
+                   } else {
+                       return this._weekdaysShortRegex;
+                   }
+               } else {
+                   if (!hasOwnProp(this, '_weekdaysShortRegex')) {
+                       this._weekdaysShortRegex = defaultWeekdaysShortRegex;
+                   }
+                   return this._weekdaysShortStrictRegex && isStrict ?
+                       this._weekdaysShortStrictRegex : this._weekdaysShortRegex;
+               }
            }
-           return this.time;
-         },
        
-         /*
-          * Sets this Calendar's current time from the given long value.
-          * @param time the new time in UTC milliseconds from the epoch.
-          */
-         setTime: function setTime(time) {
-           this.time = time;
-           this.fieldsComputed = false;
-           this.complete();
-         },
+           var defaultWeekdaysMinRegex = matchWord;
+           function weekdaysMinRegex (isStrict) {
+               if (this._weekdaysParseExact) {
+                   if (!hasOwnProp(this, '_weekdaysRegex')) {
+                       computeWeekdaysParse.call(this);
+                   }
+                   if (isStrict) {
+                       return this._weekdaysMinStrictRegex;
+                   } else {
+                       return this._weekdaysMinRegex;
+                   }
+               } else {
+                   if (!hasOwnProp(this, '_weekdaysMinRegex')) {
+                       this._weekdaysMinRegex = defaultWeekdaysMinRegex;
+                   }
+                   return this._weekdaysMinStrictRegex && isStrict ?
+                       this._weekdaysMinStrictRegex : this._weekdaysMinRegex;
+               }
+           }
        
-         /*
-          * Returns the value of the given calendar field.
-          * @param field the given calendar field.
-          * @returns {Number} the value for the given calendar field.
-          */
-         get: function get(field) {
-           this.complete();
-           return this.fields[field];
-         },
        
-         /*
-          * Returns the year of the given calendar field.
-          * @method getYear
-          * @returns {Number} the year for the given calendar field.
-          */
+           function computeWeekdaysParse () {
+               function cmpLenRev(a, b) {
+                   return b.length - a.length;
+               }
        
-         /*
-          * Returns the month of the given calendar field.
-          * @method getMonth
-          * @returns {Number} the month for the given calendar field.
-          */
+               var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [],
+                   i, mom, minp, shortp, longp;
+               for (i = 0; i < 7; i++) {
+                   // make the regex if we don't have it already
+                   mom = create_utc__createUTC([2000, 1]).day(i);
+                   minp = this.weekdaysMin(mom, '');
+                   shortp = this.weekdaysShort(mom, '');
+                   longp = this.weekdays(mom, '');
+                   minPieces.push(minp);
+                   shortPieces.push(shortp);
+                   longPieces.push(longp);
+                   mixedPieces.push(minp);
+                   mixedPieces.push(shortp);
+                   mixedPieces.push(longp);
+               }
+               // Sorting makes sure if one weekday (or abbr) is a prefix of another it
+               // will match the longer piece.
+               minPieces.sort(cmpLenRev);
+               shortPieces.sort(cmpLenRev);
+               longPieces.sort(cmpLenRev);
+               mixedPieces.sort(cmpLenRev);
+               for (i = 0; i < 7; i++) {
+                   shortPieces[i] = regexEscape(shortPieces[i]);
+                   longPieces[i] = regexEscape(longPieces[i]);
+                   mixedPieces[i] = regexEscape(mixedPieces[i]);
+               }
        
-         /*
-          * Returns the day of month of the given calendar field.
-          * @method getDayOfMonth
-          * @returns {Number} the day of month for the given calendar field.
-          */
+               this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
+               this._weekdaysShortRegex = this._weekdaysRegex;
+               this._weekdaysMinRegex = this._weekdaysRegex;
        
-         /*
-          * Returns the hour of day of the given calendar field.
-          * @method getHourOfDay
-          * @returns {Number} the hour of day for the given calendar field.
-          */
+               this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');
+               this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');
+               this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i');
+           }
        
-         /*
-          * Returns the minute of the given calendar field.
-          * @method getMinute
-          * @returns {Number} the minute for the given calendar field.
-          */
+           // FORMATTING
        
-         /*
-          * Returns the second of the given calendar field.
-          * @method getSecond
-          * @returns {Number} the second for the given calendar field.
-          */
+           function hFormat() {
+               return this.hours() % 12 || 12;
+           }
        
-         /*
-          * Returns the millisecond of the given calendar field.
-          * @method getMilliSecond
-          * @returns {Number} the millisecond for the given calendar field.
-          */
+           function kFormat() {
+               return this.hours() || 24;
+           }
        
-         /*
-          * Returns the week of year of the given calendar field.
-          * @method getWeekOfYear
-          * @returns {Number} the week of year for the given calendar field.
-          */
+           addFormatToken('H', ['HH', 2], 0, 'hour');
+           addFormatToken('h', ['hh', 2], 0, hFormat);
+           addFormatToken('k', ['kk', 2], 0, kFormat);
        
-         /*
-          * Returns the week of month of the given calendar field.
-          * @method getWeekOfMonth
-          * @returns {Number} the week of month for the given calendar field.
-          */
+           addFormatToken('hmm', 0, 0, function () {
+               return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);
+           });
        
-         /*
-          * Returns the day of year of the given calendar field.
-          * @method getDayOfYear
-          * @returns {Number} the day of year for the given calendar field.
-          */
+           addFormatToken('hmmss', 0, 0, function () {
+               return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) +
+                   zeroFill(this.seconds(), 2);
+           });
        
-         /*
-          * Returns the day of week of the given calendar field.
-          * @method getDayOfWeek
-          * @returns {Number} the day of week for the given calendar field.
-          */
+           addFormatToken('Hmm', 0, 0, function () {
+               return '' + this.hours() + zeroFill(this.minutes(), 2);
+           });
        
-         /*
-          * Returns the day of week in month of the given calendar field.
-          * @method getDayOfWeekInMonth
-          * @returns {Number} the day of week in month for the given calendar field.
-          */
+           addFormatToken('Hmmss', 0, 0, function () {
+               return '' + this.hours() + zeroFill(this.minutes(), 2) +
+                   zeroFill(this.seconds(), 2);
+           });
        
-         /*
-          * Sets the given calendar field to the given value.
-          * @param field the given calendar field.
-          * @param v the value to be set for the given calendar field.
-          */
-         set: function set(field, v) {
-           var len = arguments.length;
-           if (len === 2) {
-             this.fields[field] = v;
-           } else if (len < MILLISECONDS + 1) {
-             for (var i = 0; i < len; i++) {
-               this.fields[YEAR + i] = arguments[i];
-             }
-           } else {
-             throw new Error('illegal arguments for GregorianCalendar set');
+           function meridiem (token, lowercase) {
+               addFormatToken(token, 0, 0, function () {
+                   return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);
+               });
            }
-           this.time = undefined;
-         },
-       
-         /*
-          * Set the year of the given calendar field.
-          * @method setYear
-          */
-       
-         /*
-          * Set the month of the given calendar field.
-          * @method setMonth
-          */
        
-         /*
-          * Set the day of month of the given calendar field.
-          * @method setDayOfMonth
-          */
+           meridiem('a', true);
+           meridiem('A', false);
        
-         /*
-          * Set the hour of day of the given calendar field.
-          * @method setHourOfDay
-          */
+           // ALIASES
        
-         /*
-          * Set the minute of the given calendar field.
-          * @method setMinute
-          */
+           addUnitAlias('hour', 'h');
        
-         /*
-          * Set the second of the given calendar field.
-          * @method setSecond
-          */
+           // PRIORITY
+           addUnitPriority('hour', 13);
        
-         /*
-          * Set the millisecond of the given calendar field.
-          * @method setMilliSecond
-          */
+           // PARSING
        
-         /*
-          * Set the week of year of the given calendar field.
-          * @method setWeekOfYear
-          */
+           function matchMeridiem (isStrict, locale) {
+               return locale._meridiemParse;
+           }
        
-         /*
-          * Set the week of month of the given calendar field.
-          * @method setWeekOfMonth
-          */
+           addRegexToken('a',  matchMeridiem);
+           addRegexToken('A',  matchMeridiem);
+           addRegexToken('H',  match1to2);
+           addRegexToken('h',  match1to2);
+           addRegexToken('HH', match1to2, match2);
+           addRegexToken('hh', match1to2, match2);
        
-         /*
-          * Set the day of year of the given calendar field.
-          * @method setDayOfYear
-          */
+           addRegexToken('hmm', match3to4);
+           addRegexToken('hmmss', match5to6);
+           addRegexToken('Hmm', match3to4);
+           addRegexToken('Hmmss', match5to6);
        
-         /*
-          * Set the day of week of the given calendar field.
-          * @method setDayOfWeek
-          */
+           addParseToken(['H', 'HH'], HOUR);
+           addParseToken(['a', 'A'], function (input, array, config) {
+               config._isPm = config._locale.isPM(input);
+               config._meridiem = input;
+           });
+           addParseToken(['h', 'hh'], function (input, array, config) {
+               array[HOUR] = toInt(input);
+               getParsingFlags(config).bigHour = true;
+           });
+           addParseToken('hmm', function (input, array, config) {
+               var pos = input.length - 2;
+               array[HOUR] = toInt(input.substr(0, pos));
+               array[MINUTE] = toInt(input.substr(pos));
+               getParsingFlags(config).bigHour = true;
+           });
+           addParseToken('hmmss', function (input, array, config) {
+               var pos1 = input.length - 4;
+               var pos2 = input.length - 2;
+               array[HOUR] = toInt(input.substr(0, pos1));
+               array[MINUTE] = toInt(input.substr(pos1, 2));
+               array[SECOND] = toInt(input.substr(pos2));
+               getParsingFlags(config).bigHour = true;
+           });
+           addParseToken('Hmm', function (input, array, config) {
+               var pos = input.length - 2;
+               array[HOUR] = toInt(input.substr(0, pos));
+               array[MINUTE] = toInt(input.substr(pos));
+           });
+           addParseToken('Hmmss', function (input, array, config) {
+               var pos1 = input.length - 4;
+               var pos2 = input.length - 2;
+               array[HOUR] = toInt(input.substr(0, pos1));
+               array[MINUTE] = toInt(input.substr(pos1, 2));
+               array[SECOND] = toInt(input.substr(pos2));
+           });
        
-         /*
-          * Set the day of week in month of the given calendar field.
-          * @method setDayOfWeekInMonth
-          */
+           // LOCALES
        
-         /*
-          * add for specified field based on two rules:
-          *
-          *  - Add rule 1. The value of field after the call minus the value of field before the
-          *  call is amount, modulo any overflow that has occurred in field
-          *  Overflow occurs when a field value exceeds its range and,
-          *  as a result, the next larger field is incremented or
-          *  decremented and the field value is adjusted back into its range.
-          *
-          *  - Add rule 2. If a smaller field is expected to be invariant,
-          *  but it is impossible for it to be equal to its
-          *  prior value because of changes in its minimum or maximum after
-          *  field is changed, then its value is adjusted to be as close
-          *  as possible to its expected value. A smaller field represents a
-          *  smaller unit of time. HOUR_OF_DAY is a smaller field than
-          *  DAY_OF_MONTH. No adjustment is made to smaller fields
-          *  that are not expected to be invariant. The calendar system
-          *  determines what fields are expected to be invariant.
-          *
-          *
-          *      @example
-          *      use('date/gregorian',function(S, GregorianCalendar){
-          *          const d = new GregorianCalendar();
-          *          d.set(2012, GregorianCalendar.JANUARY, 31);
-          *          d.add(Gregorian.MONTH,1);
-          *          // 2012-2-29
-          *          document.writeln('<p>'+d.getYear()+'-'+d.getMonth()+'-'+d.getDayOfWeek())
-          *          d.add(Gregorian.MONTH,12);
-          *          // 2013-2-28
-          *          document.writeln('<p>'+d.getYear()+'-'+d.getMonth()+'-'+d.getDayOfWeek())
-          *      });
-          *
-          * @param field the calendar field.
-          * @param {Number} amount he amount of date or time to be added to the field.
-          */
-         add: function add(field, a) {
-           if (!a) {
-             return;
-           }
-           var amount = a;
-           var self = this;
-           var fields = self.fields;
-           // computer and retrieve original value
-           var value = self.get(field);
-           if (field === YEAR) {
-             value += amount;
-             self.set(YEAR, value);
-             adjustDayOfMonth(self);
-           } else if (field === MONTH) {
-             value += amount;
-             var yearAmount = floorDivide(value / 12);
-             value = mod(value, 12);
-             if (yearAmount) {
-               self.set(YEAR, fields[YEAR] + yearAmount);
-             }
-             self.set(MONTH, value);
-             adjustDayOfMonth(self);
-           } else {
-             switch (field) {
-               case HOUR_OF_DAY:
-                 amount *= ONE_HOUR;
-                 break;
-               case MINUTE:
-                 amount *= ONE_MINUTE;
-                 break;
-               case SECONDS:
-                 amount *= ONE_SECOND;
-                 break;
-               case MILLISECONDS:
-                 break;
-               case WEEK_OF_MONTH:
-               case WEEK_OF_YEAR:
-               case DAY_OF_WEEK_IN_MONTH:
-                 amount *= ONE_WEEK;
-                 break;
-               case DAY_OF_WEEK:
-               case DAY_OF_YEAR:
-               case DAY_OF_MONTH:
-                 amount *= ONE_DAY;
-                 break;
-               default:
-                 throw new Error('illegal field for add');
-             }
-             self.setTime(self.time + amount);
+           function localeIsPM (input) {
+               // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays
+               // Using charAt should be more compatible.
+               return ((input + '').toLowerCase().charAt(0) === 'p');
            }
-         },
        
-         /*
-          * add the year of the given calendar field.
-          * @method addYear
-          * @param {Number} amount the signed amount to add to field.
-          */
+           var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i;
+           function localeMeridiem (hours, minutes, isLower) {
+               if (hours > 11) {
+                   return isLower ? 'pm' : 'PM';
+               } else {
+                   return isLower ? 'am' : 'AM';
+               }
+           }
        
-         /*
-          * add the month of the given calendar field.
-          * @method addMonth
-          * @param {Number} amount the signed amount to add to field.
-          */
        
-         /*
-          * add the day of month of the given calendar field.
-          * @method addDayOfMonth
-          * @param {Number} amount the signed amount to add to field.
-          */
+           // MOMENTS
        
-         /*
-          * add the hour of day of the given calendar field.
-          * @method addHourOfDay
-          * @param {Number} amount the signed amount to add to field.
-          */
+           // Setting the hour should keep the time, because the user explicitly
+           // specified which hour he wants. So trying to maintain the same hour (in
+           // a new timezone) makes sense. Adding/subtracting hours does not follow
+           // this rule.
+           var getSetHour = makeGetSet('Hours', true);
        
-         /*
-          * add the minute of the given calendar field.
-          * @method addMinute
-          * @param {Number} amount the signed amount to add to field.
-          */
+           var baseConfig = {
+               calendar: defaultCalendar,
+               longDateFormat: defaultLongDateFormat,
+               invalidDate: defaultInvalidDate,
+               ordinal: defaultOrdinal,
+               ordinalParse: defaultOrdinalParse,
+               relativeTime: defaultRelativeTime,
        
-         /*
-          * add the second of the given calendar field.
-          * @method addSecond
-          * @param {Number} amount the signed amount to add to field.
-          */
+               months: defaultLocaleMonths,
+               monthsShort: defaultLocaleMonthsShort,
        
-         /*
-          * add the millisecond of the given calendar field.
-          * @method addMilliSecond
-          * @param {Number} amount the signed amount to add to field.
-          */
+               week: defaultLocaleWeek,
        
-         /*
-          * add the week of year of the given calendar field.
-          * @method addWeekOfYear
-          * @param {Number} amount the signed amount to add to field.
-          */
+               weekdays: defaultLocaleWeekdays,
+               weekdaysMin: defaultLocaleWeekdaysMin,
+               weekdaysShort: defaultLocaleWeekdaysShort,
        
-         /*
-          * add the week of month of the given calendar field.
-          * @method addWeekOfMonth
-          * @param {Number} amount the signed amount to add to field.
-          */
+               meridiemParse: defaultLocaleMeridiemParse
+           };
        
-         /*
-          * add the day of year of the given calendar field.
-          * @method addDayOfYear
-          * @param {Number} amount the signed amount to add to field.
-          */
+           // internal storage for locale config files
+           var locales = {};
+           var globalLocale;
+       
+           function normalizeLocale(key) {
+               return key ? key.toLowerCase().replace('_', '-') : key;
+           }
+       
+           // pick the locale from the array
+           // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each
+           // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root
+           function chooseLocale(names) {
+               var i = 0, j, next, locale, split;
+       
+               while (i < names.length) {
+                   split = normalizeLocale(names[i]).split('-');
+                   j = split.length;
+                   next = normalizeLocale(names[i + 1]);
+                   next = next ? next.split('-') : null;
+                   while (j > 0) {
+                       locale = loadLocale(split.slice(0, j).join('-'));
+                       if (locale) {
+                           return locale;
+                       }
+                       if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) {
+                           //the next array item is better than a shallower substring of this one
+                           break;
+                       }
+                       j--;
+                   }
+                   i++;
+               }
+               return null;
+           }
        
-         /*
-          * add the day of week of the given calendar field.
-          * @method addDayOfWeek
-          * @param {Number} amount the signed amount to add to field.
-          */
+           function loadLocale(name) {
+               var oldLocale = null;
+               // TODO: Find a better way to register and load all the locales in Node
+               if (!locales[name] && (typeof module !== 'undefined') &&
+                       module && module.exports) {
+                   try {
+                       oldLocale = globalLocale._abbr;
+                       require('./locale/' + name);
+                       // because defineLocale currently also sets the global locale, we
+                       // want to undo that for lazy loaded locales
+                       locale_locales__getSetGlobalLocale(oldLocale);
+                   } catch (e) { }
+               }
+               return locales[name];
+           }
        
-         /*
-          * add the day of week in month of the given calendar field.
-          * @method addDayOfWeekInMonth
-          * @param {Number} amount the signed amount to add to field.
-          */
+           // This function will load locale and then set the global locale.  If
+           // no arguments are passed in, it will simply return the current global
+           // locale key.
+           function locale_locales__getSetGlobalLocale (key, values) {
+               var data;
+               if (key) {
+                   if (isUndefined(values)) {
+                       data = locale_locales__getLocale(key);
+                   }
+                   else {
+                       data = defineLocale(key, values);
+                   }
        
-         /*
-          * Get rolled value for the field
-          * @protected
-          */
-         getRolledValue: function getRolledValue(value, a, min, max) {
-           var amount = a;
-           var diff = value - min;
-           var range = max - min + 1;
-           amount %= range;
-           return min + (diff + amount + range) % range;
-         },
+                   if (data) {
+                       // moment.duration._locale = moment._locale = data;
+                       globalLocale = data;
+                   }
+               }
        
-         /*
-          * Adds a signed amount to the specified calendar field without changing larger fields.
-          * A negative roll amount means to subtract from field without changing
-          * larger fields. If the specified amount is 0, this method performs nothing.
-          *
-          *
-          *
-          *      @example
-          *      const d = new GregorianCalendar();
-          *      d.set(1999, GregorianCalendar.AUGUST, 31);
-          *      // 1999-4-30
-          *      // Tuesday June 1, 1999
-          *      d.set(1999, GregorianCalendar.JUNE, 1);
-          *      d.add(Gregorian.WEEK_OF_MONTH,-1); // === d.add(Gregorian.WEEK_OF_MONTH,
-          *      d.get(Gregorian.WEEK_OF_MONTH));
-          *      // 1999-06-29
-          *
-          *
-          * @param field the calendar field.
-          * @param {Number} amount the signed amount to add to field.
-          */
-         roll: function roll(field, amount) {
-           if (!amount) {
-             return;
-           }
-           var self = this;
-           // computer and retrieve original value
-           var value = self.get(field);
-           var min = self.getActualMinimum(field);
-           var max = self.getActualMaximum(field);
-           value = self.getRolledValue(value, amount, min, max);
+               return globalLocale._abbr;
+           }
+       
+           function defineLocale (name, config) {
+               if (config !== null) {
+                   var parentConfig = baseConfig;
+                   config.abbr = name;
+                   if (locales[name] != null) {
+                       deprecateSimple('defineLocaleOverride',
+                               'use moment.updateLocale(localeName, config) to change ' +
+                               'an existing locale. moment.defineLocale(localeName, ' +
+                               'config) should only be used for creating a new locale ' +
+                               'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.');
+                       parentConfig = locales[name]._config;
+                   } else if (config.parentLocale != null) {
+                       if (locales[config.parentLocale] != null) {
+                           parentConfig = locales[config.parentLocale]._config;
+                       } else {
+                           // treat as if there is no base config
+                           deprecateSimple('parentLocaleUndefined',
+                                   'specified parentLocale is not defined yet. See http://momentjs.com/guides/#/warnings/parent-locale/');
+                       }
+                   }
+                   locales[name] = new Locale(mergeConfigs(parentConfig, config));
        
-           self.set(field, value);
+                   // backwards compat for now: also set the locale
+                   locale_locales__getSetGlobalLocale(name);
        
-           // consider compute time priority
-           switch (field) {
-             case MONTH:
-               adjustDayOfMonth(self);
-               break;
-             default:
-               // other fields are set already when get
-               self.updateFieldsBySet(field);
-               break;
+                   return locales[name];
+               } else {
+                   // useful for testing
+                   delete locales[name];
+                   return null;
+               }
            }
-         },
        
-         /*
-          * keep field stable.
-          *
-          * 2015-09-29 setMonth 2 vs rollSetMonth 2
-          *
-          */
-         rollSet: function rollSet(field, v) {
-           this.set(field, v);
-           switch (field) {
-             case MONTH:
-               adjustDayOfMonth(this);
-               break;
-             default:
-               // other fields are set already when get
-               this.updateFieldsBySet(field);
-               break;
-           }
-         },
+           function updateLocale(name, config) {
+               if (config != null) {
+                   var locale, parentConfig = baseConfig;
+                   // MERGE
+                   if (locales[name] != null) {
+                       parentConfig = locales[name]._config;
+                   }
+                   config = mergeConfigs(parentConfig, config);
+                   locale = new Locale(config);
+                   locale.parentLocale = locales[name];
+                   locales[name] = locale;
        
-         /*
-          * roll the year of the given calendar field.
-          * @method rollYear
-          * @param {Number} amount the signed amount to add to field.
-          */
+                   // backwards compat for now: also set the locale
+                   locale_locales__getSetGlobalLocale(name);
+               } else {
+                   // pass null for config to unupdate, useful for tests
+                   if (locales[name] != null) {
+                       if (locales[name].parentLocale != null) {
+                           locales[name] = locales[name].parentLocale;
+                       } else if (locales[name] != null) {
+                           delete locales[name];
+                       }
+                   }
+               }
+               return locales[name];
+           }
        
-         /*
-          * roll the month of the given calendar field.
-          * @param {Number} amount the signed amount to add to field.
-          * @method rollMonth
-          */
+           // returns locale data
+           function locale_locales__getLocale (key) {
+               var locale;
        
-         /*
-          * roll the day of month of the given calendar field.
-          * @method rollDayOfMonth
-          * @param {Number} amount the signed amount to add to field.
-          */
+               if (key && key._locale && key._locale._abbr) {
+                   key = key._locale._abbr;
+               }
        
-         /*
-          * roll the hour of day of the given calendar field.
-          * @method rollHourOfDay
-          * @param {Number} amount the signed amount to add to field.
-          */
+               if (!key) {
+                   return globalLocale;
+               }
        
-         /*
-          * roll the minute of the given calendar field.
-          * @method rollMinute
-          * @param {Number} amount the signed amount to add to field.
-          */
+               if (!isArray(key)) {
+                   //short-circuit everything else
+                   locale = loadLocale(key);
+                   if (locale) {
+                       return locale;
+                   }
+                   key = [key];
+               }
        
-         /*
-          * roll the second of the given calendar field.
-          * @method rollSecond
-          * @param {Number} amount the signed amount to add to field.
-          */
+               return chooseLocale(key);
+           }
        
-         /*
-          * roll the millisecond of the given calendar field.
-          * @method rollMilliSecond
-          * @param {Number} amount the signed amount to add to field.
-          */
+           function locale_locales__listLocales() {
+               return keys(locales);
+           }
        
-         /*
-          * roll the week of year of the given calendar field.
-          * @method rollWeekOfYear
-          * @param {Number} amount the signed amount to add to field.
-          */
+           function checkOverflow (m) {
+               var overflow;
+               var a = m._a;
        
-         /*
-          * roll the week of month of the given calendar field.
-          * @method rollWeekOfMonth
-          * @param {Number} amount the signed amount to add to field.
-          */
+               if (a && getParsingFlags(m).overflow === -2) {
+                   overflow =
+                       a[MONTH]       < 0 || a[MONTH]       > 11  ? MONTH :
+                       a[DATE]        < 1 || a[DATE]        > daysInMonth(a[YEAR], a[MONTH]) ? DATE :
+                       a[HOUR]        < 0 || a[HOUR]        > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR :
+                       a[MINUTE]      < 0 || a[MINUTE]      > 59  ? MINUTE :
+                       a[SECOND]      < 0 || a[SECOND]      > 59  ? SECOND :
+                       a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND :
+                       -1;
        
-         /*
-          * roll the day of year of the given calendar field.
-          * @method rollDayOfYear
-          * @param {Number} amount the signed amount to add to field.
-          */
+                   if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {
+                       overflow = DATE;
+                   }
+                   if (getParsingFlags(m)._overflowWeeks && overflow === -1) {
+                       overflow = WEEK;
+                   }
+                   if (getParsingFlags(m)._overflowWeekday && overflow === -1) {
+                       overflow = WEEKDAY;
+                   }
        
-         /*
-          * roll the day of week of the given calendar field.
-          * @method rollDayOfWeek
-          * @param {Number} amount the signed amount to add to field.
-          */
+                   getParsingFlags(m).overflow = overflow;
+               }
        
-         /*
-          * remove other priority fields when call getFixedDate
-          * precondition: other fields are all set or computed
-          * @protected
-          */
-         updateFieldsBySet: function updateFieldsBySet(field) {
-           var fields = this.fields;
-           switch (field) {
-             case WEEK_OF_MONTH:
-               fields[DAY_OF_MONTH] = undefined;
-               break;
-             case DAY_OF_YEAR:
-               fields[MONTH] = undefined;
-               break;
-             case DAY_OF_WEEK:
-               fields[DAY_OF_MONTH] = undefined;
-               break;
-             case WEEK_OF_YEAR:
-               fields[DAY_OF_YEAR] = undefined;
-               fields[MONTH] = undefined;
-               break;
-             default:
-               break;
-           }
-         },
+               return m;
+           }
+       
+           // iso 8601 regex
+           // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)
+           var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/;
+           var basicIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/;
+       
+           var tzRegex = /Z|[+-]\d\d(?::?\d\d)?/;
+       
+           var isoDates = [
+               ['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/],
+               ['YYYY-MM-DD', /\d{4}-\d\d-\d\d/],
+               ['GGGG-[W]WW-E', /\d{4}-W\d\d-\d/],
+               ['GGGG-[W]WW', /\d{4}-W\d\d/, false],
+               ['YYYY-DDD', /\d{4}-\d{3}/],
+               ['YYYY-MM', /\d{4}-\d\d/, false],
+               ['YYYYYYMMDD', /[+-]\d{10}/],
+               ['YYYYMMDD', /\d{8}/],
+               // YYYYMM is NOT allowed by the standard
+               ['GGGG[W]WWE', /\d{4}W\d{3}/],
+               ['GGGG[W]WW', /\d{4}W\d{2}/, false],
+               ['YYYYDDD', /\d{7}/]
+           ];
+       
+           // iso time formats and regexes
+           var isoTimes = [
+               ['HH:mm:ss.SSSS', /\d\d:\d\d:\d\d\.\d+/],
+               ['HH:mm:ss,SSSS', /\d\d:\d\d:\d\d,\d+/],
+               ['HH:mm:ss', /\d\d:\d\d:\d\d/],
+               ['HH:mm', /\d\d:\d\d/],
+               ['HHmmss.SSSS', /\d\d\d\d\d\d\.\d+/],
+               ['HHmmss,SSSS', /\d\d\d\d\d\d,\d+/],
+               ['HHmmss', /\d\d\d\d\d\d/],
+               ['HHmm', /\d\d\d\d/],
+               ['HH', /\d\d/]
+           ];
+       
+           var aspNetJsonRegex = /^\/?Date\((\-?\d+)/i;
+       
+           // date from iso format
+           function configFromISO(config) {
+               var i, l,
+                   string = config._i,
+                   match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),
+                   allowTime, dateFormat, timeFormat, tzFormat;
        
-         /*
-          * get current date instance's timezone offset
-          * @returns {Number}
-          */
-         getTimezoneOffset: function getTimezoneOffset() {
-           return this.timezoneOffset;
-         },
+               if (match) {
+                   getParsingFlags(config).iso = true;
        
-         /*
-          * set current date instance's timezone offset
-          */
-         setTimezoneOffset: function setTimezoneOffset(timezoneOffset) {
-           if (this.timezoneOffset !== timezoneOffset) {
-             this.fieldsComputed = undefined;
-             this.timezoneOffset = timezoneOffset;
+                   for (i = 0, l = isoDates.length; i < l; i++) {
+                       if (isoDates[i][1].exec(match[1])) {
+                           dateFormat = isoDates[i][0];
+                           allowTime = isoDates[i][2] !== false;
+                           break;
+                       }
+                   }
+                   if (dateFormat == null) {
+                       config._isValid = false;
+                       return;
+                   }
+                   if (match[3]) {
+                       for (i = 0, l = isoTimes.length; i < l; i++) {
+                           if (isoTimes[i][1].exec(match[3])) {
+                               // match[2] should be 'T' or space
+                               timeFormat = (match[2] || ' ') + isoTimes[i][0];
+                               break;
+                           }
+                       }
+                       if (timeFormat == null) {
+                           config._isValid = false;
+                           return;
+                       }
+                   }
+                   if (!allowTime && timeFormat != null) {
+                       config._isValid = false;
+                       return;
+                   }
+                   if (match[4]) {
+                       if (tzRegex.exec(match[4])) {
+                           tzFormat = 'Z';
+                       } else {
+                           config._isValid = false;
+                           return;
+                       }
+                   }
+                   config._f = dateFormat + (timeFormat || '') + (tzFormat || '');
+                   configFromStringAndFormat(config);
+               } else {
+                   config._isValid = false;
+               }
            }
-         },
        
-         /*
-          * set first day of week for current date instance
-          */
-         setFirstDayOfWeek: function setFirstDayOfWeek(firstDayOfWeek) {
-           if (this.firstDayOfWeek !== firstDayOfWeek) {
-             this.firstDayOfWeek = firstDayOfWeek;
-             this.fieldsComputed = false;
-           }
-         },
+           // date from iso format or fallback
+           function configFromString(config) {
+               var matched = aspNetJsonRegex.exec(config._i);
        
-         /*
-          * Gets what the first day of the week is; e.g., SUNDAY in the U.S., MONDAY in France.
-          * @returns {Number} the first day of the week.
-          */
-         getFirstDayOfWeek: function getFirstDayOfWeek() {
-           return this.firstDayOfWeek;
-         },
+               if (matched !== null) {
+                   config._d = new Date(+matched[1]);
+                   return;
+               }
        
-         /*
-          * Sets what the minimal days required in the first week of the year are; For example,
-          * if the first week is defined as one that contains the first day of the first month of a year,
-          * call this method with value 1.
-          * If it must be a full week, use value 7.
-          * @param minimalDaysInFirstWeek the given minimal days required in the first week of the year.
-          */
-         setMinimalDaysInFirstWeek: function setMinimalDaysInFirstWeek(minimalDaysInFirstWeek) {
-           if (this.minimalDaysInFirstWeek !== minimalDaysInFirstWeek) {
-             this.minimalDaysInFirstWeek = minimalDaysInFirstWeek;
-             this.fieldsComputed = false;
+               configFromISO(config);
+               if (config._isValid === false) {
+                   delete config._isValid;
+                   utils_hooks__hooks.createFromInputFallback(config);
+               }
            }
-         },
        
-         /*
-          * Gets what the minimal days required in the first week of the year are; e.g.,
-          * if the first week is defined as one that contains the first day of the first month of a year,
-          * this method returns 1.
-          * If the minimal days required must be a full week, this method returns 7.
-          * @returns {Number} the minimal days required in the first week of the year.
-          */
-         getMinimalDaysInFirstWeek: function getMinimalDaysInFirstWeek() {
-           return this.minimalDaysInFirstWeek;
-         },
+           utils_hooks__hooks.createFromInputFallback = deprecate(
+               'moment construction falls back to js Date. This is ' +
+               'discouraged and will be removed in upcoming major ' +
+               'release. Please refer to ' +
+               'http://momentjs.com/guides/#/warnings/js-date/ for more info.',
+               function (config) {
+                   config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));
+               }
+           );
        
-         /*
-          * Returns the number of weeks in the week year
-          * represented by this GregorianCalendar.
-          *
-          * For example, if this GregorianCalendar's date is
-          * December 31, 2008 with the ISO
-          * 8601 compatible setting, this method will return 53 for the
-          * period: December 29, 2008 to January 3, 2010
-          * while getActualMaximum(WEEK_OF_YEAR) will return
-          * 52 for the period: December 31, 2007 to December 28, 2008.
-          *
-          * @return {Number} the number of weeks in the week year.
-          */
-         getWeeksInWeekYear: function getWeeksInWeekYear() {
-           var weekYear = this.getWeekYear();
-           if (weekYear === this.get(YEAR)) {
-             return this.getActualMaximum(WEEK_OF_YEAR);
+           // Pick the first defined of two or three arguments.
+           function defaults(a, b, c) {
+               if (a != null) {
+                   return a;
+               }
+               if (b != null) {
+                   return b;
+               }
+               return c;
            }
-           // Use the 2nd week for calculating the max of WEEK_OF_YEAR
-           var gc = this.clone();
-           gc.clear();
-           gc.setWeekDate(weekYear, 2, this.get(DAY_OF_WEEK));
-           return gc.getActualMaximum(WEEK_OF_YEAR);
-         },
        
-         /*
-          * Returns the week year represented by this GregorianCalendar.
-          * The dates in the weeks between 1 and the
-          * maximum week number of the week year have the same week year value
-          * that may be one year before or after the calendar year value.
-          *
-          * @return {Number} the week year represented by this GregorianCalendar.
-          */
-         getWeekYear: function getWeekYear() {
-           var year = this.get(YEAR); // implicitly  complete
-           var weekOfYear = this.get(WEEK_OF_YEAR);
-           var month = this.get(MONTH);
-           if (month === GregorianCalendar.JANUARY) {
-             if (weekOfYear >= 52) {
-               --year;
-             }
-           } else if (month === GregorianCalendar.DECEMBER) {
-             if (weekOfYear === 1) {
-               ++year;
-             }
-           }
-           return year;
-         },
-         /*
-          * Sets this GregorianCalendar to the date given by the date specifiers - weekYear,
-          * weekOfYear, and dayOfWeek. weekOfYear follows the WEEK_OF_YEAR numbering.
-          * The dayOfWeek value must be one of the DAY_OF_WEEK values: SUNDAY to SATURDAY.
-          *
-          * @param weekYear    the week year
-          * @param weekOfYear  the week number based on weekYear
-          * @param dayOfWeek   the day of week value
-          */
-         setWeekDate: function setWeekDate(weekYear, weekOfYear, dayOfWeek) {
-           if (dayOfWeek < GregorianCalendar.SUNDAY || dayOfWeek > GregorianCalendar.SATURDAY) {
-             throw new Error('invalid dayOfWeek: ' + dayOfWeek);
-           }
-           var fields = this.fields;
-           // To avoid changing the time of day fields by date
-           // calculations, use a clone with the GMT time zone.
-           var gc = this.clone();
-           gc.clear();
-           gc.setTimezoneOffset(0);
-           gc.set(YEAR, weekYear);
-           gc.set(WEEK_OF_YEAR, 1);
-           gc.set(DAY_OF_WEEK, this.getFirstDayOfWeek());
-           var days = dayOfWeek - this.getFirstDayOfWeek();
-           if (days < 0) {
-             days += 7;
-           }
-           days += 7 * (weekOfYear - 1);
-           if (days !== 0) {
-             gc.add(DAY_OF_YEAR, days);
-           } else {
-             gc.complete();
-           }
-           fields[YEAR] = gc.get(YEAR);
-           fields[MONTH] = gc.get(MONTH);
-           fields[DAY_OF_MONTH] = gc.get(DAY_OF_MONTH);
-           this.complete();
-         },
-         /*
-          * Creates and returns a copy of this object.
-          * @returns {Date.Gregorian}
-          */
-         clone: function clone() {
-           if (this.time === undefined) {
-             this.computeTime();
+           function currentDateArray(config) {
+               // hooks is actually the exported moment object
+               var nowValue = new Date(utils_hooks__hooks.now());
+               if (config._useUTC) {
+                   return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()];
+               }
+               return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];
            }
-           var cal = new GregorianCalendar(this.locale);
-           cal.setTimezoneOffset(cal.getTimezoneOffset());
-           cal.setFirstDayOfWeek(cal.getFirstDayOfWeek());
-           cal.setMinimalDaysInFirstWeek(cal.getMinimalDaysInFirstWeek());
-           cal.setTime(this.time);
-           return cal;
-         },
-       
-         /*
-          * Compares this GregorianCalendar to the specified Object.
-          * The result is true if and only if the argument is a GregorianCalendar object
-          * that represents the same time value (millisecond offset from the Epoch)
-          * under the same Calendar parameters and Gregorian change date as this object.
-          * @param {Date.Gregorian} obj the object to compare with.
-          * @returns {boolean} true if this object is equal to obj; false otherwise.
-          */
-         equals: function equals(obj) {
-           return this.getTime() === obj.getTime() && this.firstDayOfWeek === obj.firstDayOfWeek && this.timezoneOffset === obj.timezoneOffset && this.minimalDaysInFirstWeek === obj.minimalDaysInFirstWeek;
-         },
        
-         /*
-          * Sets all the calendar field values or specified field and the time value
-          * (millisecond offset from the Epoch) of this Calendar undefined.
-          * This means that isSet() will return false for all the calendar fields,
-          * and the date and time calculations will treat the fields as if they had never been set.
-          * @param [field] the calendar field to be cleared.
-          */
-         clear: function clear(field) {
-           if (field === undefined) {
-             this.field = [];
-           } else {
-             this.fields[field] = undefined;
-           }
-           this.time = undefined;
-           this.fieldsComputed = false;
-         }
-       };
+           // convert an array to a date.
+           // the array should mirror the parameters below
+           // note: all values past the year are optional and will default to the lowest possible value.
+           // [year, month, day , hour, minute, second, millisecond]
+           function configFromArray (config) {
+               var i, date, input = [], currentDate, yearToUse;
        
-       var GregorianCalendarProto = GregorianCalendar.prototype;
+               if (config._d) {
+                   return;
+               }
        
-       Utils.each(FIELDS, function (f, index) {
-         if (f) {
-           GregorianCalendarProto['get' + f] = function get() {
-             return this.get(index);
-           };
+               currentDate = currentDateArray(config);
        
-           GregorianCalendarProto['isSet' + f] = function isSet() {
-             return this.isSet(index);
-           };
+               //compute day of the year from weeks and weekdays
+               if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {
+                   dayOfYearFromWeekInfo(config);
+               }
        
-           GregorianCalendarProto['set' + f] = function set(v) {
-             return this.set(index, v);
-           };
+               //if the day of the year is set, figure out what it is
+               if (config._dayOfYear) {
+                   yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);
        
-           GregorianCalendarProto['add' + f] = function add(v) {
-             return this.add(index, v);
-           };
+                   if (config._dayOfYear > daysInYear(yearToUse)) {
+                       getParsingFlags(config)._overflowDayOfYear = true;
+                   }
        
-           GregorianCalendarProto['roll' + f] = function roll(v) {
-             return this.roll(index, v);
-           };
+                   date = createUTCDate(yearToUse, 0, config._dayOfYear);
+                   config._a[MONTH] = date.getUTCMonth();
+                   config._a[DATE] = date.getUTCDate();
+               }
        
-           GregorianCalendarProto['rollSet' + f] = function rollSet(v) {
-             return this.rollSet(index, v);
-           };
-         }
-       });
+               // Default to current date.
+               // * if no year, month, day of month are given, default to today
+               // * if day of month is given, default month and year
+               // * if month is given, default only year
+               // * if year is given, don't default anything
+               for (i = 0; i < 3 && config._a[i] == null; ++i) {
+                   config._a[i] = input[i] = currentDate[i];
+               }
        
-       module.exports = GregorianCalendar;
-       /*
-        http://docs.oracle.com/javase/7/docs/api/java/util/GregorianCalendar.html
+               // Zero out whatever was not defaulted, including time
+               for (; i < 7; i++) {
+                   config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i];
+               }
        
-        TODO
-        - day saving time
-        - i18n
-        - julian calendar
-        */
-
-/***/ },
-/* 162 */
-/***/ function(module, exports, __webpack_require__) {
-
-       /*
-        * utils for gregorian date
-        * @ignore
-        * @author yiminghe@gmail.com
-        */
+               // Check for 24:00:00.000
+               if (config._a[HOUR] === 24 &&
+                       config._a[MINUTE] === 0 &&
+                       config._a[SECOND] === 0 &&
+                       config._a[MILLISECOND] === 0) {
+                   config._nextDay = true;
+                   config._a[HOUR] = 0;
+               }
        
-       'use strict';
+               config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);
+               // Apply timezone offset from input. The actual utcOffset can be changed
+               // with parseZone.
+               if (config._tzm != null) {
+                   config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);
+               }
        
-       var Const = __webpack_require__(163);
-       var floor = Math.floor;
-       var ACCUMULATED_DAYS_IN_MONTH
-       //   1/1 2/1 3/1 4/1 5/1 6/1 7/1 8/1 9/1 10/1 11/1 12/1
-       = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];
+               if (config._nextDay) {
+                   config._a[HOUR] = 24;
+               }
+           }
        
-       var ACCUMULATED_DAYS_IN_MONTH_LEAP
-       //   1/1 2/1   3/1   4/1   5/1   6/1   7/1   8/1   9/1
-       // 10/1   11/1   12/1
-       = [0, 31, 59 + 1, 90 + 1, 120 + 1, 151 + 1, 181 + 1, 212 + 1, 243 + 1, 273 + 1, 304 + 1, 334 + 1];
+           function dayOfYearFromWeekInfo(config) {
+               var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow;
        
-       var DAYS_OF_YEAR = 365;
-       var DAYS_OF_4YEAR = 365 * 4 + 1;
-       var DAYS_OF_100YEAR = DAYS_OF_4YEAR * 25 - 1;
-       var DAYS_OF_400YEAR = DAYS_OF_100YEAR * 4 + 1;
-       var _exports = {};
+               w = config._w;
+               if (w.GG != null || w.W != null || w.E != null) {
+                   dow = 1;
+                   doy = 4;
        
-       function getDayOfYear(year, month, dayOfMonth) {
-         return dayOfMonth + (_exports.isLeapYear(year) ? ACCUMULATED_DAYS_IN_MONTH_LEAP[month] : ACCUMULATED_DAYS_IN_MONTH[month]);
-       }
+                   // TODO: We need to take the current isoWeekYear, but that depends on
+                   // how we interpret now (local, utc, fixed offset). So create
+                   // a now version of current config (take local/utc/offset flags, and
+                   // create now).
+                   weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(local__createLocal(), 1, 4).year);
+                   week = defaults(w.W, 1);
+                   weekday = defaults(w.E, 1);
+                   if (weekday < 1 || weekday > 7) {
+                       weekdayOverflow = true;
+                   }
+               } else {
+                   dow = config._locale._week.dow;
+                   doy = config._locale._week.doy;
        
-       function getDayOfWeekFromFixedDate(fixedDate) {
-         // The fixed day 1 (January 1, 1 Gregorian) is Monday.
-         if (fixedDate >= 0) {
-           return fixedDate % 7;
-         }
-         return _exports.mod(fixedDate, 7);
-       }
+                   weekYear = defaults(w.gg, config._a[YEAR], weekOfYear(local__createLocal(), dow, doy).year);
+                   week = defaults(w.w, 1);
        
-       function getGregorianYearFromFixedDate(fixedDate) {
-         var d0 = undefined;
-         var d1 = undefined;
-         var d2 = undefined;
-         var d3 = undefined;
-         var n400 = undefined;
-         var n100 = undefined;
-         var n4 = undefined;
-         var n1 = undefined;
-         var year = undefined;
-         d0 = fixedDate - 1;
+                   if (w.d != null) {
+                       // weekday -- low day numbers are considered next week
+                       weekday = w.d;
+                       if (weekday < 0 || weekday > 6) {
+                           weekdayOverflow = true;
+                       }
+                   } else if (w.e != null) {
+                       // local weekday -- counting starts from begining of week
+                       weekday = w.e + dow;
+                       if (w.e < 0 || w.e > 6) {
+                           weekdayOverflow = true;
+                       }
+                   } else {
+                       // default to begining of week
+                       weekday = dow;
+                   }
+               }
+               if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {
+                   getParsingFlags(config)._overflowWeeks = true;
+               } else if (weekdayOverflow != null) {
+                   getParsingFlags(config)._overflowWeekday = true;
+               } else {
+                   temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);
+                   config._a[YEAR] = temp.year;
+                   config._dayOfYear = temp.dayOfYear;
+               }
+           }
        
-         n400 = floor(d0 / DAYS_OF_400YEAR);
-         d1 = _exports.mod(d0, DAYS_OF_400YEAR);
-         n100 = floor(d1 / DAYS_OF_100YEAR);
-         d2 = _exports.mod(d1, DAYS_OF_100YEAR);
-         n4 = floor(d2 / DAYS_OF_4YEAR);
-         d3 = _exports.mod(d2, DAYS_OF_4YEAR);
-         n1 = floor(d3 / DAYS_OF_YEAR);
+           // constant that refers to the ISO standard
+           utils_hooks__hooks.ISO_8601 = function () {};
        
-         year = 400 * n400 + 100 * n100 + 4 * n4 + n1;
+           // date from string and format string
+           function configFromStringAndFormat(config) {
+               // TODO: Move this to another part of the creation flow to prevent circular deps
+               if (config._f === utils_hooks__hooks.ISO_8601) {
+                   configFromISO(config);
+                   return;
+               }
        
-         // ?
-         if (!(n100 === 4 || n1 === 4)) {
-           ++year;
-         }
+               config._a = [];
+               getParsingFlags(config).empty = true;
+       
+               // This array is used to make a Date, either with `new Date` or `Date.UTC`
+               var string = '' + config._i,
+                   i, parsedInput, tokens, token, skipped,
+                   stringLength = string.length,
+                   totalParsedInputLength = 0;
+       
+               tokens = expandFormat(config._f, config._locale).match(formattingTokens) || [];
+       
+               for (i = 0; i < tokens.length; i++) {
+                   token = tokens[i];
+                   parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0];
+                   // console.log('token', token, 'parsedInput', parsedInput,
+                   //         'regex', getParseRegexForToken(token, config));
+                   if (parsedInput) {
+                       skipped = string.substr(0, string.indexOf(parsedInput));
+                       if (skipped.length > 0) {
+                           getParsingFlags(config).unusedInput.push(skipped);
+                       }
+                       string = string.slice(string.indexOf(parsedInput) + parsedInput.length);
+                       totalParsedInputLength += parsedInput.length;
+                   }
+                   // don't parse if it's not a known token
+                   if (formatTokenFunctions[token]) {
+                       if (parsedInput) {
+                           getParsingFlags(config).empty = false;
+                       }
+                       else {
+                           getParsingFlags(config).unusedTokens.push(token);
+                       }
+                       addTimeToArrayFromToken(token, parsedInput, config);
+                   }
+                   else if (config._strict && !parsedInput) {
+                       getParsingFlags(config).unusedTokens.push(token);
+                   }
+               }
        
-         return year;
-       }
+               // add remaining unparsed input length to the string
+               getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength;
+               if (string.length > 0) {
+                   getParsingFlags(config).unusedInput.push(string);
+               }
        
-       _exports = module.exports = {
-         each: function each(arr, fn) {
-           for (var i = 0, len = arr.length; i < len; i++) {
-             if (fn(arr[i], i, arr) === false) {
-               break;
-             }
-           }
-         },
+               // clear _12h flag if hour is <= 12
+               if (config._a[HOUR] <= 12 &&
+                   getParsingFlags(config).bigHour === true &&
+                   config._a[HOUR] > 0) {
+                   getParsingFlags(config).bigHour = undefined;
+               }
        
-         mix: function mix(t, s) {
-           for (var p in s) {
-             if (s.hasOwnProperty(p)) {
-               t[p] = s[p];
-             }
-           }
-         },
+               getParsingFlags(config).parsedDateParts = config._a.slice(0);
+               getParsingFlags(config).meridiem = config._meridiem;
+               // handle meridiem
+               config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem);
        
-         isLeapYear: function isLeapYear(year) {
-           if ((year & 3) !== 0) {
-             return false;
+               configFromArray(config);
+               checkOverflow(config);
            }
-           return year % 100 !== 0 || year % 400 === 0;
-         },
        
-         mod: function mod(x, y) {
-           // 负数时不是镜像关系
-           return x - y * floor(x / y);
-         },
-       
-         // month: 0 based
-         getFixedDate: function getFixedDate(year, month, dayOfMonth) {
-           var prevYear = year - 1;
-           // 考虑公元前
-           return DAYS_OF_YEAR * prevYear + floor(prevYear / 4) - floor(prevYear / 100) + floor(prevYear / 400) + getDayOfYear(year, month, dayOfMonth);
-         },
        
-         getGregorianDateFromFixedDate: function getGregorianDateFromFixedDate(fixedDate) {
-           var year = getGregorianYearFromFixedDate(fixedDate);
-           var jan1 = _exports.getFixedDate(year, Const.JANUARY, 1);
-           var isLeap = _exports.isLeapYear(year);
-           var ACCUMULATED_DAYS = isLeap ? ACCUMULATED_DAYS_IN_MONTH_LEAP : ACCUMULATED_DAYS_IN_MONTH;
-           var daysDiff = fixedDate - jan1;
-           var month = undefined;
+           function meridiemFixWrap (locale, hour, meridiem) {
+               var isPm;
        
-           for (var i = 0; i < ACCUMULATED_DAYS.length; i++) {
-             if (ACCUMULATED_DAYS[i] <= daysDiff) {
-               month = i;
-             } else {
-               break;
-             }
+               if (meridiem == null) {
+                   // nothing to do
+                   return hour;
+               }
+               if (locale.meridiemHour != null) {
+                   return locale.meridiemHour(hour, meridiem);
+               } else if (locale.isPM != null) {
+                   // Fallback
+                   isPm = locale.isPM(meridiem);
+                   if (isPm && hour < 12) {
+                       hour += 12;
+                   }
+                   if (!isPm && hour === 12) {
+                       hour = 0;
+                   }
+                   return hour;
+               } else {
+                   // this is not supposed to happen
+                   return hour;
+               }
            }
        
-           var dayOfMonth = fixedDate - jan1 - ACCUMULATED_DAYS[month] + 1;
-           var dayOfWeek = getDayOfWeekFromFixedDate(fixedDate);
+           // date from string and array of format strings
+           function configFromStringAndArray(config) {
+               var tempConfig,
+                   bestMoment,
        
-           return {
-             year: year,
-             month: month,
-             dayOfMonth: dayOfMonth,
-             dayOfWeek: dayOfWeek,
-             isLeap: isLeap
-           };
-         }
-       };
-
-/***/ },
-/* 163 */
-/***/ function(module, exports) {
-
-       /*
-        * @ignore
-        * const for gregorian date
-        * @author yiminghe@gmail.com
-        */
+                   scoreToBeat,
+                   i,
+                   currentScore;
        
-       "use strict";
+               if (config._f.length === 0) {
+                   getParsingFlags(config).invalidFormat = true;
+                   config._d = new Date(NaN);
+                   return;
+               }
        
-       module.exports = {
-         /*
-          * Enum indicating sunday
-          * @type Number
-          * @member Date.Gregorian
-          */
-         SUNDAY: 0,
-         /*
-          * Enum indicating monday
-          * @type Number
-          * @member Date.Gregorian
-          */
-         MONDAY: 1,
-         /*
-          * Enum indicating tuesday
-          * @type Number
-          * @member Date.Gregorian
-          */
-         TUESDAY: 2,
-         /*
-          * Enum indicating wednesday
-          * @type Number
-          * @member Date.Gregorian
-          */
-         WEDNESDAY: 3,
-         /*
-          * Enum indicating thursday
-          * @type Number
-          * @member Date.Gregorian
-          */
-         THURSDAY: 4,
-         /*
-          * Enum indicating friday
-          * @type Number
-          * @member Date.Gregorian
-          */
-         FRIDAY: 5,
-         /*
-          * Enum indicating saturday
-          * @type Number
-          * @member Date.Gregorian
-          */
-         SATURDAY: 6,
-         /*
-          * Enum indicating january
-          * @type Number
-          * @member Date.Gregorian
-          */
-         JANUARY: 0,
-         /*
-          * Enum indicating february
-          * @type Number
-          * @member Date.Gregorian
-          */
-         FEBRUARY: 1,
-         /*
-          * Enum indicating march
-          * @type Number
-          * @member Date.Gregorian
-          */
-         MARCH: 2,
-         /*
-          * Enum indicating april
-          * @type Number
-          * @member Date.Gregorian
-          */
-         APRIL: 3,
-         /*
-          * Enum indicating may
-          * @type Number
-          * @member Date.Gregorian
-          */
-         MAY: 4,
-         /*
-          * Enum indicating june
-          * @type Number
-          * @member Date.Gregorian
-          */
-         JUNE: 5,
-         /*
-          * Enum indicating july
-          * @type Number
-          * @member Date.Gregorian
-          */
-         JULY: 6,
-         /*
-          * Enum indicating august
-          * @type Number
-          * @member Date.Gregorian
-          */
-         AUGUST: 7,
-         /*
-          * Enum indicating september
-          * @type Number
-          * @member Date.Gregorian
-          */
-         SEPTEMBER: 8,
-         /*
-          * Enum indicating october
-          * @type Number
-          * @member Date.Gregorian
-          */
-         OCTOBER: 9,
-         /*
-          * Enum indicating november
-          * @type Number
-          * @member Date.Gregorian
-          */
-         NOVEMBER: 10,
-         /*
-          * Enum indicating december
-          * @type Number
-          * @member Date.Gregorian
-          */
-         DECEMBER: 11
-       };
-
-/***/ },
-/* 164 */
-/***/ function(module, exports) {
-
-       /*
-        * en-us locale
-        * @ignore
-        * @author yiminghe@gmail.com
-        */
-       "use strict";
+               for (i = 0; i < config._f.length; i++) {
+                   currentScore = 0;
+                   tempConfig = copyConfig({}, config);
+                   if (config._useUTC != null) {
+                       tempConfig._useUTC = config._useUTC;
+                   }
+                   tempConfig._f = config._f[i];
+                   configFromStringAndFormat(tempConfig);
        
-       module.exports = {
-         // in minutes
-         timezoneOffset: -8 * 60,
-         firstDayOfWeek: 0,
-         minimalDaysInFirstWeek: 1
-       };
-
-/***/ },
-/* 165 */
-/***/ function(module, exports, __webpack_require__) {
-
-       /**
-        * @ignore
-        * DateTimeFormat for
-        * Inspired by DateTimeFormat from JDK.
-        * @author yiminghe@gmail.com
-        */
+                   if (!valid__isValid(tempConfig)) {
+                       continue;
+                   }
        
-       'use strict';
+                   // if there is any input that was not parsed add a penalty for that format
+                   currentScore += getParsingFlags(tempConfig).charsLeftOver;
        
-       var GregorianCalendar = __webpack_require__(161);
-       var enUsLocale = __webpack_require__(166);
-       var MAX_VALUE = Number.MAX_VALUE;
-       var warning = __webpack_require__(167);
+                   //or tokens
+                   currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;
        
-       /**
-        * date or time style enum
-        * @enum {Number} Date.Formatter.Style
-        */
-       var DateTimeStyle = {
-         /**
-          * full style
-          */
-         FULL: 0,
-         /**
-          * long style
-          */
-         LONG: 1,
-         /**
-          * medium style
-          */
-         MEDIUM: 2,
-         /**
-          * short style
-          */
-         SHORT: 3
-       };
+                   getParsingFlags(tempConfig).score = currentScore;
        
-       /*
-        Letter    Date or Time Component    Presentation    Examples
-        G    Era designator    Text    AD
-        y    Year    Year    1996; 96
-        M    Month in year    Month    July; Jul; 07
-        w    Week in year    Number    27
-        W    Week in month    Number    2
-        D    Day in year    Number    189
-        d    Day in month    Number    10
-        F    Day of week in month    Number    2
-        E    Day in week    Text    Tuesday; Tue
-        a    Am/pm marker    Text    PM
-        H    Hour in day (0-23)    Number    0
-        k    Hour in day (1-24)    Number    24
-        K    Hour in am/pm (0-11)    Number    0
-        h    Hour in am/pm (1-12)    Number    12
-        m    Minute in hour    Number    30
-        s    Second in minute    Number    55
-        S    Millisecond    Number    978
-        x z    Time zone    General time zone    Pacific Standard Time; PST; GMT-08:00
-        Z    Time zone    RFC 822 time zone    -0800
-        */
-       
-       var patternChars = new Array(GregorianCalendar.DAY_OF_WEEK_IN_MONTH + 2).join('1');
-       var ERA = 0;
-       var calendarIndexMap = {};
-       
-       patternChars = patternChars.split('');
-       patternChars[ERA] = 'G';
-       patternChars[GregorianCalendar.YEAR] = 'y';
-       patternChars[GregorianCalendar.MONTH] = 'M';
-       patternChars[GregorianCalendar.DAY_OF_MONTH] = 'd';
-       patternChars[GregorianCalendar.HOUR_OF_DAY] = 'H';
-       patternChars[GregorianCalendar.MINUTES] = 'm';
-       patternChars[GregorianCalendar.SECONDS] = 's';
-       patternChars[GregorianCalendar.MILLISECONDS] = 'S';
-       patternChars[GregorianCalendar.WEEK_OF_YEAR] = 'w';
-       patternChars[GregorianCalendar.WEEK_OF_MONTH] = 'W';
-       patternChars[GregorianCalendar.DAY_OF_YEAR] = 'D';
-       patternChars[GregorianCalendar.DAY_OF_WEEK_IN_MONTH] = 'F';
-       
-       (function init() {
-         for (var index in patternChars) {
-           if (patternChars.hasOwnProperty(index)) {
-             calendarIndexMap[patternChars[index]] = index;
-           }
-         }
-       })();
-       
-       function mix(t, s) {
-         for (var p in s) {
-           if (s.hasOwnProperty(p)) {
-             t[p] = s[p];
-           }
-         }
-       }
-       
-       var SUBSTITUTE_REG = /\\?\{([^{}]+)\}/g;
-       var EMPTY = '';
-       
-       function substitute(str, o, regexp) {
-         if (typeof str !== 'string' || !o) {
-           return str;
-         }
+                   if (scoreToBeat == null || currentScore < scoreToBeat) {
+                       scoreToBeat = currentScore;
+                       bestMoment = tempConfig;
+                   }
+               }
        
-         return str.replace(regexp || SUBSTITUTE_REG, function (match, name) {
-           if (match.charAt(0) === '\\') {
-             return match.slice(1);
+               extend(config, bestMoment || tempConfig);
            }
-           return o[name] === undefined ? EMPTY : o[name];
-         });
-       }
        
-       patternChars = patternChars.join('') + 'ahkKZE';
+           function configFromObject(config) {
+               if (config._d) {
+                   return;
+               }
        
-       function encode(lastField, count, compiledPattern) {
-         compiledPattern.push({
-           field: lastField,
-           count: count
-         });
-       }
+               var i = normalizeObjectUnits(config._i);
+               config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) {
+                   return obj && parseInt(obj, 10);
+               });
        
-       function compile(pattern) {
-         var length = pattern.length;
-         var inQuote = false;
-         var compiledPattern = [];
-         var tmpBuffer = null;
-         var count = 0;
-         var lastField = -1;
-       
-         for (var i = 0; i < length; i++) {
-           var c = pattern.charAt(i);
-       
-           if (c === '\'') {
-             // '' is treated as a single quote regardless of being
-             // in a quoted section.
-             if (i + 1 < length) {
-               c = pattern.charAt(i + 1);
-               if (c === '\'') {
-                 i++;
-                 if (count !== 0) {
-                   encode(lastField, count, compiledPattern);
-                   lastField = -1;
-                   count = 0;
-                 }
-                 if (inQuote) {
-                   tmpBuffer += c;
-                 }
-                 continue;
+               configFromArray(config);
+           }
+       
+           function createFromConfig (config) {
+               var res = new Moment(checkOverflow(prepareConfig(config)));
+               if (res._nextDay) {
+                   // Adding is smart enough around DST
+                   res.add(1, 'd');
+                   res._nextDay = undefined;
                }
-             }
-             if (!inQuote) {
-               if (count !== 0) {
-                 encode(lastField, count, compiledPattern);
-                 lastField = -1;
-                 count = 0;
+       
+               return res;
+           }
+       
+           function prepareConfig (config) {
+               var input = config._i,
+                   format = config._f;
+       
+               config._locale = config._locale || locale_locales__getLocale(config._l);
+       
+               if (input === null || (format === undefined && input === '')) {
+                   return valid__createInvalid({nullInput: true});
                }
-               tmpBuffer = '';
-               inQuote = true;
-             } else {
-               compiledPattern.push({
-                 text: tmpBuffer
-               });
-               inQuote = false;
-             }
-             continue;
+       
+               if (typeof input === 'string') {
+                   config._i = input = config._locale.preparse(input);
+               }
+       
+               if (isMoment(input)) {
+                   return new Moment(checkOverflow(input));
+               } else if (isArray(format)) {
+                   configFromStringAndArray(config);
+               } else if (isDate(input)) {
+                   config._d = input;
+               } else if (format) {
+                   configFromStringAndFormat(config);
+               }  else {
+                   configFromInput(config);
+               }
+       
+               if (!valid__isValid(config)) {
+                   config._d = null;
+               }
+       
+               return config;
            }
-           if (inQuote) {
-             tmpBuffer += c;
-             continue;
+       
+           function configFromInput(config) {
+               var input = config._i;
+               if (input === undefined) {
+                   config._d = new Date(utils_hooks__hooks.now());
+               } else if (isDate(input)) {
+                   config._d = new Date(input.valueOf());
+               } else if (typeof input === 'string') {
+                   configFromString(config);
+               } else if (isArray(input)) {
+                   config._a = map(input.slice(0), function (obj) {
+                       return parseInt(obj, 10);
+                   });
+                   configFromArray(config);
+               } else if (typeof(input) === 'object') {
+                   configFromObject(config);
+               } else if (typeof(input) === 'number') {
+                   // from milliseconds
+                   config._d = new Date(input);
+               } else {
+                   utils_hooks__hooks.createFromInputFallback(config);
+               }
            }
-           if (!(c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z')) {
-             if (count !== 0) {
-               encode(lastField, count, compiledPattern);
-               lastField = -1;
-               count = 0;
-             }
-             compiledPattern.push({
-               text: c
-             });
-             continue;
+       
+           function createLocalOrUTC (input, format, locale, strict, isUTC) {
+               var c = {};
+       
+               if (typeof(locale) === 'boolean') {
+                   strict = locale;
+                   locale = undefined;
+               }
+       
+               if ((isObject(input) && isObjectEmpty(input)) ||
+                       (isArray(input) && input.length === 0)) {
+                   input = undefined;
+               }
+               // object construction must be done this way.
+               // https://github.com/moment/moment/issues/1423
+               c._isAMomentObject = true;
+               c._useUTC = c._isUTC = isUTC;
+               c._l = locale;
+               c._i = input;
+               c._f = format;
+               c._strict = strict;
+       
+               return createFromConfig(c);
+           }
+       
+           function local__createLocal (input, format, locale, strict) {
+               return createLocalOrUTC(input, format, locale, strict, false);
+           }
+       
+           var prototypeMin = deprecate(
+               'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',
+               function () {
+                   var other = local__createLocal.apply(null, arguments);
+                   if (this.isValid() && other.isValid()) {
+                       return other < this ? this : other;
+                   } else {
+                       return valid__createInvalid();
+                   }
+               }
+           );
+       
+           var prototypeMax = deprecate(
+               'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',
+               function () {
+                   var other = local__createLocal.apply(null, arguments);
+                   if (this.isValid() && other.isValid()) {
+                       return other > this ? this : other;
+                   } else {
+                       return valid__createInvalid();
+                   }
+               }
+           );
+       
+           // Pick a moment m from moments so that m[fn](other) is true for all
+           // other. This relies on the function fn to be transitive.
+           //
+           // moments should either be an array of moment objects or an array, whose
+           // first element is an array of moment objects.
+           function pickBy(fn, moments) {
+               var res, i;
+               if (moments.length === 1 && isArray(moments[0])) {
+                   moments = moments[0];
+               }
+               if (!moments.length) {
+                   return local__createLocal();
+               }
+               res = moments[0];
+               for (i = 1; i < moments.length; ++i) {
+                   if (!moments[i].isValid() || moments[i][fn](res)) {
+                       res = moments[i];
+                   }
+               }
+               return res;
            }
        
-           if (patternChars.indexOf(c) === -1) {
-             throw new Error('Illegal pattern character "' + c + '"');
+           // TODO: Use [].sort instead?
+           function min () {
+               var args = [].slice.call(arguments, 0);
+       
+               return pickBy('isBefore', args);
            }
        
-           if (lastField === -1 || lastField === c) {
-             lastField = c;
-             count++;
-             continue;
+           function max () {
+               var args = [].slice.call(arguments, 0);
+       
+               return pickBy('isAfter', args);
            }
-           encode(lastField, count, compiledPattern);
-           lastField = c;
-           count = 1;
-         }
        
-         if (inQuote) {
-           throw new Error('Unterminated quote');
-         }
-       
-         if (count !== 0) {
-           encode(lastField, count, compiledPattern);
-         }
-       
-         return compiledPattern;
-       }
-       
-       var zeroDigit = '0';
-       
-       // TODO zeroDigit localization??
-       function zeroPaddingNumber(_x, _x2, _x3, _x4) {
-         var _again = true;
-       
-         _function: while (_again) {
-           var value = _x,
-               minDigits = _x2,
-               maxDigits_ = _x3,
-               b = _x4;
-           _again = false;
-       
-           // Optimization for 1, 2 and 4 digit numbers. This should
-           // cover most cases of formatting date/time related items.
-           // Note: This optimization code assumes that maxDigits is
-           // either 2 or Integer.MAX_VALUE (maxIntCount in format()).
-           var buffer = b || [];
-           var maxDigits = maxDigits_ || MAX_VALUE;
-           if (value >= 0) {
-             if (value < 100 && minDigits >= 1 && minDigits <= 2) {
-               if (value < 10 && minDigits === 2) {
-                 buffer.push(zeroDigit);
-               }
-               buffer.push(value);
-               return buffer.join('');
-             } else if (value >= 1000 && value < 10000) {
-               if (minDigits === 4) {
-                 buffer.push(value);
-                 return buffer.join('');
-               }
-               if (minDigits === 2 && maxDigits === 2) {
-                 _x = value % 100;
-                 _x2 = 2;
-                 _x3 = 2;
-                 _x4 = buffer;
-                 _again = true;
-                 buffer = maxDigits = undefined;
-                 continue _function;
-               }
-             }
-           }
-           buffer.push(value + '');
-           return buffer.join('');
-         }
-       }
-       
-       /**
-        *
-        * date time formatter for GregorianCalendar
-        *
-        *      @example
-        *
-        *          const calendar = new GregorianCalendar(2013,9,24);
-        *          // ' to escape
-        *          const formatter = new GregorianCalendarFormat("'today is' ''yyyy/MM/dd a''");
-        *          document.write(formatter.format(calendar));
-        *
-        * @class GregorianCalendarFormat
-        * @param {String} pattern patter string of date formatter
-        *
-        * <table border="1">
-        * <thead valign="bottom">
-        * <tr><th class="head">Letter</th>
-        * <th class="head">Date or Time Component</th>
-        * <th class="head">Presentation</th>
-        * <th class="head">Examples</th>
-        * </tr>
-        * </thead>
-        * <tbody valign="top">
-        * <tr><td>G</td>
-        * <td>Era designator</td>
-        * <td>Text</td>
-        * <td>AD</td>
-        * </tr>
-        * <tr><td>y</td>
-        * <td>Year</td>
-        * <td>Year</td>
-        * <td>1996; 96</td>
-        * </tr>
-        * <tr><td>M</td>
-        * <td>Month in year</td>
-        * <td>Month</td>
-        * <td>July; Jul; 07</td>
-        * </tr>
-        * <tr><td>w</td>
-        * <td>Week in year</td>
-        * <td>Number</td>
-        * <td>27</td>
-        * </tr>
-        * <tr><td>W</td>
-        * <td>Week in month</td>
-        * <td>Number</td>
-        * <td>2</td>
-        * </tr>
-        * <tr><td>D</td>
-        * <td>Day in year</td>
-        * <td>Number</td>
-        * <td>189</td>
-        * </tr>
-        * <tr><td>d</td>
-        * <td>Day in month</td>
-        * <td>Number</td>
-        * <td>10</td>
-        * </tr>
-        * <tr><td>F</td>
-        * <td>Day of week in month</td>
-        * <td>Number</td>
-        * <td>2</td>
-        * </tr>
-        * <tr><td>E</td>
-        * <td>Day in week</td>
-        * <td>Text</td>
-        * <td>Tuesday; Tue</td>
-        * </tr>
-        * <tr><td>a</td>
-        * <td>Am/pm marker</td>
-        * <td>Text</td>
-        * <td>PM</td>
-        * </tr>
-        * <tr><td>H</td>
-        *       <td>Hour in day (0-23)</td>
-        * <td>Number</td>
-        * <td>0</td>
-        * </tr>
-        * <tr><td>k</td>
-        *       <td>Hour in day (1-24)</td>
-        * <td>Number</td>
-        * <td>24</td>
-        * </tr>
-        * <tr><td>K</td>
-        * <td>Hour in am/pm (0-11)</td>
-        * <td>Number</td>
-        * <td>0</td>
-        * </tr>
-        * <tr><td>h</td>
-        * <td>Hour in am/pm (1-12)</td>
-        * <td>Number</td>
-        * <td>12</td>
-        * </tr>
-        * <tr><td>m</td>
-        * <td>Minute in hour</td>
-        * <td>Number</td>
-        * <td>30</td>
-        * </tr>
-        * <tr><td>s</td>
-        * <td>Second in minute</td>
-        * <td>Number</td>
-        * <td>55</td>
-        * </tr>
-        * <tr><td>S</td>
-        * <td>Millisecond</td>
-        * <td>Number</td>
-        * <td>978</td>
-        * </tr>
-        * <tr><td>x/z</td>
-        * <td>Time zone</td>
-        * <td>General time zone</td>
-        * <td>Pacific Standard Time; PST; GMT-08:00</td>
-        * </tr>
-        * <tr><td>Z</td>
-        * <td>Time zone</td>
-        * <td>RFC 822 time zone</td>
-        * <td>-0800</td>
-        * </tr>
-        * </tbody>
-        * </table>
-       
-        * @param {Object} locale format locale
-        */
-       function DateTimeFormat(pattern, locale) {
-         this.locale = locale || enUsLocale;
-         this.originalPattern = pattern;
-         this.pattern = compile(pattern);
-       }
-       
-       function formatField(field, count, locale, calendar) {
-         var current = undefined;
-         var value = undefined;
-         switch (field) {
-           case 'G':
-             value = calendar.getYear() > 0 ? 1 : 0;
-             current = locale.eras[value];
-             break;
-           case 'y':
-             value = calendar.getYear();
-             if (value <= 0) {
-               value = 1 - value;
-             }
-             current = zeroPaddingNumber(value, 2, count !== 2 ? MAX_VALUE : 2);
-             break;
-           case 'M':
-             value = calendar.getMonth();
-             if (count >= 4) {
-               current = locale.months[value];
-             } else if (count === 3) {
-               current = locale.shortMonths[value];
-             } else {
-               current = zeroPaddingNumber(value + 1, count);
-             }
-             break;
-           case 'k':
-             current = zeroPaddingNumber(calendar.getHourOfDay() || 24, count);
-             break;
-           case 'E':
-             value = calendar.getDayOfWeek();
-             current = count >= 4 ? locale.weekdays[value] : locale.shortWeekdays[value];
-             break;
-           case 'a':
-             current = locale.ampms[calendar.getHourOfDay() >= 12 ? 1 : 0];
-             break;
-           case 'h':
-             current = zeroPaddingNumber(calendar.getHourOfDay() % 12 || 12, count);
-             break;
-           case 'K':
-             current = zeroPaddingNumber(calendar.getHourOfDay() % 12, count);
-             break;
-           case 'Z':
-             var offset = calendar.getTimezoneOffset();
-             var parts = [offset < 0 ? '-' : '+'];
-             offset = Math.abs(offset);
-             parts.push(zeroPaddingNumber(Math.floor(offset / 60) % 100, 2), zeroPaddingNumber(offset % 60, 2));
-             current = parts.join('');
-             break;
-           default:
-             // case 'd':
-             // case 'H':
-             // case 'm':
-             // case 's':
-             // case 'S':
-             // case 'D':
-             // case 'F':
-             // case 'w':
-             // case 'W':
-             var index = calendarIndexMap[field];
-             value = calendar.get(index);
-             current = zeroPaddingNumber(value, count);
-         }
-         return current;
-       }
-       
-       function matchPartString(dateStr, startIndex, match, mLen) {
-         for (var i = 0; i < mLen; i++) {
-           if (dateStr.charAt(startIndex + i) !== match.charAt(i)) {
-             return false;
+           var now = function () {
+               return Date.now ? Date.now() : +(new Date());
+           };
+       
+           function Duration (duration) {
+               var normalizedInput = normalizeObjectUnits(duration),
+                   years = normalizedInput.year || 0,
+                   quarters = normalizedInput.quarter || 0,
+                   months = normalizedInput.month || 0,
+                   weeks = normalizedInput.week || 0,
+                   days = normalizedInput.day || 0,
+                   hours = normalizedInput.hour || 0,
+                   minutes = normalizedInput.minute || 0,
+                   seconds = normalizedInput.second || 0,
+                   milliseconds = normalizedInput.millisecond || 0;
+       
+               // representation for dateAddRemove
+               this._milliseconds = +milliseconds +
+                   seconds * 1e3 + // 1000
+                   minutes * 6e4 + // 1000 * 60
+                   hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978
+               // Because of dateAddRemove treats 24 hours as different from a
+               // day when working around DST, we need to store them separately
+               this._days = +days +
+                   weeks * 7;
+               // It is impossible translate months into days without knowing
+               // which months you are are talking about, so we have to store
+               // it separately.
+               this._months = +months +
+                   quarters * 3 +
+                   years * 12;
+       
+               this._data = {};
+       
+               this._locale = locale_locales__getLocale();
+       
+               this._bubble();
+           }
+       
+           function isDuration (obj) {
+               return obj instanceof Duration;
+           }
+       
+           // FORMATTING
+       
+           function offset (token, separator) {
+               addFormatToken(token, 0, 0, function () {
+                   var offset = this.utcOffset();
+                   var sign = '+';
+                   if (offset < 0) {
+                       offset = -offset;
+                       sign = '-';
+                   }
+                   return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2);
+               });
            }
-         }
-         return true;
-       }
        
-       function matchField(dateStr, startIndex, matches) {
-         var matchedLen = -1;
-         var index = -1;
-         var i = undefined;
-         var len = matches.length;
-         for (i = 0; i < len; i++) {
-           var m = matches[i];
-           var mLen = m.length;
-           if (mLen > matchedLen && matchPartString(dateStr, startIndex, m, mLen)) {
-             matchedLen = mLen;
-             index = i;
+           offset('Z', ':');
+           offset('ZZ', '');
+       
+           // PARSING
+       
+           addRegexToken('Z',  matchShortOffset);
+           addRegexToken('ZZ', matchShortOffset);
+           addParseToken(['Z', 'ZZ'], function (input, array, config) {
+               config._useUTC = true;
+               config._tzm = offsetFromString(matchShortOffset, input);
+           });
+       
+           // HELPERS
+       
+           // timezone chunker
+           // '+10:00' > ['10',  '00']
+           // '-1530'  > ['-15', '30']
+           var chunkOffset = /([\+\-]|\d\d)/gi;
+       
+           function offsetFromString(matcher, string) {
+               var matches = ((string || '').match(matcher) || []);
+               var chunk   = matches[matches.length - 1] || [];
+               var parts   = (chunk + '').match(chunkOffset) || ['-', 0, 0];
+               var minutes = +(parts[1] * 60) + toInt(parts[2]);
+       
+               return parts[0] === '+' ? minutes : -minutes;
            }
-         }
-         return index >= 0 ? {
-           value: index,
-           startIndex: startIndex + matchedLen
-         } : null;
-       }
        
-       function getLeadingNumberLen(str) {
-         var i = undefined;
-         var c = undefined;
-         var len = str.length;
-         for (i = 0; i < len; i++) {
-           c = str.charAt(i);
-           if (c < '0' || c > '9') {
-             break;
+           // Return a moment from input, that is local/utc/zone equivalent to model.
+           function cloneWithOffset(input, model) {
+               var res, diff;
+               if (model._isUTC) {
+                   res = model.clone();
+                   diff = (isMoment(input) || isDate(input) ? input.valueOf() : local__createLocal(input).valueOf()) - res.valueOf();
+                   // Use low-level api, because this fn is low-level api.
+                   res._d.setTime(res._d.valueOf() + diff);
+                   utils_hooks__hooks.updateOffset(res, false);
+                   return res;
+               } else {
+                   return local__createLocal(input).local();
+               }
            }
-         }
-         return i;
-       }
        
-       function matchNumber(dateStr, startIndex, count, obeyCount) {
-         var str = dateStr;
-         var n = undefined;
-         if (obeyCount) {
-           if (dateStr.length < startIndex + count) {
-             return null;
+           function getDateOffset (m) {
+               // On Firefox.24 Date#getTimezoneOffset returns a floating point.
+               // https://github.com/moment/moment/pull/1871
+               return -Math.round(m._d.getTimezoneOffset() / 15) * 15;
            }
-           str = dateStr.slice(startIndex, startIndex + count);
-           if (!str.match(/^\d+$/)) {
-             throw new Error('GregorianCalendarFormat parse error, dateStr: ' + dateStr + ', patter: ' + this.originalPattern);
+       
+           // HOOKS
+       
+           // This function will be called whenever a moment is mutated.
+           // It is intended to keep the offset in sync with the timezone.
+           utils_hooks__hooks.updateOffset = function () {};
+       
+           // MOMENTS
+       
+           // keepLocalTime = true means only change the timezone, without
+           // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->
+           // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset
+           // +0200, so we adjust the time as needed, to be valid.
+           //
+           // Keeping the time actually adds/subtracts (one hour)
+           // from the actual represented time. That is why we call updateOffset
+           // a second time. In case it wants us to change the offset again
+           // _changeInProgress == true case, then we have to adjust, because
+           // there is no such time in the given timezone.
+           function getSetOffset (input, keepLocalTime) {
+               var offset = this._offset || 0,
+                   localAdjust;
+               if (!this.isValid()) {
+                   return input != null ? this : NaN;
+               }
+               if (input != null) {
+                   if (typeof input === 'string') {
+                       input = offsetFromString(matchShortOffset, input);
+                   } else if (Math.abs(input) < 16) {
+                       input = input * 60;
+                   }
+                   if (!this._isUTC && keepLocalTime) {
+                       localAdjust = getDateOffset(this);
+                   }
+                   this._offset = input;
+                   this._isUTC = true;
+                   if (localAdjust != null) {
+                       this.add(localAdjust, 'm');
+                   }
+                   if (offset !== input) {
+                       if (!keepLocalTime || this._changeInProgress) {
+                           add_subtract__addSubtract(this, create__createDuration(input - offset, 'm'), 1, false);
+                       } else if (!this._changeInProgress) {
+                           this._changeInProgress = true;
+                           utils_hooks__hooks.updateOffset(this, true);
+                           this._changeInProgress = null;
+                       }
+                   }
+                   return this;
+               } else {
+                   return this._isUTC ? offset : getDateOffset(this);
+               }
            }
-         } else {
-           str = str.slice(startIndex);
-         }
-         n = parseInt(str, 10);
-         if (isNaN(n)) {
-           throw new Error('GregorianCalendarFormat parse error, dateStr: ' + dateStr + ', patter: ' + this.originalPattern);
-         }
-         return {
-           value: n,
-           startIndex: startIndex + getLeadingNumberLen(str)
-         };
-       }
        
-       function parseField(calendar, dateStr, startIndex_, field, count, obeyCount, tmp) {
-         var match = undefined;
-         var year = undefined;
-         var hour = undefined;
-         var startIndex = startIndex_;
-         if (dateStr.length <= startIndex) {
-           return startIndex;
-         }
-         var locale = this.locale;
-         switch (field) {
-           case 'G':
-             match = matchField(dateStr, startIndex, locale.eras);
-             if (match) {
-               if (calendar.isSetYear()) {
-                 if (match.value === 0) {
-                   year = calendar.getYear();
-                   calendar.setYear(1 - year);
-                 }
+           function getSetZone (input, keepLocalTime) {
+               if (input != null) {
+                   if (typeof input !== 'string') {
+                       input = -input;
+                   }
+       
+                   this.utcOffset(input, keepLocalTime);
+       
+                   return this;
                } else {
-                 tmp.era = match.value;
+                   return -this.utcOffset();
                }
-             }
-             break;
-           case 'y':
-             match = matchNumber.call(this, dateStr, startIndex, count, obeyCount);
-             if (match) {
-               year = match.value;
-               if ('era' in tmp) {
-                 if (tmp.era === 0) {
-                   year = 1 - year;
-                 }
+           }
+       
+           function setOffsetToUTC (keepLocalTime) {
+               return this.utcOffset(0, keepLocalTime);
+           }
+       
+           function setOffsetToLocal (keepLocalTime) {
+               if (this._isUTC) {
+                   this.utcOffset(0, keepLocalTime);
+                   this._isUTC = false;
+       
+                   if (keepLocalTime) {
+                       this.subtract(getDateOffset(this), 'm');
+                   }
                }
-               calendar.setYear(year);
-             }
-             break;
-           case 'M':
-             var month = undefined;
-             if (count >= 3) {
-               match = matchField(dateStr, startIndex, locale[count === 3 ? 'shortMonths' : 'months']);
-               if (match) {
-                 month = match.value;
+               return this;
+           }
+       
+           function setOffsetToParsedOffset () {
+               if (this._tzm) {
+                   this.utcOffset(this._tzm);
+               } else if (typeof this._i === 'string') {
+                   this.utcOffset(offsetFromString(matchOffset, this._i));
                }
-             } else {
-               match = matchNumber.call(this, dateStr, startIndex, count, obeyCount);
-               if (match) {
-                 month = match.value - 1;
+               return this;
+           }
+       
+           function hasAlignedHourOffset (input) {
+               if (!this.isValid()) {
+                   return false;
                }
-             }
-             if (match) {
-               calendar.setMonth(month);
-             }
-             break;
-           case 'k':
-             match = matchNumber.call(this, dateStr, startIndex, count, obeyCount);
-             if (match) {
-               calendar.setHourOfDay(match.value % 24);
-             }
-             break;
-           case 'E':
-             match = matchField(dateStr, startIndex, locale[count > 3 ? 'weekdays' : 'shortWeekdays']);
-             if (match) {
-               calendar.setDayOfWeek(match.value);
-             }
-             break;
-           case 'a':
-             match = matchField(dateStr, startIndex, locale.ampms);
-             if (match) {
-               if (calendar.isSetHourOfDay()) {
-                 if (match.value) {
-                   hour = calendar.getHourOfDay();
-                   if (hour < 12) {
-                     calendar.setHourOfDay((hour + 12) % 24);
-                   }
-                 }
+               input = input ? local__createLocal(input).utcOffset() : 0;
+       
+               return (this.utcOffset() - input) % 60 === 0;
+           }
+       
+           function isDaylightSavingTime () {
+               return (
+                   this.utcOffset() > this.clone().month(0).utcOffset() ||
+                   this.utcOffset() > this.clone().month(5).utcOffset()
+               );
+           }
+       
+           function isDaylightSavingTimeShifted () {
+               if (!isUndefined(this._isDSTShifted)) {
+                   return this._isDSTShifted;
+               }
+       
+               var c = {};
+       
+               copyConfig(c, this);
+               c = prepareConfig(c);
+       
+               if (c._a) {
+                   var other = c._isUTC ? create_utc__createUTC(c._a) : local__createLocal(c._a);
+                   this._isDSTShifted = this.isValid() &&
+                       compareArrays(c._a, other.toArray()) > 0;
                } else {
-                 tmp.ampm = match.value;
+                   this._isDSTShifted = false;
                }
-             }
-             break;
-           case 'h':
-             match = matchNumber.call(this, dateStr, startIndex, count, obeyCount);
-             if (match) {
-               hour = match.value %= 12;
-               if (tmp.ampm) {
-                 hour += 12;
+       
+               return this._isDSTShifted;
+           }
+       
+           function isLocal () {
+               return this.isValid() ? !this._isUTC : false;
+           }
+       
+           function isUtcOffset () {
+               return this.isValid() ? this._isUTC : false;
+           }
+       
+           function isUtc () {
+               return this.isValid() ? this._isUTC && this._offset === 0 : false;
+           }
+       
+           // ASP.NET json date format regex
+           var aspNetRegex = /^(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?\d*)?$/;
+       
+           // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html
+           // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere
+           // and further modified to allow for strings containing both week and day
+           var isoRegex = /^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/;
+       
+           function create__createDuration (input, key) {
+               var duration = input,
+                   // matching against regexp is expensive, do it on demand
+                   match = null,
+                   sign,
+                   ret,
+                   diffRes;
+       
+               if (isDuration(input)) {
+                   duration = {
+                       ms : input._milliseconds,
+                       d  : input._days,
+                       M  : input._months
+                   };
+               } else if (typeof input === 'number') {
+                   duration = {};
+                   if (key) {
+                       duration[key] = input;
+                   } else {
+                       duration.milliseconds = input;
+                   }
+               } else if (!!(match = aspNetRegex.exec(input))) {
+                   sign = (match[1] === '-') ? -1 : 1;
+                   duration = {
+                       y  : 0,
+                       d  : toInt(match[DATE])        * sign,
+                       h  : toInt(match[HOUR])        * sign,
+                       m  : toInt(match[MINUTE])      * sign,
+                       s  : toInt(match[SECOND])      * sign,
+                       ms : toInt(match[MILLISECOND]) * sign
+                   };
+               } else if (!!(match = isoRegex.exec(input))) {
+                   sign = (match[1] === '-') ? -1 : 1;
+                   duration = {
+                       y : parseIso(match[2], sign),
+                       M : parseIso(match[3], sign),
+                       w : parseIso(match[4], sign),
+                       d : parseIso(match[5], sign),
+                       h : parseIso(match[6], sign),
+                       m : parseIso(match[7], sign),
+                       s : parseIso(match[8], sign)
+                   };
+               } else if (duration == null) {// checks for null or undefined
+                   duration = {};
+               } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) {
+                   diffRes = momentsDifference(local__createLocal(duration.from), local__createLocal(duration.to));
+       
+                   duration = {};
+                   duration.ms = diffRes.milliseconds;
+                   duration.M = diffRes.months;
                }
-               calendar.setHourOfDay(hour);
-             }
-             break;
-           case 'K':
-             match = matchNumber.call(this, dateStr, startIndex, count, obeyCount);
-             if (match) {
-               hour = match.value;
-               if (tmp.ampm) {
-                 hour += 12;
+       
+               ret = new Duration(duration);
+       
+               if (isDuration(input) && hasOwnProp(input, '_locale')) {
+                   ret._locale = input._locale;
                }
-               calendar.setHourOfDay(hour);
-             }
-             break;
-           case 'Z':
-             // let sign = 1;
-             var zoneChar = dateStr.charAt(startIndex);
-             if (zoneChar === '-') {
-               // sign = -1;
-               startIndex++;
-             } else if (zoneChar === '+') {
-               startIndex++;
-             } else {
-               break;
-             }
-             match = matchNumber.call(this, dateStr, startIndex, 2, true);
-             if (match) {
-               var zoneOffset = match.value * 60;
-               startIndex = match.startIndex;
-               match = matchNumber.call(this, dateStr, startIndex, 2, true);
-               if (match) {
-                 zoneOffset += match.value;
+       
+               return ret;
+           }
+       
+           create__createDuration.fn = Duration.prototype;
+       
+           function parseIso (inp, sign) {
+               // We'd normally use ~~inp for this, but unfortunately it also
+               // converts floats to ints.
+               // inp may be undefined, so careful calling replace on it.
+               var res = inp && parseFloat(inp.replace(',', '.'));
+               // apply sign while we're at it
+               return (isNaN(res) ? 0 : res) * sign;
+           }
+       
+           function positiveMomentsDifference(base, other) {
+               var res = {milliseconds: 0, months: 0};
+       
+               res.months = other.month() - base.month() +
+                   (other.year() - base.year()) * 12;
+               if (base.clone().add(res.months, 'M').isAfter(other)) {
+                   --res.months;
                }
-               calendar.setTimezoneOffset(zoneOffset);
-             }
-             break;
-           default:
-             // case 'd':
-             // case 'H':
-             // case 'm':
-             // case 's':
-             // case 'S':
-             // case 'D':
-             // case 'F':
-             // case 'w':
-             // case 'W'
-             match = matchNumber.call(this, dateStr, startIndex, count, obeyCount);
-             if (match) {
-               var index = calendarIndexMap[field];
-               calendar.set(index, match.value);
-             }
-         }
-         if (match) {
-           startIndex = match.startIndex;
-         }
-         return startIndex;
-       }
        
-       mix(DateTimeFormat.prototype, {
-         /*
-          * format a GregorianDate instance according to specified pattern
-          * @param {GregorianCalendar} calendar GregorianDate instance
-          * @returns {string} formatted string of GregorianDate instance
-          */
-         format: function format(calendar) {
-           if (!calendar.isGregorianCalendar) {
-             throw new Error('calendar must be type of GregorianCalendar');
+               res.milliseconds = +other - +(base.clone().add(res.months, 'M'));
+       
+               return res;
            }
-           var i = undefined;
-           var ret = [];
-           var pattern = this.pattern;
-           var len = pattern.length;
-           for (i = 0; i < len; i++) {
-             var comp = pattern[i];
-             if (comp.text) {
-               ret.push(comp.text);
-             } else if ('field' in comp) {
-               ret.push(formatField(comp.field, comp.count, this.locale, calendar));
-             }
+       
+           function momentsDifference(base, other) {
+               var res;
+               if (!(base.isValid() && other.isValid())) {
+                   return {milliseconds: 0, months: 0};
+               }
+       
+               other = cloneWithOffset(other, base);
+               if (base.isBefore(other)) {
+                   res = positiveMomentsDifference(base, other);
+               } else {
+                   res = positiveMomentsDifference(other, base);
+                   res.milliseconds = -res.milliseconds;
+                   res.months = -res.months;
+               }
+       
+               return res;
            }
-           return ret.join('');
-         },
        
-         /*
-          * parse a formatted string of GregorianDate instance according to specified pattern
-          * @param {String} dateStr formatted string of GregorianDate
-          * @returns {GregorianCalendar}
-          */
-         parse: function parse(dateStr, option_) {
-           var option = option_ || {};
-           var calendarLocale = option.locale;
-           var calendar = new GregorianCalendar(calendarLocale);
-           var i = undefined;
-           var j = undefined;
-           var tmp = {};
-           var obeyCount = option.obeyCount || false;
-           var dateStrLen = dateStr.length;
-           var errorIndex = -1;
-           var startIndex = 0;
-           var oldStartIndex = 0;
-           var pattern = this.pattern;
-           var len = pattern.length;
-           /* eslint no-labels: 0 no-empty-label:0 */
-           loopPattern: {
-             for (i = 0; errorIndex < 0 && i < len; i++) {
-               var comp = pattern[i];
-               var text = undefined;
-               var textLen = undefined;
-               oldStartIndex = startIndex;
-               text = comp.text;
-               if (text) {
-                 textLen = text.length;
-                 if (textLen + startIndex > dateStrLen) {
-                   errorIndex = startIndex;
-                 } else {
-                   for (j = 0; j < textLen; j++) {
-                     if (text.charAt(j) !== dateStr.charAt(j + startIndex)) {
-                       errorIndex = startIndex;
-                       break loopPattern;
-                     }
-                   }
-                   startIndex += textLen;
-                 }
-               } else if ('field' in comp) {
-                 if (!option.obeyCount) {
-                   var nextComp = pattern[i + 1];
-                   obeyCount = false;
-                   if (nextComp) {
-                     if ('field' in nextComp) {
-                       obeyCount = true;
-                     } else {
-                       var c = nextComp.text.charAt(0);
-                       if (c >= '0' && c <= '9') {
-                         obeyCount = true;
-                       }
-                     }
-                   }
-                 }
-                 startIndex = parseField.call(this, calendar, dateStr, startIndex, comp.field, comp.count, obeyCount, tmp);
-                 if (startIndex === oldStartIndex) {
-                   errorIndex = startIndex;
-                 }
+           function absRound (number) {
+               if (number < 0) {
+                   return Math.round(-1 * number) * -1;
+               } else {
+                   return Math.round(number);
                }
-             }
            }
        
-           if (errorIndex >= 0) {
-             warning(false, 'error when parsing date: ' + dateStr + ', position: ' + dateStr.slice(0, errorIndex) + '^');
-             return undefined;
+           // TODO: remove 'name' arg after deprecation is removed
+           function createAdder(direction, name) {
+               return function (val, period) {
+                   var dur, tmp;
+                   //invert the arguments, but complain about it
+                   if (period !== null && !isNaN(+period)) {
+                       deprecateSimple(name, 'moment().' + name  + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' +
+                       'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.');
+                       tmp = val; val = period; period = tmp;
+                   }
+       
+                   val = typeof val === 'string' ? +val : val;
+                   dur = create__createDuration(val, period);
+                   add_subtract__addSubtract(this, dur, direction);
+                   return this;
+               };
            }
-           return calendar;
-         }
-       });
        
-       mix(DateTimeFormat, {
-         Style: DateTimeStyle,
+           function add_subtract__addSubtract (mom, duration, isAdding, updateOffset) {
+               var milliseconds = duration._milliseconds,
+                   days = absRound(duration._days),
+                   months = absRound(duration._months);
        
-         /*
-          * get a formatter instance of short style pattern.
-          * en-us: M/d/yy h:mm a
-          * zh-cn: yy-M-d ah:mm
-          * @param {Object} locale locale object
-          * @returns {GregorianCalendar}
-          * @static
-          */
-         getInstance: function getInstance(locale) {
-           return this.getDateTimeInstance(DateTimeStyle.SHORT, DateTimeStyle.SHORT, locale);
-         },
+               if (!mom.isValid()) {
+                   // No op
+                   return;
+               }
        
-         /*
-          * get a formatter instance of specified date style.
-          * @param {Date.Formatter.Style} dateStyle date format style
-          * @param {Object} locale
-          * @returns {GregorianCalendar}
-          * @static
-          */
-         getDateInstance: function getDateInstance(dateStyle, locale) {
-           return this.getDateTimeInstance(dateStyle, undefined, locale);
-         },
+               updateOffset = updateOffset == null ? true : updateOffset;
        
-         /*
-          * get a formatter instance of specified date style and time style.
-          * @param {Date.Formatter.Style} dateStyle date format style
-          * @param {Date.Formatter.Style} timeStyle time format style
-          * @param {Object} locale
-          * @returns {GregorianCalendar}
-          * @static
-          */
-         getDateTimeInstance: function getDateTimeInstance(dateStyle, timeStyle, locale_) {
-           var locale = locale_ || enUsLocale;
-           var datePattern = '';
-           if (dateStyle !== undefined) {
-             datePattern = locale.datePatterns[dateStyle];
-           }
-           var timePattern = '';
-           if (timeStyle !== undefined) {
-             timePattern = locale.timePatterns[timeStyle];
-           }
-           var pattern = datePattern;
-           if (timePattern) {
-             if (datePattern) {
-               pattern = substitute(locale.dateTimePattern, {
-                 date: datePattern,
-                 time: timePattern
-               });
-             } else {
-               pattern = timePattern;
-             }
+               if (milliseconds) {
+                   mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);
+               }
+               if (days) {
+                   get_set__set(mom, 'Date', get_set__get(mom, 'Date') + days * isAdding);
+               }
+               if (months) {
+                   setMonth(mom, get_set__get(mom, 'Month') + months * isAdding);
+               }
+               if (updateOffset) {
+                   utils_hooks__hooks.updateOffset(mom, days || months);
+               }
            }
-           return new DateTimeFormat(pattern, locale);
-         },
        
-         /*
-          * get a formatter instance of specified time style.
-          * @param {Date.Formatter.Style} timeStyle time format style
-          * @param {Object} locale
-          * @returns {GregorianCalendar}
-          * @static
-          */
-         getTimeInstance: function getTimeInstance(timeStyle, locale) {
-           return this.getDateTimeInstance(undefined, timeStyle, locale);
-         }
-       });
+           var add_subtract__add      = createAdder(1, 'add');
+           var add_subtract__subtract = createAdder(-1, 'subtract');
        
-       module.exports = DateTimeFormat;
+           function getCalendarFormat(myMoment, now) {
+               var diff = myMoment.diff(now, 'days', true);
+               return diff < -6 ? 'sameElse' :
+                       diff < -1 ? 'lastWeek' :
+                       diff < 0 ? 'lastDay' :
+                       diff < 1 ? 'sameDay' :
+                       diff < 2 ? 'nextDay' :
+                       diff < 7 ? 'nextWeek' : 'sameElse';
+           }
        
-       DateTimeFormat.version = '@VERSION@';
+           function moment_calendar__calendar (time, formats) {
+               // We want to compare the start of today, vs this.
+               // Getting start-of-today depends on whether we're local/utc/offset or not.
+               var now = time || local__createLocal(),
+                   sod = cloneWithOffset(now, this).startOf('day'),
+                   format = utils_hooks__hooks.calendarFormat(this, sod) || 'sameElse';
        
-       // gc_format@163.com
-
-/***/ },
-/* 166 */
-/***/ function(module, exports) {
-
-       'use strict';
+               var output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]);
        
-       module.exports = {
-         eras: ['BC', 'AD'],
-         months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
-         shortMonths: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
-         weekdays: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
-         shortWeekdays: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
-         veryShortWeekdays: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],
-         ampms: ['AM', 'PM'],
-         datePatterns: ['EEEE, MMMM d, yyyy', 'MMMM d, yyyy', 'MMM d, yyyy', 'M/d/yy'],
-         timePatterns: ['h:mm:ss a \'GMT\'Z', 'h:mm:ss a', 'h:mm:ss a', 'h:mm a'],
-         dateTimePattern: '{date} {time}'
-       };
-
-/***/ },
-/* 167 */
-/***/ function(module, exports, __webpack_require__) {
-
-       /* WEBPACK VAR INJECTION */(function(process) {/**
-        * Copyright 2014-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.
-        */
+               return this.format(output || this.localeData().calendar(format, this, local__createLocal(now)));
+           }
        
-       'use strict';
+           function clone () {
+               return new Moment(this);
+           }
        
-       /**
-        * Similar to invariant but only logs a warning if the condition is not met.
-        * This can be used to log issues in development environments in critical
-        * paths. Removing the logging code for production environments will keep the
-        * same logic and follow the same code paths.
-        */
+           function isAfter (input, units) {
+               var localInput = isMoment(input) ? input : local__createLocal(input);
+               if (!(this.isValid() && localInput.isValid())) {
+                   return false;
+               }
+               units = normalizeUnits(!isUndefined(units) ? units : 'millisecond');
+               if (units === 'millisecond') {
+                   return this.valueOf() > localInput.valueOf();
+               } else {
+                   return localInput.valueOf() < this.clone().startOf(units).valueOf();
+               }
+           }
        
-       var warning = function() {};
+           function isBefore (input, units) {
+               var localInput = isMoment(input) ? input : local__createLocal(input);
+               if (!(this.isValid() && localInput.isValid())) {
+                   return false;
+               }
+               units = normalizeUnits(!isUndefined(units) ? units : 'millisecond');
+               if (units === 'millisecond') {
+                   return this.valueOf() < localInput.valueOf();
+               } else {
+                   return this.clone().endOf(units).valueOf() < localInput.valueOf();
+               }
+           }
        
-       if (process.env.NODE_ENV !== 'production') {
-         warning = function(condition, format, args) {
-           var len = arguments.length;
-           args = new Array(len > 2 ? len - 2 : 0);
-           for (var key = 2; key < len; key++) {
-             args[key - 2] = arguments[key];
+           function isBetween (from, to, units, inclusivity) {
+               inclusivity = inclusivity || '()';
+               return (inclusivity[0] === '(' ? this.isAfter(from, units) : !this.isBefore(from, units)) &&
+                   (inclusivity[1] === ')' ? this.isBefore(to, units) : !this.isAfter(to, units));
            }
-           if (format === undefined) {
-             throw new Error(
-               '`warning(condition, format, ...args)` requires a warning ' +
-               'message argument'
-             );
+       
+           function isSame (input, units) {
+               var localInput = isMoment(input) ? input : local__createLocal(input),
+                   inputMs;
+               if (!(this.isValid() && localInput.isValid())) {
+                   return false;
+               }
+               units = normalizeUnits(units || 'millisecond');
+               if (units === 'millisecond') {
+                   return this.valueOf() === localInput.valueOf();
+               } else {
+                   inputMs = localInput.valueOf();
+                   return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf();
+               }
            }
        
-           if (format.length < 10 || (/^[s\W]*$/).test(format)) {
-             throw new Error(
-               'The warning format should be able to uniquely identify this ' +
-               'warning. Please, use a more descriptive format than: ' + format
-             );
+           function isSameOrAfter (input, units) {
+               return this.isSame(input, units) || this.isAfter(input,units);
            }
        
-           if (!condition) {
-             var argIndex = 0;
-             var message = 'Warning: ' +
-               format.replace(/%s/g, function() {
-                 return args[argIndex++];
-               });
-             if (typeof console !== 'undefined') {
-               console.error(message);
-             }
-             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);
-             } catch(x) {}
+           function isSameOrBefore (input, units) {
+               return this.isSame(input, units) || this.isBefore(input,units);
            }
-         };
-       }
        
-       module.exports = warning;
+           function diff (input, units, asFloat) {
+               var that,
+                   zoneDelta,
+                   delta, output;
        
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
-
-/***/ },
-/* 168 */
-/***/ function(module, exports, __webpack_require__) {
-
-       'use strict';
+               if (!this.isValid()) {
+                   return NaN;
+               }
        
-       Object.defineProperty(exports, '__esModule', {
-         value: true
-       });
+               that = cloneWithOffset(input, this);
        
-       function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+               if (!that.isValid()) {
+                   return NaN;
+               }
        
-       var _src = __webpack_require__(169);
+               zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;
        
-       var _src2 = _interopRequireDefault(_src);
-
-       exports['default'] = _src2['default'];
-       module.exports = exports['default'];
-
-/***/ },
-/* 169 */
-/***/ function(module, exports, __webpack_require__) {
-
-       'use strict';
+               units = normalizeUnits(units);
        
-       Object.defineProperty(exports, '__esModule', {
-         value: true
-       });
+               if (units === 'year' || units === 'month' || units === 'quarter') {
+                   output = monthDiff(this, that);
+                   if (units === 'quarter') {
+                       output = output / 3;
+                   } else if (units === 'year') {
+                       output = output / 12;
+                   }
+               } else {
+                   delta = this - that;
+                   output = units === 'second' ? delta / 1e3 : // 1000
+                       units === 'minute' ? delta / 6e4 : // 1000 * 60
+                       units === 'hour' ? delta / 36e5 : // 1000 * 60 * 60
+                       units === 'day' ? (delta - zoneDelta) / 864e5 : // 1000 * 60 * 60 * 24, negate dst
+                       units === 'week' ? (delta - zoneDelta) / 6048e5 : // 1000 * 60 * 60 * 24 * 7, negate dst
+                       delta;
+               }
+               return asFloat ? output : absFloor(output);
+           }
        
-       function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+           function monthDiff (a, b) {
+               // difference in months
+               var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()),
+                   // b is in (anchor - 1 month, anchor + 1 month)
+                   anchor = a.clone().add(wholeMonthDiff, 'months'),
+                   anchor2, adjust;
        
-       var _TimePicker = __webpack_require__(170);
+               if (b - anchor < 0) {
+                   anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');
+                   // linear across the month
+                   adjust = (b - anchor) / (anchor - anchor2);
+               } else {
+                   anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');
+                   // linear across the month
+                   adjust = (b - anchor) / (anchor2 - anchor);
+               }
        
-       var _TimePicker2 = _interopRequireDefault(_TimePicker);
-
-       exports['default'] = _TimePicker2['default'];
-       module.exports = exports['default'];
-
-/***/ },
-/* 170 */
-/***/ function(module, exports, __webpack_require__) {
-
-       'use strict';
+               //check for negative zero, return zero if negative zero
+               return -(wholeMonthDiff + adjust) || 0;
+           }
        
-       Object.defineProperty(exports, '__esModule', {
-         value: true
-       });
+           utils_hooks__hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';
+           utils_hooks__hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';
        
-       function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+           function toString () {
+               return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');
+           }
        
-       var _react = __webpack_require__(3);
+           function moment_format__toISOString () {
+               var m = this.clone().utc();
+               if (0 < m.year() && m.year() <= 9999) {
+                   if (isFunction(Date.prototype.toISOString)) {
+                       // native implementation is ~50x faster, use it when we can
+                       return this.toDate().toISOString();
+                   } else {
+                       return formatMoment(m, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]');
+                   }
+               } else {
+                   return formatMoment(m, 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]');
+               }
+           }
        
-       var _react2 = _interopRequireDefault(_react);
+           function format (inputString) {
+               if (!inputString) {
+                   inputString = this.isUtc() ? utils_hooks__hooks.defaultFormatUtc : utils_hooks__hooks.defaultFormat;
+               }
+               var output = formatMoment(this, inputString);
+               return this.localeData().postformat(output);
+           }
        
-       var _rcTrigger = __webpack_require__(171);
+           function from (time, withoutSuffix) {
+               if (this.isValid() &&
+                       ((isMoment(time) && time.isValid()) ||
+                        local__createLocal(time).isValid())) {
+                   return create__createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix);
+               } else {
+                   return this.localeData().invalidDate();
+               }
+           }
        
-       var _rcTrigger2 = _interopRequireDefault(_rcTrigger);
+           function fromNow (withoutSuffix) {
+               return this.from(local__createLocal(), withoutSuffix);
+           }
        
-       var _modulePanel = __webpack_require__(218);
+           function to (time, withoutSuffix) {
+               if (this.isValid() &&
+                       ((isMoment(time) && time.isValid()) ||
+                        local__createLocal(time).isValid())) {
+                   return create__createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix);
+               } else {
+                   return this.localeData().invalidDate();
+               }
+           }
        
-       var _modulePanel2 = _interopRequireDefault(_modulePanel);
+           function toNow (withoutSuffix) {
+               return this.to(local__createLocal(), withoutSuffix);
+           }
        
-       var _utilPlacements = __webpack_require__(225);
+           // If passed a locale key, it will set the locale for this
+           // instance.  Otherwise, it will return the locale configuration
+           // variables for this instance.
+           function locale (key) {
+               var newLocaleData;
        
-       var _utilPlacements2 = _interopRequireDefault(_utilPlacements);
+               if (key === undefined) {
+                   return this._locale._abbr;
+               } else {
+                   newLocaleData = locale_locales__getLocale(key);
+                   if (newLocaleData != null) {
+                       this._locale = newLocaleData;
+                   }
+                   return this;
+               }
+           }
        
-       var _mixinCommonMixin = __webpack_require__(219);
+           var lang = deprecate(
+               'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',
+               function (key) {
+                   if (key === undefined) {
+                       return this.localeData();
+                   } else {
+                       return this.locale(key);
+                   }
+               }
+           );
        
-       var _mixinCommonMixin2 = _interopRequireDefault(_mixinCommonMixin);
+           function localeData () {
+               return this._locale;
+           }
+       
+           function startOf (units) {
+               units = normalizeUnits(units);
+               // the following switch intentionally omits break keywords
+               // to utilize falling through the cases.
+               switch (units) {
+                   case 'year':
+                       this.month(0);
+                       /* falls through */
+                   case 'quarter':
+                   case 'month':
+                       this.date(1);
+                       /* falls through */
+                   case 'week':
+                   case 'isoWeek':
+                   case 'day':
+                   case 'date':
+                       this.hours(0);
+                       /* falls through */
+                   case 'hour':
+                       this.minutes(0);
+                       /* falls through */
+                   case 'minute':
+                       this.seconds(0);
+                       /* falls through */
+                   case 'second':
+                       this.milliseconds(0);
+               }
        
-       var _utilIndex = __webpack_require__(226);
+               // weeks are a special case
+               if (units === 'week') {
+                   this.weekday(0);
+               }
+               if (units === 'isoWeek') {
+                   this.isoWeekday(1);
+               }
        
-       function noop() {}
+               // quarters are also special
+               if (units === 'quarter') {
+                   this.month(Math.floor(this.month() / 3) * 3);
+               }
        
-       function refFn(field, component) {
-         this[field] = component;
-       }
+               return this;
+           }
        
-       var Picker = _react2['default'].createClass({
-         displayName: 'Picker',
+           function endOf (units) {
+               units = normalizeUnits(units);
+               if (units === undefined || units === 'millisecond') {
+                   return this;
+               }
        
-         propTypes: {
-           prefixCls: _react.PropTypes.string,
-           locale: _react.PropTypes.object,
-           value: _react.PropTypes.object,
-           disabled: _react.PropTypes.bool,
-           allowEmpty: _react.PropTypes.bool,
-           defaultValue: _react.PropTypes.object,
-           open: _react.PropTypes.bool,
-           defaultOpen: _react.PropTypes.bool,
-           align: _react.PropTypes.object,
-           placement: _react.PropTypes.any,
-           transitionName: _react.PropTypes.string,
-           getPopupContainer: _react.PropTypes.func,
-           placeholder: _react.PropTypes.string,
-           formatter: _react.PropTypes.any,
-           showHour: _react.PropTypes.bool,
-           style: _react.PropTypes.object,
-           className: _react.PropTypes.string,
-           showSecond: _react.PropTypes.bool,
-           disabledHours: _react.PropTypes.func,
-           disabledMinutes: _react.PropTypes.func,
-           disabledSeconds: _react.PropTypes.func,
-           hideDisabledOptions: _react.PropTypes.bool,
-           onChange: _react.PropTypes.func,
-           onOpen: _react.PropTypes.func,
-           onClose: _react.PropTypes.func
-         },
+               // 'date' is an alias for 'day', so it should be considered as such.
+               if (units === 'date') {
+                   units = 'day';
+               }
        
-         mixins: [_mixinCommonMixin2['default']],
+               return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms');
+           }
        
-         getDefaultProps: function getDefaultProps() {
-           return {
-             prefixCls: 'rc-time-picker',
-             defaultOpen: false,
-             style: {},
-             className: '',
-             align: {},
-             allowEmpty: true,
-             showHour: true,
-             showSecond: true,
-             disabledHours: noop,
-             disabledMinutes: noop,
-             disabledSeconds: noop,
-             hideDisabledOptions: false,
-             placement: 'bottomLeft',
-             onChange: noop,
-             onOpen: noop,
-             onClose: noop
-           };
-         },
+           function to_type__valueOf () {
+               return this._d.valueOf() - ((this._offset || 0) * 60000);
+           }
        
-         getInitialState: function getInitialState() {
-           this.savePanelRef = refFn.bind(this, 'panelInstance');
-           var _props = this.props;
-           var defaultOpen = _props.defaultOpen;
-           var defaultValue = _props.defaultValue;
-           var _props$open = _props.open;
-           var open = _props$open === undefined ? defaultOpen : _props$open;
-           var _props$value = _props.value;
-           var value = _props$value === undefined ? defaultValue : _props$value;
+           function unix () {
+               return Math.floor(this.valueOf() / 1000);
+           }
        
-           return {
-             open: open,
-             value: value
-           };
-         },
+           function toDate () {
+               return new Date(this.valueOf());
+           }
+       
+           function toArray () {
+               var m = this;
+               return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()];
+           }
+       
+           function toObject () {
+               var m = this;
+               return {
+                   years: m.year(),
+                   months: m.month(),
+                   date: m.date(),
+                   hours: m.hours(),
+                   minutes: m.minutes(),
+                   seconds: m.seconds(),
+                   milliseconds: m.milliseconds()
+               };
+           }
+       
+           function toJSON () {
+               // new Date(NaN).toJSON() === null
+               return this.isValid() ? this.toISOString() : null;
+           }
+       
+           function moment_valid__isValid () {
+               return valid__isValid(this);
+           }
+       
+           function parsingFlags () {
+               return extend({}, getParsingFlags(this));
+           }
+       
+           function invalidAt () {
+               return getParsingFlags(this).overflow;
+           }
+       
+           function creationData() {
+               return {
+                   input: this._i,
+                   format: this._f,
+                   locale: this._locale,
+                   isUTC: this._isUTC,
+                   strict: this._strict
+               };
+           }
+       
+           // FORMATTING
+       
+           addFormatToken(0, ['gg', 2], 0, function () {
+               return this.weekYear() % 100;
+           });
        
-         componentWillReceiveProps: function componentWillReceiveProps(nextProps) {
-           var value = nextProps.value;
-           var open = nextProps.open;
+           addFormatToken(0, ['GG', 2], 0, function () {
+               return this.isoWeekYear() % 100;
+           });
        
-           if ('value' in nextProps) {
-             this.setState({
-               value: value
-             });
+           function addWeekYearFormatToken (token, getter) {
+               addFormatToken(0, [token, token.length], 0, getter);
            }
-           if (open !== undefined) {
-             this.setState({ open: open });
-           }
-         },
        
-         onPanelChange: function onPanelChange(value) {
-           this.setValue(value);
-         },
+           addWeekYearFormatToken('gggg',     'weekYear');
+           addWeekYearFormatToken('ggggg',    'weekYear');
+           addWeekYearFormatToken('GGGG',  'isoWeekYear');
+           addWeekYearFormatToken('GGGGG', 'isoWeekYear');
        
-         onPanelClear: function onPanelClear() {
-           this.setValue(null);
-           this.setOpen(false);
-         },
+           // ALIASES
        
-         onVisibleChange: function onVisibleChange(open) {
-           this.setOpen(open);
-         },
+           addUnitAlias('weekYear', 'gg');
+           addUnitAlias('isoWeekYear', 'GG');
        
-         onEsc: function onEsc() {
-           this.setOpen(false);
-           this.refs.picker.focus();
-         },
+           // PRIORITY
        
-         onKeyDown: function onKeyDown(e) {
-           if (e.keyCode === 40) {
-             this.setOpen(true);
+           addUnitPriority('weekYear', 1);
+           addUnitPriority('isoWeekYear', 1);
+       
+       
+           // PARSING
+       
+           addRegexToken('G',      matchSigned);
+           addRegexToken('g',      matchSigned);
+           addRegexToken('GG',     match1to2, match2);
+           addRegexToken('gg',     match1to2, match2);
+           addRegexToken('GGGG',   match1to4, match4);
+           addRegexToken('gggg',   match1to4, match4);
+           addRegexToken('GGGGG',  match1to6, match6);
+           addRegexToken('ggggg',  match1to6, match6);
+       
+           addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) {
+               week[token.substr(0, 2)] = toInt(input);
+           });
+       
+           addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {
+               week[token] = utils_hooks__hooks.parseTwoDigitYear(input);
+           });
+       
+           // MOMENTS
+       
+           function getSetWeekYear (input) {
+               return getSetWeekYearHelper.call(this,
+                       input,
+                       this.week(),
+                       this.weekday(),
+                       this.localeData()._week.dow,
+                       this.localeData()._week.doy);
            }
-         },
        
-         setValue: function setValue(value) {
-           if (!('value' in this.props)) {
-             this.setState({
-               value: value
-             });
+           function getSetISOWeekYear (input) {
+               return getSetWeekYearHelper.call(this,
+                       input, this.isoWeek(), this.isoWeekday(), 1, 4);
            }
-           this.props.onChange(value);
-         },
        
-         getFormatter: function getFormatter() {
-           var formatter = this.props.formatter;
-           var locale = this.props.locale;
-           if (formatter) {
-             if (formatter === this.lastFormatter) {
-               return this.normalFormatter;
-             }
-             this.normalFormatter = (0, _utilIndex.getFormatter)(formatter, locale);
-             this.lastFormatter = formatter;
-             return this.normalFormatter;
+           function getISOWeeksInYear () {
+               return weeksInYear(this.year(), 1, 4);
            }
-           if (!this.props.showSecond) {
-             if (!this.notShowSecondFormatter) {
-               this.notShowSecondFormatter = (0, _utilIndex.getFormatter)('HH:mm', locale);
-             }
-             return this.notShowSecondFormatter;
+       
+           function getWeeksInYear () {
+               var weekInfo = this.localeData()._week;
+               return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);
            }
-           if (!this.props.showHour) {
-             if (!this.notShowHourFormatter) {
-               this.notShowHourFormatter = (0, _utilIndex.getFormatter)('mm:ss', locale);
-             }
-             return this.notShowHourFormatter;
+       
+           function getSetWeekYearHelper(input, week, weekday, dow, doy) {
+               var weeksTarget;
+               if (input == null) {
+                   return weekOfYear(this, dow, doy).year;
+               } else {
+                   weeksTarget = weeksInYear(input, dow, doy);
+                   if (week > weeksTarget) {
+                       week = weeksTarget;
+                   }
+                   return setWeekAll.call(this, input, week, weekday, dow, doy);
+               }
            }
-           if (!this.normalFormatter) {
-             this.normalFormatter = (0, _utilIndex.getFormatter)('HH:mm:ss', locale);
+       
+           function setWeekAll(weekYear, week, weekday, dow, doy) {
+               var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),
+                   date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);
+       
+               this.year(date.getUTCFullYear());
+               this.month(date.getUTCMonth());
+               this.date(date.getUTCDate());
+               return this;
            }
-           return this.normalFormatter;
-         },
        
-         getPanelElement: function getPanelElement() {
-           var _props2 = this.props;
-           var prefixCls = _props2.prefixCls;
-           var defaultValue = _props2.defaultValue;
-           var locale = _props2.locale;
-           var placeholder = _props2.placeholder;
-           var disabledHours = _props2.disabledHours;
-           var disabledMinutes = _props2.disabledMinutes;
-           var disabledSeconds = _props2.disabledSeconds;
-           var hideDisabledOptions = _props2.hideDisabledOptions;
-           var allowEmpty = _props2.allowEmpty;
-           var showHour = _props2.showHour;
-           var showSecond = _props2.showSecond;
+           // FORMATTING
        
-           return _react2['default'].createElement(_modulePanel2['default'], {
-             prefixCls: prefixCls + '-panel',
-             ref: this.savePanelRef,
-             value: this.state.value,
-             onChange: this.onPanelChange,
-             gregorianCalendarLocale: locale.calendar,
-             onClear: this.onPanelClear,
-             defaultValue: defaultValue,
-             showHour: showHour,
-             onEsc: this.onEsc,
-             showSecond: showSecond,
-             locale: locale,
-             allowEmpty: allowEmpty,
-             formatter: this.getFormatter(),
-             placeholder: placeholder,
-             disabledHours: disabledHours,
-             disabledMinutes: disabledMinutes,
-             disabledSeconds: disabledSeconds,
-             hideDisabledOptions: hideDisabledOptions
+           addFormatToken('Q', 0, 'Qo', 'quarter');
+       
+           // ALIASES
+       
+           addUnitAlias('quarter', 'Q');
+       
+           // PRIORITY
+       
+           addUnitPriority('quarter', 7);
+       
+           // PARSING
+       
+           addRegexToken('Q', match1);
+           addParseToken('Q', function (input, array) {
+               array[MONTH] = (toInt(input) - 1) * 3;
            });
-         },
        
-         setOpen: function setOpen(open, callback) {
-           var _props3 = this.props;
-           var onOpen = _props3.onOpen;
-           var onClose = _props3.onClose;
+           // MOMENTS
        
-           if (this.state.open !== open) {
-             this.setState({
-               open: open
-             }, callback);
-             var _event = {
-               open: open
-             };
-             if (open) {
-               onOpen(_event);
-             } else {
-               onClose(_event);
-             }
+           function getSetQuarter (input) {
+               return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);
            }
-         },
        
-         render: function render() {
-           var _props4 = this.props;
-           var prefixCls = _props4.prefixCls;
-           var placeholder = _props4.placeholder;
-           var placement = _props4.placement;
-           var align = _props4.align;
-           var disabled = _props4.disabled;
-           var transitionName = _props4.transitionName;
-           var style = _props4.style;
-           var className = _props4.className;
-           var showHour = _props4.showHour;
-           var showSecond = _props4.showSecond;
-           var getPopupContainer = _props4.getPopupContainer;
-           var _state = this.state;
-           var open = _state.open;
-           var value = _state.value;
+           // FORMATTING
        
-           var popupClassName = undefined;
-           if (!showHour || !showSecond) {
-             popupClassName = prefixCls + '-panel-narrow';
+           addFormatToken('D', ['DD', 2], 'Do', 'date');
+       
+           // ALIASES
+       
+           addUnitAlias('date', 'D');
+       
+           // PRIOROITY
+           addUnitPriority('date', 9);
+       
+           // PARSING
+       
+           addRegexToken('D',  match1to2);
+           addRegexToken('DD', match1to2, match2);
+           addRegexToken('Do', function (isStrict, locale) {
+               return isStrict ? locale._ordinalParse : locale._ordinalParseLenient;
+           });
+       
+           addParseToken(['D', 'DD'], DATE);
+           addParseToken('Do', function (input, array) {
+               array[DATE] = toInt(input.match(match1to2)[0], 10);
+           });
+       
+           // MOMENTS
+       
+           var getSetDayOfMonth = makeGetSet('Date', true);
+       
+           // FORMATTING
+       
+           addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');
+       
+           // ALIASES
+       
+           addUnitAlias('dayOfYear', 'DDD');
+       
+           // PRIORITY
+           addUnitPriority('dayOfYear', 4);
+       
+           // PARSING
+       
+           addRegexToken('DDD',  match1to3);
+           addRegexToken('DDDD', match3);
+           addParseToken(['DDD', 'DDDD'], function (input, array, config) {
+               config._dayOfYear = toInt(input);
+           });
+       
+           // HELPERS
+       
+           // MOMENTS
+       
+           function getSetDayOfYear (input) {
+               var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1;
+               return input == null ? dayOfYear : this.add((input - dayOfYear), 'd');
            }
-           return _react2['default'].createElement(
-             _rcTrigger2['default'],
-             {
-               prefixCls: prefixCls + '-panel',
-               popupClassName: popupClassName,
-               popup: this.getPanelElement(),
-               popupAlign: align,
-               builtinPlacements: _utilPlacements2['default'],
-               popupPlacement: placement,
-               action: disabled ? [] : ['click'],
-               destroyPopupOnHide: true,
-               getPopupContainer: getPopupContainer,
-               popupTransitionName: transitionName,
-               popupVisible: open,
-               onPopupVisibleChange: this.onVisibleChange
-             },
-             _react2['default'].createElement(
-               'span',
-               { className: prefixCls + ' ' + className, style: style },
-               _react2['default'].createElement('input', {
-                 className: prefixCls + '-input',
-                 ref: 'picker', type: 'text', placeholder: placeholder,
-                 readOnly: true,
-                 onKeyDown: this.onKeyDown,
-                 disabled: disabled, value: value && this.getFormatter().format(value) || ''
-               }),
-               _react2['default'].createElement('span', { className: prefixCls + '-icon' })
-             )
-           );
-         }
-       });
        
-       exports['default'] = Picker;
-       module.exports = exports['default'];
-
-/***/ },
-/* 171 */
-/***/ function(module, exports, __webpack_require__) {
-
-       'use strict';
+           // FORMATTING
        
-       module.exports = __webpack_require__(172);
-
-/***/ },
-/* 172 */
-/***/ function(module, exports, __webpack_require__) {
-
-       'use strict';
+           addFormatToken('m', ['mm', 2], 0, 'minute');
        
-       Object.defineProperty(exports, '__esModule', {
-         value: true
-       });
+           // ALIASES
        
-       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; };
+           addUnitAlias('minute', 'm');
        
-       function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+           // PRIORITY
        
-       var _react = __webpack_require__(3);
+           addUnitPriority('minute', 14);
        
-       var _react2 = _interopRequireDefault(_react);
+           // PARSING
        
-       var _reactDom = __webpack_require__(160);
+           addRegexToken('m',  match1to2);
+           addRegexToken('mm', match1to2, match2);
+           addParseToken(['m', 'mm'], MINUTE);
        
-       var _reactDom2 = _interopRequireDefault(_reactDom);
+           // MOMENTS
        
-       var _rcUtil = __webpack_require__(173);
+           var getSetMinute = makeGetSet('Minutes', false);
        
-       var _Popup = __webpack_require__(196);
+           // FORMATTING
        
-       var _Popup2 = _interopRequireDefault(_Popup);
+           addFormatToken('s', ['ss', 2], 0, 'second');
        
-       var _utils = __webpack_require__(217);
+           // ALIASES
        
-       function noop() {}
+           addUnitAlias('second', 's');
        
-       function returnEmptyString() {
-         return '';
-       }
+           // PRIORITY
        
-       var Trigger = _react2['default'].createClass({
-         displayName: 'Trigger',
+           addUnitPriority('second', 15);
        
-         propTypes: {
-           action: _react.PropTypes.any,
-           getPopupClassNameFromAlign: _react.PropTypes.any,
-           onPopupVisibleChange: _react.PropTypes.func,
-           afterPopupVisibleChange: _react.PropTypes.func,
-           popup: _react.PropTypes.node.isRequired,
-           popupStyle: _react.PropTypes.object,
-           popupClassName: _react.PropTypes.string,
-           popupPlacement: _react.PropTypes.string,
-           builtinPlacements: _react.PropTypes.object,
-           popupTransitionName: _react.PropTypes.string,
-           popupAnimation: _react.PropTypes.any,
-           mouseEnterDelay: _react.PropTypes.number,
-           mouseLeaveDelay: _react.PropTypes.number,
-           getPopupContainer: _react.PropTypes.func,
-           destroyPopupOnHide: _react.PropTypes.bool,
-           popupAlign: _react.PropTypes.object,
-           popupVisible: _react.PropTypes.bool
-         },
+           // PARSING
        
-         getDefaultProps: function getDefaultProps() {
-           return {
-             prefixCls: 'rc-trigger-popup',
-             getPopupClassNameFromAlign: returnEmptyString,
-             onPopupVisibleChange: noop,
-             afterPopupVisibleChange: noop,
-             popupClassName: '',
-             mouseEnterDelay: 0,
-             mouseLeaveDelay: 0.1,
-             popupStyle: {},
-             destroyPopupOnHide: false,
-             popupAlign: {},
-             defaultPopupVisible: false,
-             action: []
-           };
-         },
+           addRegexToken('s',  match1to2);
+           addRegexToken('ss', match1to2, match2);
+           addParseToken(['s', 'ss'], SECOND);
        
-         getInitialState: function getInitialState() {
-           var props = this.props;
-           var popupVisible = undefined;
-           if ('popupVisible' in props) {
-             popupVisible = !!props.popupVisible;
-           } else {
-             popupVisible = !!props.defaultPopupVisible;
-           }
-           return { popupVisible: popupVisible };
-         },
+           // MOMENTS
        
-         componentDidMount: function componentDidMount() {
-           this.componentDidUpdate({}, {
-             popupVisible: this.state.popupVisible
+           var getSetSecond = makeGetSet('Seconds', false);
+       
+           // FORMATTING
+       
+           addFormatToken('S', 0, 0, function () {
+               return ~~(this.millisecond() / 100);
            });
-         },
        
-         componentWillReceiveProps: function componentWillReceiveProps(nextProps) {
-           if ('popupVisible' in nextProps) {
-             this.setState({
-               popupVisible: !!nextProps.popupVisible
-             });
-           }
-         },
+           addFormatToken(0, ['SS', 2], 0, function () {
+               return ~~(this.millisecond() / 10);
+           });
+       
+           addFormatToken(0, ['SSS', 3], 0, 'millisecond');
+           addFormatToken(0, ['SSSS', 4], 0, function () {
+               return this.millisecond() * 10;
+           });
+           addFormatToken(0, ['SSSSS', 5], 0, function () {
+               return this.millisecond() * 100;
+           });
+           addFormatToken(0, ['SSSSSS', 6], 0, function () {
+               return this.millisecond() * 1000;
+           });
+           addFormatToken(0, ['SSSSSSS', 7], 0, function () {
+               return this.millisecond() * 10000;
+           });
+           addFormatToken(0, ['SSSSSSSS', 8], 0, function () {
+               return this.millisecond() * 100000;
+           });
+           addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {
+               return this.millisecond() * 1000000;
+           });
+       
+       
+           // ALIASES
+       
+           addUnitAlias('millisecond', 'ms');
        
-         componentDidUpdate: function componentDidUpdate(prevProps, prevState) {
-           var _this = this;
+           // PRIORITY
        
-           var props = this.props;
-           var state = this.state;
-           if (this.popupRendered) {
-             var _ret = (function () {
-               var self = _this;
-               _reactDom2['default'].unstable_renderSubtreeIntoContainer(_this, _this.getPopupElement(), _this.getPopupContainer(), function renderPopup() {
-                 if (this.isMounted()) {
-                   self.popupDomNode = _reactDom2['default'].findDOMNode(this);
-                 } else {
-                   self.popupDomNode = null;
-                 }
-                 if (prevState.popupVisible !== state.popupVisible) {
-                   props.afterPopupVisibleChange(state.popupVisible);
-                 }
-               });
-               if (props.action.indexOf('click') !== -1) {
-                 if (state.popupVisible) {
-                   if (!_this.clickOutsideHandler) {
-                     _this.clickOutsideHandler = _rcUtil.Dom.addEventListener(document, 'mousedown', _this.onDocumentClick);
-                     _this.touchOutsideHandler = _rcUtil.Dom.addEventListener(document, 'touchstart', _this.onDocumentClick);
-                   }
-                   return {
-                     v: undefined
-                   };
-                 }
-               }
-               if (_this.clickOutsideHandler) {
-                 _this.clickOutsideHandler.remove();
-                 _this.touchOutsideHandler.remove();
-                 _this.clickOutsideHandler = null;
-                 _this.touchOutsideHandler = null;
-               }
-             })();
+           addUnitPriority('millisecond', 16);
        
-             if (typeof _ret === 'object') return _ret.v;
+           // PARSING
+       
+           addRegexToken('S',    match1to3, match1);
+           addRegexToken('SS',   match1to3, match2);
+           addRegexToken('SSS',  match1to3, match3);
+       
+           var token;
+           for (token = 'SSSS'; token.length <= 9; token += 'S') {
+               addRegexToken(token, matchUnsigned);
            }
-         },
        
-         componentWillUnmount: function componentWillUnmount() {
-           var popupContainer = this.popupContainer;
-           if (popupContainer) {
-             _reactDom2['default'].unmountComponentAtNode(popupContainer);
-             if (this.props.getPopupContainer) {
-               var mountNode = this.props.getPopupContainer();
-               mountNode.removeChild(popupContainer);
-             } else {
-               document.body.removeChild(popupContainer);
-             }
-             this.popupContainer = null;
+           function parseMs(input, array) {
+               array[MILLISECOND] = toInt(('0.' + input) * 1000);
            }
-           if (this.delayTimer) {
-             clearTimeout(this.delayTimer);
-             this.delayTimer = null;
+       
+           for (token = 'S'; token.length <= 9; token += 'S') {
+               addParseToken(token, parseMs);
            }
-           if (this.clickOutsideHandler) {
-             this.clickOutsideHandler.remove();
-             this.touchOutsideHandler.remove();
-             this.clickOutsideHandler = null;
-             this.touchOutsideHandler = null;
+           // MOMENTS
+       
+           var getSetMillisecond = makeGetSet('Milliseconds', false);
+       
+           // FORMATTING
+       
+           addFormatToken('z',  0, 0, 'zoneAbbr');
+           addFormatToken('zz', 0, 0, 'zoneName');
+       
+           // MOMENTS
+       
+           function getZoneAbbr () {
+               return this._isUTC ? 'UTC' : '';
            }
-         },
        
-         onMouseEnter: function onMouseEnter() {
-           this.delaySetPopupVisible(true, this.props.mouseEnterDelay);
-         },
+           function getZoneName () {
+               return this._isUTC ? 'Coordinated Universal Time' : '';
+           }
        
-         onMouseLeave: function onMouseLeave() {
-           this.delaySetPopupVisible(false, this.props.mouseLeaveDelay);
-         },
+           var momentPrototype__proto = Moment.prototype;
+       
+           momentPrototype__proto.add               = add_subtract__add;
+           momentPrototype__proto.calendar          = moment_calendar__calendar;
+           momentPrototype__proto.clone             = clone;
+           momentPrototype__proto.diff              = diff;
+           momentPrototype__proto.endOf             = endOf;
+           momentPrototype__proto.format            = format;
+           momentPrototype__proto.from              = from;
+           momentPrototype__proto.fromNow           = fromNow;
+           momentPrototype__proto.to                = to;
+           momentPrototype__proto.toNow             = toNow;
+           momentPrototype__proto.get               = stringGet;
+           momentPrototype__proto.invalidAt         = invalidAt;
+           momentPrototype__proto.isAfter           = isAfter;
+           momentPrototype__proto.isBefore          = isBefore;
+           momentPrototype__proto.isBetween         = isBetween;
+           momentPrototype__proto.isSame            = isSame;
+           momentPrototype__proto.isSameOrAfter     = isSameOrAfter;
+           momentPrototype__proto.isSameOrBefore    = isSameOrBefore;
+           momentPrototype__proto.isValid           = moment_valid__isValid;
+           momentPrototype__proto.lang              = lang;
+           momentPrototype__proto.locale            = locale;
+           momentPrototype__proto.localeData        = localeData;
+           momentPrototype__proto.max               = prototypeMax;
+           momentPrototype__proto.min               = prototypeMin;
+           momentPrototype__proto.parsingFlags      = parsingFlags;
+           momentPrototype__proto.set               = stringSet;
+           momentPrototype__proto.startOf           = startOf;
+           momentPrototype__proto.subtract          = add_subtract__subtract;
+           momentPrototype__proto.toArray           = toArray;
+           momentPrototype__proto.toObject          = toObject;
+           momentPrototype__proto.toDate            = toDate;
+           momentPrototype__proto.toISOString       = moment_format__toISOString;
+           momentPrototype__proto.toJSON            = toJSON;
+           momentPrototype__proto.toString          = toString;
+           momentPrototype__proto.unix              = unix;
+           momentPrototype__proto.valueOf           = to_type__valueOf;
+           momentPrototype__proto.creationData      = creationData;
        
-         onFocus: function onFocus() {
-           this.focusTime = Date.now();
-           this.setPopupVisible(true);
-         },
+           // Year
+           momentPrototype__proto.year       = getSetYear;
+           momentPrototype__proto.isLeapYear = getIsLeapYear;
        
-         onMouseDown: function onMouseDown() {
-           this.preClickTime = Date.now();
-         },
+           // Week Year
+           momentPrototype__proto.weekYear    = getSetWeekYear;
+           momentPrototype__proto.isoWeekYear = getSetISOWeekYear;
        
-         onTouchStart: function onTouchStart() {
-           this.preTouchTime = Date.now();
-         },
+           // Quarter
+           momentPrototype__proto.quarter = momentPrototype__proto.quarters = getSetQuarter;
        
-         onBlur: function onBlur() {
-           this.setPopupVisible(false);
-         },
+           // Month
+           momentPrototype__proto.month       = getSetMonth;
+           momentPrototype__proto.daysInMonth = getDaysInMonth;
        
-         onClick: function onClick(event) {
-           // focus will trigger click
-           if (this.focusTime) {
-             var preTime = undefined;
-             if (this.preClickTime && this.preTouchTime) {
-               preTime = Math.min(this.preClickTime, this.preTouchTime);
-             } else if (this.preClickTime) {
-               preTime = this.preClickTime;
-             } else if (this.preTouchTime) {
-               preTime = this.preTouchTime;
-             }
-             if (Math.abs(preTime - this.focusTime) < 20) {
-               return;
-             }
-             this.focusTime = 0;
-           }
-           this.preClickTime = 0;
-           this.preTouchTime = 0;
-           event.preventDefault();
-           this.setPopupVisible(!this.state.popupVisible);
-         },
+           // Week
+           momentPrototype__proto.week           = momentPrototype__proto.weeks        = getSetWeek;
+           momentPrototype__proto.isoWeek        = momentPrototype__proto.isoWeeks     = getSetISOWeek;
+           momentPrototype__proto.weeksInYear    = getWeeksInYear;
+           momentPrototype__proto.isoWeeksInYear = getISOWeeksInYear;
+       
+           // Day
+           momentPrototype__proto.date       = getSetDayOfMonth;
+           momentPrototype__proto.day        = momentPrototype__proto.days             = getSetDayOfWeek;
+           momentPrototype__proto.weekday    = getSetLocaleDayOfWeek;
+           momentPrototype__proto.isoWeekday = getSetISODayOfWeek;
+           momentPrototype__proto.dayOfYear  = getSetDayOfYear;
+       
+           // Hour
+           momentPrototype__proto.hour = momentPrototype__proto.hours = getSetHour;
+       
+           // Minute
+           momentPrototype__proto.minute = momentPrototype__proto.minutes = getSetMinute;
+       
+           // Second
+           momentPrototype__proto.second = momentPrototype__proto.seconds = getSetSecond;
+       
+           // Millisecond
+           momentPrototype__proto.millisecond = momentPrototype__proto.milliseconds = getSetMillisecond;
+       
+           // Offset
+           momentPrototype__proto.utcOffset            = getSetOffset;
+           momentPrototype__proto.utc                  = setOffsetToUTC;
+           momentPrototype__proto.local                = setOffsetToLocal;
+           momentPrototype__proto.parseZone            = setOffsetToParsedOffset;
+           momentPrototype__proto.hasAlignedHourOffset = hasAlignedHourOffset;
+           momentPrototype__proto.isDST                = isDaylightSavingTime;
+           momentPrototype__proto.isLocal              = isLocal;
+           momentPrototype__proto.isUtcOffset          = isUtcOffset;
+           momentPrototype__proto.isUtc                = isUtc;
+           momentPrototype__proto.isUTC                = isUtc;
+       
+           // Timezone
+           momentPrototype__proto.zoneAbbr = getZoneAbbr;
+           momentPrototype__proto.zoneName = getZoneName;
+       
+           // Deprecations
+           momentPrototype__proto.dates  = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth);
+           momentPrototype__proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth);
+           momentPrototype__proto.years  = deprecate('years accessor is deprecated. Use year instead', getSetYear);
+           momentPrototype__proto.zone   = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone);
+           momentPrototype__proto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted);
+       
+           var momentPrototype = momentPrototype__proto;
+       
+           function moment__createUnix (input) {
+               return local__createLocal(input * 1000);
+           }
+       
+           function moment__createInZone () {
+               return local__createLocal.apply(null, arguments).parseZone();
+           }
+       
+           function preParsePostFormat (string) {
+               return string;
+           }
+       
+           var prototype__proto = Locale.prototype;
+       
+           prototype__proto.calendar        = locale_calendar__calendar;
+           prototype__proto.longDateFormat  = longDateFormat;
+           prototype__proto.invalidDate     = invalidDate;
+           prototype__proto.ordinal         = ordinal;
+           prototype__proto.preparse        = preParsePostFormat;
+           prototype__proto.postformat      = preParsePostFormat;
+           prototype__proto.relativeTime    = relative__relativeTime;
+           prototype__proto.pastFuture      = pastFuture;
+           prototype__proto.set             = locale_set__set;
+       
+           // Month
+           prototype__proto.months            =        localeMonths;
+           prototype__proto.monthsShort       =        localeMonthsShort;
+           prototype__proto.monthsParse       =        localeMonthsParse;
+           prototype__proto.monthsRegex       = monthsRegex;
+           prototype__proto.monthsShortRegex  = monthsShortRegex;
+       
+           // Week
+           prototype__proto.week = localeWeek;
+           prototype__proto.firstDayOfYear = localeFirstDayOfYear;
+           prototype__proto.firstDayOfWeek = localeFirstDayOfWeek;
+       
+           // Day of Week
+           prototype__proto.weekdays       =        localeWeekdays;
+           prototype__proto.weekdaysMin    =        localeWeekdaysMin;
+           prototype__proto.weekdaysShort  =        localeWeekdaysShort;
+           prototype__proto.weekdaysParse  =        localeWeekdaysParse;
+       
+           prototype__proto.weekdaysRegex       =        weekdaysRegex;
+           prototype__proto.weekdaysShortRegex  =        weekdaysShortRegex;
+           prototype__proto.weekdaysMinRegex    =        weekdaysMinRegex;
+       
+           // Hours
+           prototype__proto.isPM = localeIsPM;
+           prototype__proto.meridiem = localeMeridiem;
+       
+           function lists__get (format, index, field, setter) {
+               var locale = locale_locales__getLocale();
+               var utc = create_utc__createUTC().set(setter, index);
+               return locale[field](utc, format);
+           }
+       
+           function listMonthsImpl (format, index, field) {
+               if (typeof format === 'number') {
+                   index = format;
+                   format = undefined;
+               }
        
-         onDocumentClick: function onDocumentClick(event) {
-           var target = event.target;
-           var root = _reactDom2['default'].findDOMNode(this);
-           var popupNode = this.getPopupDomNode();
-           if (!_rcUtil.Dom.contains(root, target) && !_rcUtil.Dom.contains(popupNode, target)) {
-             this.setPopupVisible(false);
-           }
-         },
+               format = format || '';
        
-         getPopupDomNode: function getPopupDomNode() {
-           // for test
-           return this.popupDomNode;
-         },
+               if (index != null) {
+                   return lists__get(format, index, field, 'month');
+               }
        
-         getPopupContainer: function getPopupContainer() {
-           if (!this.popupContainer) {
-             this.popupContainer = document.createElement('div');
-             if (this.props.getPopupContainer) {
-               var mountNode = this.props.getPopupContainer();
-               mountNode.appendChild(this.popupContainer);
-             } else {
-               document.body.appendChild(this.popupContainer);
-             }
-           }
-           return this.popupContainer;
-         },
+               var i;
+               var out = [];
+               for (i = 0; i < 12; i++) {
+                   out[i] = lists__get(format, i, field, 'month');
+               }
+               return out;
+           }
+       
+           // ()
+           // (5)
+           // (fmt, 5)
+           // (fmt)
+           // (true)
+           // (true, 5)
+           // (true, fmt, 5)
+           // (true, fmt)
+           function listWeekdaysImpl (localeSorted, format, index, field) {
+               if (typeof localeSorted === 'boolean') {
+                   if (typeof format === 'number') {
+                       index = format;
+                       format = undefined;
+                   }
        
-         getPopupClassNameFromAlign: function getPopupClassNameFromAlign(align) {
-           var className = [];
-           var props = this.props;
-           var popupPlacement = props.popupPlacement;
-           var builtinPlacements = props.builtinPlacements;
-           var prefixCls = props.prefixCls;
+                   format = format || '';
+               } else {
+                   format = localeSorted;
+                   index = format;
+                   localeSorted = false;
        
-           if (popupPlacement && builtinPlacements) {
-             className.push((0, _utils.getPopupClassNameFromAlign)(builtinPlacements, prefixCls, align));
+                   if (typeof format === 'number') {
+                       index = format;
+                       format = undefined;
+                   }
+       
+                   format = format || '';
+               }
+       
+               var locale = locale_locales__getLocale(),
+                   shift = localeSorted ? locale._week.dow : 0;
+       
+               if (index != null) {
+                   return lists__get(format, (index + shift) % 7, field, 'day');
+               }
+       
+               var i;
+               var out = [];
+               for (i = 0; i < 7; i++) {
+                   out[i] = lists__get(format, (i + shift) % 7, field, 'day');
+               }
+               return out;
            }
-           if (props.getPopupClassNameFromAlign) {
-             className.push(props.getPopupClassNameFromAlign(align));
+       
+           function lists__listMonths (format, index) {
+               return listMonthsImpl(format, index, 'months');
            }
-           return className.join(' ');
-         },
        
-         getPopupAlign: function getPopupAlign() {
-           var props = this.props;
-           var popupPlacement = props.popupPlacement;
-           var popupAlign = props.popupAlign;
-           var builtinPlacements = props.builtinPlacements;
+           function lists__listMonthsShort (format, index) {
+               return listMonthsImpl(format, index, 'monthsShort');
+           }
        
-           if (popupPlacement && builtinPlacements) {
-             return (0, _utils.getAlignFromPlacement)(builtinPlacements, popupPlacement, popupAlign);
+           function lists__listWeekdays (localeSorted, format, index) {
+               return listWeekdaysImpl(localeSorted, format, index, 'weekdays');
            }
-           return popupAlign;
-         },
        
-         getPopupElement: function getPopupElement() {
-           var props = this.props;
-           var state = this.state;
-           var mouseProps = {};
-           if (props.action.indexOf('hover') !== -1) {
-             mouseProps.onMouseEnter = this.onMouseEnter;
-             mouseProps.onMouseLeave = this.onMouseLeave;
-           }
-           return _react2['default'].createElement(
-             _Popup2['default'],
-             _extends({ prefixCls: props.prefixCls,
-               destroyPopupOnHide: props.destroyPopupOnHide,
-               visible: state.popupVisible,
-               className: props.popupClassName,
-               action: props.action,
-               align: this.getPopupAlign(),
-               animation: props.popupAnimation,
-               getClassNameFromAlign: this.getPopupClassNameFromAlign
-             }, mouseProps, {
-               wrap: this,
-               style: props.popupStyle,
-               transitionName: props.popupTransitionName }),
-             props.popup
-           );
-         },
+           function lists__listWeekdaysShort (localeSorted, format, index) {
+               return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');
+           }
        
-         setPopupVisible: function setPopupVisible(popupVisible) {
-           if (this.state.popupVisible !== popupVisible) {
-             if (!('popupVisible' in this.props)) {
-               this.setState({
-                 popupVisible: popupVisible
-               });
-             }
-             this.props.onPopupVisibleChange(popupVisible);
+           function lists__listWeekdaysMin (localeSorted, format, index) {
+               return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');
            }
-         },
        
-         delaySetPopupVisible: function delaySetPopupVisible(visible, delayS) {
-           var _this2 = this;
+           locale_locales__getSetGlobalLocale('en', {
+               ordinalParse: /\d{1,2}(th|st|nd|rd)/,
+               ordinal : function (number) {
+                   var b = number % 10,
+                       output = (toInt(number % 100 / 10) === 1) ? 'th' :
+                       (b === 1) ? 'st' :
+                       (b === 2) ? 'nd' :
+                       (b === 3) ? 'rd' : 'th';
+                   return number + output;
+               }
+           });
        
-           var delay = delayS * 1000;
-           if (this.delayTimer) {
-             clearTimeout(this.delayTimer);
-             this.delayTimer = null;
+           // Side effect imports
+           utils_hooks__hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', locale_locales__getSetGlobalLocale);
+           utils_hooks__hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', locale_locales__getLocale);
+       
+           var mathAbs = Math.abs;
+       
+           function duration_abs__abs () {
+               var data           = this._data;
+       
+               this._milliseconds = mathAbs(this._milliseconds);
+               this._days         = mathAbs(this._days);
+               this._months       = mathAbs(this._months);
+       
+               data.milliseconds  = mathAbs(data.milliseconds);
+               data.seconds       = mathAbs(data.seconds);
+               data.minutes       = mathAbs(data.minutes);
+               data.hours         = mathAbs(data.hours);
+               data.months        = mathAbs(data.months);
+               data.years         = mathAbs(data.years);
+       
+               return this;
            }
-           if (delay) {
-             this.delayTimer = setTimeout(function () {
-               _this2.setPopupVisible(visible);
-               _this2.delayTimer = null;
-             }, delay);
-           } else {
-             this.setPopupVisible(visible);
+       
+           function duration_add_subtract__addSubtract (duration, input, value, direction) {
+               var other = create__createDuration(input, value);
+       
+               duration._milliseconds += direction * other._milliseconds;
+               duration._days         += direction * other._days;
+               duration._months       += direction * other._months;
+       
+               return duration._bubble();
            }
-         },
        
-         render: function render() {
-           this.popupRendered = this.popupRendered || this.state.popupVisible;
-           var props = this.props;
-           var children = props.children;
-           var child = _react2['default'].Children.only(children);
-           var childProps = child.props || {};
-           var newChildProps = {};
-           var trigger = props.action;
-           if (trigger.indexOf('click') !== -1) {
-             newChildProps.onClick = (0, _rcUtil.createChainedFunction)(this.onClick, childProps.onClick);
-             newChildProps.onMouseDown = (0, _rcUtil.createChainedFunction)(this.onMouseDown, childProps.onMouseDown);
-             newChildProps.onTouchStart = (0, _rcUtil.createChainedFunction)(this.onTouchStart, childProps.onTouchStart);
+           // supports only 2.0-style add(1, 's') or add(duration)
+           function duration_add_subtract__add (input, value) {
+               return duration_add_subtract__addSubtract(this, input, value, 1);
            }
-           if (trigger.indexOf('hover') !== -1) {
-             newChildProps.onMouseEnter = (0, _rcUtil.createChainedFunction)(this.onMouseEnter, childProps.onMouseEnter);
-             newChildProps.onMouseLeave = (0, _rcUtil.createChainedFunction)(this.onMouseLeave, childProps.onMouseLeave);
+       
+           // supports only 2.0-style subtract(1, 's') or subtract(duration)
+           function duration_add_subtract__subtract (input, value) {
+               return duration_add_subtract__addSubtract(this, input, value, -1);
            }
-           if (trigger.indexOf('focus') !== -1) {
-             newChildProps.onFocus = (0, _rcUtil.createChainedFunction)(this.onFocus, childProps.onFocus);
-             newChildProps.onBlur = (0, _rcUtil.createChainedFunction)(this.onBlur, childProps.onBlur);
+       
+           function absCeil (number) {
+               if (number < 0) {
+                   return Math.floor(number);
+               } else {
+                   return Math.ceil(number);
+               }
            }
        
-           return _react2['default'].cloneElement(child, newChildProps);
-         }
-       });
+           function bubble () {
+               var milliseconds = this._milliseconds;
+               var days         = this._days;
+               var months       = this._months;
+               var data         = this._data;
+               var seconds, minutes, hours, years, monthsFromDays;
+       
+               // if we have a mix of positive and negative values, bubble down first
+               // check: https://github.com/moment/moment/issues/2166
+               if (!((milliseconds >= 0 && days >= 0 && months >= 0) ||
+                       (milliseconds <= 0 && days <= 0 && months <= 0))) {
+                   milliseconds += absCeil(monthsToDays(months) + days) * 864e5;
+                   days = 0;
+                   months = 0;
+               }
        
-       exports['default'] = Trigger;
-       module.exports = exports['default'];
-
-/***/ },
-/* 173 */
-/***/ function(module, exports, __webpack_require__) {
-
-       'use strict';
+               // The following code bubbles up values, see the tests for
+               // examples of what that means.
+               data.milliseconds = milliseconds % 1000;
        
-       module.exports = {
-         guid: __webpack_require__(174),
-         classSet: __webpack_require__(175),
-         joinClasses: __webpack_require__(178),
-         KeyCode: __webpack_require__(179),
-         PureRenderMixin: __webpack_require__(180),
-         shallowEqual: __webpack_require__(181),
-         createChainedFunction: __webpack_require__(187),
-         Dom: {
-           addEventListener: __webpack_require__(188),
-           contains: __webpack_require__(193)
-         },
-         Children: {
-           toArray: __webpack_require__(194),
-           mapSelf: __webpack_require__(195)
-         }
-       };
-
-/***/ },
-/* 174 */
-/***/ function(module, exports) {
-
-       'use strict';
+               seconds           = absFloor(milliseconds / 1000);
+               data.seconds      = seconds % 60;
        
-       var seed = 0;
-       module.exports = function guid() {
-         return Date.now() + '_' + seed++;
-       };
-
-/***/ },
-/* 175 */
-/***/ function(module, exports, __webpack_require__) {
-
-       'use strict';
+               minutes           = absFloor(seconds / 60);
+               data.minutes      = minutes % 60;
        
-       var deprecate = __webpack_require__(176);
-       var classNames = __webpack_require__(177);
+               hours             = absFloor(minutes / 60);
+               data.hours        = hours % 24;
        
-       module.exports = deprecate(classNames, '`rcUtil.classSet()` is deprecated, use `classNames()` by `require(\'classnames\')` instead');
-
-/***/ },
-/* 176 */
-/***/ function(module, exports) {
-
-       /* WEBPACK VAR INJECTION */(function(global) {
-       /**
-        * Module exports.
-        */
+               days += absFloor(hours / 24);
        
-       module.exports = deprecate;
+               // convert days to months
+               monthsFromDays = absFloor(daysToMonths(days));
+               months += monthsFromDays;
+               days -= absCeil(monthsToDays(monthsFromDays));
        
-       /**
-        * Mark that a method should not be used.
-        * Returns a modified function which warns once by default.
-        *
-        * If `localStorage.noDeprecation = true` is set, then it is a no-op.
-        *
-        * If `localStorage.throwDeprecation = true` is set, then deprecated functions
-        * will throw an Error when invoked.
-        *
-        * If `localStorage.traceDeprecation = true` is set, then deprecated functions
-        * will invoke `console.trace()` instead of `console.error()`.
-        *
-        * @param {Function} fn - the function to deprecate
-        * @param {String} msg - the string to print to the console when `fn` is invoked
-        * @returns {Function} a new "deprecated" version of `fn`
-        * @api public
-        */
+               // 12 months -> 1 year
+               years = absFloor(months / 12);
+               months %= 12;
        
-       function deprecate (fn, msg) {
-         if (config('noDeprecation')) {
-           return fn;
-         }
+               data.days   = days;
+               data.months = months;
+               data.years  = years;
        
-         var warned = false;
-         function deprecated() {
-           if (!warned) {
-             if (config('throwDeprecation')) {
-               throw new Error(msg);
-             } else if (config('traceDeprecation')) {
-               console.trace(msg);
-             } else {
-               console.warn(msg);
-             }
-             warned = true;
+               return this;
            }
-           return fn.apply(this, arguments);
-         }
        
-         return deprecated;
-       }
+           function daysToMonths (days) {
+               // 400 years have 146097 days (taking into account leap year rules)
+               // 400 years have 12 months === 4800
+               return days * 4800 / 146097;
+           }
        
-       /**
-        * Checks `localStorage` for boolean values for the given `name`.
-        *
-        * @param {String} name
-        * @returns {Boolean}
-        * @api private
-        */
+           function monthsToDays (months) {
+               // the reverse of daysToMonths
+               return months * 146097 / 4800;
+           }
        
-       function config (name) {
-         // accessing global.localStorage can trigger a DOMException in sandboxed iframes
-         try {
-           if (!global.localStorage) return false;
-         } catch (_) {
-           return false;
-         }
-         var val = global.localStorage[name];
-         if (null == val) return false;
-         return String(val).toLowerCase() === 'true';
-       }
+           function as (units) {
+               var days;
+               var months;
+               var milliseconds = this._milliseconds;
        
-       /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))
-
-/***/ },
-/* 177 */
-/***/ function(module, exports, __webpack_require__) {
-
-       var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
-         Copyright (c) 2015 Jed Watson.
-         Licensed under the MIT License (MIT), see
-         http://jedwatson.github.io/classnames
-       */
-       /* global define */
+               units = normalizeUnits(units);
        
-       (function () {
-               'use strict';
+               if (units === 'month' || units === 'year') {
+                   days   = this._days   + milliseconds / 864e5;
+                   months = this._months + daysToMonths(days);
+                   return units === 'month' ? months : months / 12;
+               } else {
+                   // handle milliseconds separately because of floating point math errors (issue #1867)
+                   days = this._days + Math.round(monthsToDays(this._months));
+                   switch (units) {
+                       case 'week'   : return days / 7     + milliseconds / 6048e5;
+                       case 'day'    : return days         + milliseconds / 864e5;
+                       case 'hour'   : return days * 24    + milliseconds / 36e5;
+                       case 'minute' : return days * 1440  + milliseconds / 6e4;
+                       case 'second' : return days * 86400 + milliseconds / 1000;
+                       // Math.floor prevents floating point math errors here
+                       case 'millisecond': return Math.floor(days * 864e5) + milliseconds;
+                       default: throw new Error('Unknown unit ' + units);
+                   }
+               }
+           }
        
-               var hasOwn = {}.hasOwnProperty;
+           // TODO: Use this.as('ms')?
+           function duration_as__valueOf () {
+               return (
+                   this._milliseconds +
+                   this._days * 864e5 +
+                   (this._months % 12) * 2592e6 +
+                   toInt(this._months / 12) * 31536e6
+               );
+           }
        
-               function classNames () {
-                       var classes = '';
+           function makeAs (alias) {
+               return function () {
+                   return this.as(alias);
+               };
+           }
        
-                       for (var i = 0; i < arguments.length; i++) {
-                               var arg = arguments[i];
-                               if (!arg) continue;
+           var asMilliseconds = makeAs('ms');
+           var asSeconds      = makeAs('s');
+           var asMinutes      = makeAs('m');
+           var asHours        = makeAs('h');
+           var asDays         = makeAs('d');
+           var asWeeks        = makeAs('w');
+           var asMonths       = makeAs('M');
+           var asYears        = makeAs('y');
        
-                               var argType = typeof arg;
+           function duration_get__get (units) {
+               units = normalizeUnits(units);
+               return this[units + 's']();
+           }
        
-                               if (argType === 'string' || argType === 'number') {
-                                       classes += ' ' + arg;
-                               } else if (Array.isArray(arg)) {
-                                       classes += ' ' + classNames.apply(null, arg);
-                               } else if (argType === 'object') {
-                                       for (var key in arg) {
-                                               if (hasOwn.call(arg, key) && arg[key]) {
-                                                       classes += ' ' + key;
-                                               }
-                                       }
-                               }
-                       }
+           function makeGetter(name) {
+               return function () {
+                   return this._data[name];
+               };
+           }
+       
+           var milliseconds = makeGetter('milliseconds');
+           var seconds      = makeGetter('seconds');
+           var minutes      = makeGetter('minutes');
+           var hours        = makeGetter('hours');
+           var days         = makeGetter('days');
+           var months       = makeGetter('months');
+           var years        = makeGetter('years');
        
-                       return classes.substr(1);
-               }
+           function weeks () {
+               return absFloor(this.days() / 7);
+           }
        
-               if (typeof module !== 'undefined' && module.exports) {
-                       module.exports = classNames;
-               } else if (true) {
-                       // register as 'classnames', consistent with npm package name
-                       !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function () {
-                               return classNames;
-                       }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
-               } else {
-                       window.classNames = classNames;
-               }
-       }());
-
-
-/***/ },
-/* 178 */
-/***/ function(module, exports, __webpack_require__) {
-
-       'use strict';
+           var round = Math.round;
+           var thresholds = {
+               s: 45,  // seconds to minute
+               m: 45,  // minutes to hour
+               h: 22,  // hours to day
+               d: 26,  // days to month
+               M: 11   // months to year
+           };
        
-       var deprecate = __webpack_require__(176);
-       var classNames = __webpack_require__(177);
+           // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize
+           function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {
+               return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);
+           }
+       
+           function duration_humanize__relativeTime (posNegDuration, withoutSuffix, locale) {
+               var duration = create__createDuration(posNegDuration).abs();
+               var seconds  = round(duration.as('s'));
+               var minutes  = round(duration.as('m'));
+               var hours    = round(duration.as('h'));
+               var days     = round(duration.as('d'));
+               var months   = round(duration.as('M'));
+               var years    = round(duration.as('y'));
+       
+               var a = seconds < thresholds.s && ['s', seconds]  ||
+                       minutes <= 1           && ['m']           ||
+                       minutes < thresholds.m && ['mm', minutes] ||
+                       hours   <= 1           && ['h']           ||
+                       hours   < thresholds.h && ['hh', hours]   ||
+                       days    <= 1           && ['d']           ||
+                       days    < thresholds.d && ['dd', days]    ||
+                       months  <= 1           && ['M']           ||
+                       months  < thresholds.M && ['MM', months]  ||
+                       years   <= 1           && ['y']           || ['yy', years];
+       
+               a[2] = withoutSuffix;
+               a[3] = +posNegDuration > 0;
+               a[4] = locale;
+               return substituteTimeAgo.apply(null, a);
+           }
+       
+           // This function allows you to set the rounding function for relative time strings
+           function duration_humanize__getSetRelativeTimeRounding (roundingFunction) {
+               if (roundingFunction === undefined) {
+                   return round;
+               }
+               if (typeof(roundingFunction) === 'function') {
+                   round = roundingFunction;
+                   return true;
+               }
+               return false;
+           }
        
-       module.exports = deprecate(classNames, '`rcUtil.joinClasses()` is deprecated, use `classNames()` by `require(\'classnames\')` instead');
-
-/***/ },
-/* 179 */
-/***/ function(module, exports) {
-
-       /**
-        * @ignore
-        * some key-codes definition and utils from closure-library
-        * @author yiminghe@gmail.com
-        */
+           // This function allows you to set a threshold for relative time strings
+           function duration_humanize__getSetRelativeTimeThreshold (threshold, limit) {
+               if (thresholds[threshold] === undefined) {
+                   return false;
+               }
+               if (limit === undefined) {
+                   return thresholds[threshold];
+               }
+               thresholds[threshold] = limit;
+               return true;
+           }
        
-       'use strict';
+           function humanize (withSuffix) {
+               var locale = this.localeData();
+               var output = duration_humanize__relativeTime(this, !withSuffix, locale);
        
-       var KeyCode = {
-         /**
-          * MAC_ENTER
-          */
-         MAC_ENTER: 3,
-         /**
-          * BACKSPACE
-          */
-         BACKSPACE: 8,
-         /**
-          * TAB
-          */
-         TAB: 9,
-         /**
-          * NUMLOCK on FF/Safari Mac
-          */
-         NUM_CENTER: 12, // NUMLOCK on FF/Safari Mac
-         /**
-          * ENTER
-          */
-         ENTER: 13,
-         /**
-          * SHIFT
-          */
-         SHIFT: 16,
-         /**
-          * CTRL
-          */
-         CTRL: 17,
-         /**
-          * ALT
-          */
-         ALT: 18,
-         /**
-          * PAUSE
-          */
-         PAUSE: 19,
-         /**
-          * CAPS_LOCK
-          */
-         CAPS_LOCK: 20,
-         /**
-          * ESC
-          */
-         ESC: 27,
-         /**
-          * SPACE
-          */
-         SPACE: 32,
-         /**
-          * PAGE_UP
-          */
-         PAGE_UP: 33, // also NUM_NORTH_EAST
-         /**
-          * PAGE_DOWN
-          */
-         PAGE_DOWN: 34, // also NUM_SOUTH_EAST
-         /**
-          * END
-          */
-         END: 35, // also NUM_SOUTH_WEST
-         /**
-          * HOME
-          */
-         HOME: 36, // also NUM_NORTH_WEST
-         /**
-          * LEFT
-          */
-         LEFT: 37, // also NUM_WEST
-         /**
-          * UP
-          */
-         UP: 38, // also NUM_NORTH
-         /**
-          * RIGHT
-          */
-         RIGHT: 39, // also NUM_EAST
-         /**
-          * DOWN
-          */
-         DOWN: 40, // also NUM_SOUTH
-         /**
-          * PRINT_SCREEN
-          */
-         PRINT_SCREEN: 44,
-         /**
-          * INSERT
-          */
-         INSERT: 45, // also NUM_INSERT
-         /**
-          * DELETE
-          */
-         DELETE: 46, // also NUM_DELETE
-         /**
-          * ZERO
-          */
-         ZERO: 48,
-         /**
-          * ONE
-          */
-         ONE: 49,
-         /**
-          * TWO
-          */
-         TWO: 50,
-         /**
-          * THREE
-          */
-         THREE: 51,
-         /**
-          * FOUR
-          */
-         FOUR: 52,
-         /**
-          * FIVE
-          */
-         FIVE: 53,
-         /**
-          * SIX
-          */
-         SIX: 54,
-         /**
-          * SEVEN
-          */
-         SEVEN: 55,
-         /**
-          * EIGHT
-          */
-         EIGHT: 56,
-         /**
-          * NINE
-          */
-         NINE: 57,
-         /**
-          * QUESTION_MARK
-          */
-         QUESTION_MARK: 63, // needs localization
-         /**
-          * A
-          */
-         A: 65,
-         /**
-          * B
-          */
-         B: 66,
-         /**
-          * C
-          */
-         C: 67,
-         /**
-          * D
-          */
-         D: 68,
-         /**
-          * E
-          */
-         E: 69,
-         /**
-          * F
-          */
-         F: 70,
-         /**
-          * G
-          */
-         G: 71,
-         /**
-          * H
-          */
-         H: 72,
-         /**
-          * I
-          */
-         I: 73,
-         /**
-          * J
-          */
-         J: 74,
-         /**
-          * K
-          */
-         K: 75,
-         /**
-          * L
-          */
-         L: 76,
-         /**
-          * M
-          */
-         M: 77,
-         /**
-          * N
-          */
-         N: 78,
-         /**
-          * O
-          */
-         O: 79,
-         /**
-          * P
-          */
-         P: 80,
-         /**
-          * Q
-          */
-         Q: 81,
-         /**
-          * R
-          */
-         R: 82,
-         /**
-          * S
-          */
-         S: 83,
-         /**
-          * T
-          */
-         T: 84,
-         /**
-          * U
-          */
-         U: 85,
-         /**
-          * V
-          */
-         V: 86,
-         /**
-          * W
-          */
-         W: 87,
-         /**
-          * X
-          */
-         X: 88,
-         /**
-          * Y
-          */
-         Y: 89,
-         /**
-          * Z
-          */
-         Z: 90,
-         /**
-          * META
-          */
-         META: 91, // WIN_KEY_LEFT
-         /**
-          * WIN_KEY_RIGHT
-          */
-         WIN_KEY_RIGHT: 92,
-         /**
-          * CONTEXT_MENU
-          */
-         CONTEXT_MENU: 93,
-         /**
-          * NUM_ZERO
-          */
-         NUM_ZERO: 96,
-         /**
-          * NUM_ONE
-          */
-         NUM_ONE: 97,
-         /**
-          * NUM_TWO
-          */
-         NUM_TWO: 98,
-         /**
-          * NUM_THREE
-          */
-         NUM_THREE: 99,
-         /**
-          * NUM_FOUR
-          */
-         NUM_FOUR: 100,
-         /**
-          * NUM_FIVE
-          */
-         NUM_FIVE: 101,
-         /**
-          * NUM_SIX
-          */
-         NUM_SIX: 102,
-         /**
-          * NUM_SEVEN
-          */
-         NUM_SEVEN: 103,
-         /**
-          * NUM_EIGHT
-          */
-         NUM_EIGHT: 104,
-         /**
-          * NUM_NINE
-          */
-         NUM_NINE: 105,
-         /**
-          * NUM_MULTIPLY
-          */
-         NUM_MULTIPLY: 106,
-         /**
-          * NUM_PLUS
-          */
-         NUM_PLUS: 107,
-         /**
-          * NUM_MINUS
-          */
-         NUM_MINUS: 109,
-         /**
-          * NUM_PERIOD
-          */
-         NUM_PERIOD: 110,
-         /**
-          * NUM_DIVISION
-          */
-         NUM_DIVISION: 111,
-         /**
-          * F1
-          */
-         F1: 112,
-         /**
-          * F2
-          */
-         F2: 113,
-         /**
-          * F3
-          */
-         F3: 114,
-         /**
-          * F4
-          */
-         F4: 115,
-         /**
-          * F5
-          */
-         F5: 116,
-         /**
-          * F6
-          */
-         F6: 117,
-         /**
-          * F7
-          */
-         F7: 118,
-         /**
-          * F8
-          */
-         F8: 119,
-         /**
-          * F9
-          */
-         F9: 120,
-         /**
-          * F10
-          */
-         F10: 121,
-         /**
-          * F11
-          */
-         F11: 122,
-         /**
-          * F12
-          */
-         F12: 123,
-         /**
-          * NUMLOCK
-          */
-         NUMLOCK: 144,
-         /**
-          * SEMICOLON
-          */
-         SEMICOLON: 186, // needs localization
-         /**
-          * DASH
-          */
-         DASH: 189, // needs localization
-         /**
-          * EQUALS
-          */
-         EQUALS: 187, // needs localization
-         /**
-          * COMMA
-          */
-         COMMA: 188, // needs localization
-         /**
-          * PERIOD
-          */
-         PERIOD: 190, // needs localization
-         /**
-          * SLASH
-          */
-         SLASH: 191, // needs localization
-         /**
-          * APOSTROPHE
-          */
-         APOSTROPHE: 192, // needs localization
-         /**
-          * SINGLE_QUOTE
-          */
-         SINGLE_QUOTE: 222, // needs localization
-         /**
-          * OPEN_SQUARE_BRACKET
-          */
-         OPEN_SQUARE_BRACKET: 219, // needs localization
-         /**
-          * BACKSLASH
-          */
-         BACKSLASH: 220, // needs localization
-         /**
-          * CLOSE_SQUARE_BRACKET
-          */
-         CLOSE_SQUARE_BRACKET: 221, // needs localization
-         /**
-          * WIN_KEY
-          */
-         WIN_KEY: 224,
-         /**
-          * MAC_FF_META
-          */
-         MAC_FF_META: 224, // Firefox (Gecko) fires this for the meta key instead of 91
-         /**
-          * WIN_IME
-          */
-         WIN_IME: 229
-       };
+               if (withSuffix) {
+                   output = locale.pastFuture(+this, output);
+               }
        
-       /*
-        whether text and modified key is entered at the same time.
-        */
-       KeyCode.isTextModifyingKeyEvent = function isTextModifyingKeyEvent(e) {
-         var keyCode = e.keyCode;
-         if (e.altKey && !e.ctrlKey || e.metaKey ||
-         // Function keys don't generate text
-         keyCode >= KeyCode.F1 && keyCode <= KeyCode.F12) {
-           return false;
-         }
+               return locale.postformat(output);
+           }
+       
+           var iso_string__abs = Math.abs;
+       
+           function iso_string__toISOString() {
+               // for ISO strings we do not use the normal bubbling rules:
+               //  * milliseconds bubble up until they become hours
+               //  * days do not bubble at all
+               //  * months bubble up until they become years
+               // This is because there is no context-free conversion between hours and days
+               // (think of clock changes)
+               // and also not between days and months (28-31 days per month)
+               var seconds = iso_string__abs(this._milliseconds) / 1000;
+               var days         = iso_string__abs(this._days);
+               var months       = iso_string__abs(this._months);
+               var minutes, hours, years;
+       
+               // 3600 seconds -> 60 minutes -> 1 hour
+               minutes           = absFloor(seconds / 60);
+               hours             = absFloor(minutes / 60);
+               seconds %= 60;
+               minutes %= 60;
+       
+               // 12 months -> 1 year
+               years  = absFloor(months / 12);
+               months %= 12;
+       
+       
+               // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js
+               var Y = years;
+               var M = months;
+               var D = days;
+               var h = hours;
+               var m = minutes;
+               var s = seconds;
+               var total = this.asSeconds();
+       
+               if (!total) {
+                   // this is the same as C#'s (Noda) and python (isodate)...
+                   // but not other JS (goog.date)
+                   return 'P0D';
+               }
        
-         // The following keys are quite harmless, even in combination with
-         // CTRL, ALT or SHIFT.
-         switch (keyCode) {
-           case KeyCode.ALT:
-           case KeyCode.CAPS_LOCK:
-           case KeyCode.CONTEXT_MENU:
-           case KeyCode.CTRL:
-           case KeyCode.DOWN:
-           case KeyCode.END:
-           case KeyCode.ESC:
-           case KeyCode.HOME:
-           case KeyCode.INSERT:
-           case KeyCode.LEFT:
-           case KeyCode.MAC_FF_META:
-           case KeyCode.META:
-           case KeyCode.NUMLOCK:
-           case KeyCode.NUM_CENTER:
-           case KeyCode.PAGE_DOWN:
-           case KeyCode.PAGE_UP:
-           case KeyCode.PAUSE:
-           case KeyCode.PRINT_SCREEN:
-           case KeyCode.RIGHT:
-           case KeyCode.SHIFT:
-           case KeyCode.UP:
-           case KeyCode.WIN_KEY:
-           case KeyCode.WIN_KEY_RIGHT:
-             return false;
-           default:
-             return true;
-         }
-       };
+               return (total < 0 ? '-' : '') +
+                   'P' +
+                   (Y ? Y + 'Y' : '') +
+                   (M ? M + 'M' : '') +
+                   (D ? D + 'D' : '') +
+                   ((h || m || s) ? 'T' : '') +
+                   (h ? h + 'H' : '') +
+                   (m ? m + 'M' : '') +
+                   (s ? s + 'S' : '');
+           }
+       
+           var duration_prototype__proto = Duration.prototype;
+       
+           duration_prototype__proto.abs            = duration_abs__abs;
+           duration_prototype__proto.add            = duration_add_subtract__add;
+           duration_prototype__proto.subtract       = duration_add_subtract__subtract;
+           duration_prototype__proto.as             = as;
+           duration_prototype__proto.asMilliseconds = asMilliseconds;
+           duration_prototype__proto.asSeconds      = asSeconds;
+           duration_prototype__proto.asMinutes      = asMinutes;
+           duration_prototype__proto.asHours        = asHours;
+           duration_prototype__proto.asDays         = asDays;
+           duration_prototype__proto.asWeeks        = asWeeks;
+           duration_prototype__proto.asMonths       = asMonths;
+           duration_prototype__proto.asYears        = asYears;
+           duration_prototype__proto.valueOf        = duration_as__valueOf;
+           duration_prototype__proto._bubble        = bubble;
+           duration_prototype__proto.get            = duration_get__get;
+           duration_prototype__proto.milliseconds   = milliseconds;
+           duration_prototype__proto.seconds        = seconds;
+           duration_prototype__proto.minutes        = minutes;
+           duration_prototype__proto.hours          = hours;
+           duration_prototype__proto.days           = days;
+           duration_prototype__proto.weeks          = weeks;
+           duration_prototype__proto.months         = months;
+           duration_prototype__proto.years          = years;
+           duration_prototype__proto.humanize       = humanize;
+           duration_prototype__proto.toISOString    = iso_string__toISOString;
+           duration_prototype__proto.toString       = iso_string__toISOString;
+           duration_prototype__proto.toJSON         = iso_string__toISOString;
+           duration_prototype__proto.locale         = locale;
+           duration_prototype__proto.localeData     = localeData;
+       
+           // Deprecations
+           duration_prototype__proto.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', iso_string__toISOString);
+           duration_prototype__proto.lang = lang;
+       
+           // Side effect imports
+       
+           // FORMATTING
+       
+           addFormatToken('X', 0, 0, 'unix');
+           addFormatToken('x', 0, 0, 'valueOf');
+       
+           // PARSING
+       
+           addRegexToken('x', matchSigned);
+           addRegexToken('X', matchTimestamp);
+           addParseToken('X', function (input, array, config) {
+               config._d = new Date(parseFloat(input, 10) * 1000);
+           });
+           addParseToken('x', function (input, array, config) {
+               config._d = new Date(toInt(input));
+           });
        
-       /*
-        whether character is entered.
-        */
-       KeyCode.isCharacterKey = function isCharacterKey(keyCode) {
-         if (keyCode >= KeyCode.ZERO && keyCode <= KeyCode.NINE) {
-           return true;
-         }
+           // Side effect imports
+       
+       
+           utils_hooks__hooks.version = '2.14.1';
+       
+           setHookCallback(local__createLocal);
+       
+           utils_hooks__hooks.fn                    = momentPrototype;
+           utils_hooks__hooks.min                   = min;
+           utils_hooks__hooks.max                   = max;
+           utils_hooks__hooks.now                   = now;
+           utils_hooks__hooks.utc                   = create_utc__createUTC;
+           utils_hooks__hooks.unix                  = moment__createUnix;
+           utils_hooks__hooks.months                = lists__listMonths;
+           utils_hooks__hooks.isDate                = isDate;
+           utils_hooks__hooks.locale                = locale_locales__getSetGlobalLocale;
+           utils_hooks__hooks.invalid               = valid__createInvalid;
+           utils_hooks__hooks.duration              = create__createDuration;
+           utils_hooks__hooks.isMoment              = isMoment;
+           utils_hooks__hooks.weekdays              = lists__listWeekdays;
+           utils_hooks__hooks.parseZone             = moment__createInZone;
+           utils_hooks__hooks.localeData            = locale_locales__getLocale;
+           utils_hooks__hooks.isDuration            = isDuration;
+           utils_hooks__hooks.monthsShort           = lists__listMonthsShort;
+           utils_hooks__hooks.weekdaysMin           = lists__listWeekdaysMin;
+           utils_hooks__hooks.defineLocale          = defineLocale;
+           utils_hooks__hooks.updateLocale          = updateLocale;
+           utils_hooks__hooks.locales               = locale_locales__listLocales;
+           utils_hooks__hooks.weekdaysShort         = lists__listWeekdaysShort;
+           utils_hooks__hooks.normalizeUnits        = normalizeUnits;
+           utils_hooks__hooks.relativeTimeRounding = duration_humanize__getSetRelativeTimeRounding;
+           utils_hooks__hooks.relativeTimeThreshold = duration_humanize__getSetRelativeTimeThreshold;
+           utils_hooks__hooks.calendarFormat        = getCalendarFormat;
+           utils_hooks__hooks.prototype             = momentPrototype;
+       
+           var _moment = utils_hooks__hooks;
+       
+           return _moment;
+       
+       }));
+
+/***/ },
+/* 178 */
+/***/ function(module, exports, __webpack_require__) {
+
+       'use strict';
        
-         if (keyCode >= KeyCode.NUM_ZERO && keyCode <= KeyCode.NUM_MULTIPLY) {
-           return true;
-         }
+       Object.defineProperty(exports, "__esModule", {
+         value: true
+       });
        
-         if (keyCode >= KeyCode.A && keyCode <= KeyCode.Z) {
-           return true;
-         }
+       var _src = __webpack_require__(179);
        
-         // Safari sends zero key code for non-latin characters.
-         if (window.navigation.userAgent.indexOf('WebKit') !== -1 && keyCode === 0) {
-           return true;
-         }
+       var _src2 = _interopRequireDefault(_src);
+
+       function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+       exports.default = _src2.default;
+       module.exports = exports['default'];
+
+/***/ },
+/* 179 */
+/***/ function(module, exports, __webpack_require__) {
+
+       'use strict';
        
-         switch (keyCode) {
-           case KeyCode.SPACE:
-           case KeyCode.QUESTION_MARK:
-           case KeyCode.NUM_PLUS:
-           case KeyCode.NUM_MINUS:
-           case KeyCode.NUM_PERIOD:
-           case KeyCode.NUM_DIVISION:
-           case KeyCode.SEMICOLON:
-           case KeyCode.DASH:
-           case KeyCode.EQUALS:
-           case KeyCode.COMMA:
-           case KeyCode.PERIOD:
-           case KeyCode.SLASH:
-           case KeyCode.APOSTROPHE:
-           case KeyCode.SINGLE_QUOTE:
-           case KeyCode.OPEN_SQUARE_BRACKET:
-           case KeyCode.BACKSLASH:
-           case KeyCode.CLOSE_SQUARE_BRACKET:
-             return true;
-           default:
-             return false;
-         }
-       };
+       Object.defineProperty(exports, "__esModule", {
+         value: true
+       });
+       
+       var _TimePicker = __webpack_require__(180);
        
-       module.exports = KeyCode;
+       var _TimePicker2 = _interopRequireDefault(_TimePicker);
+
+       function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+       exports.default = _TimePicker2.default;
+       module.exports = exports['default'];
 
 /***/ },
 /* 180 */
 
        'use strict';
        
-       var shallowEqual = __webpack_require__(181);
+       Object.defineProperty(exports, "__esModule", {
+         value: true
+       });
        
-       /**
-        * If your React component's render function is "pure", e.g. it will render the
-        * same result given the same props and state, provide this Mixin for a
-        * considerable performance boost.
-        *
-        * Most React components have pure render functions.
-        *
-        * Example:
-        *
-        *   const ReactComponentWithPureRenderMixin =
-        *     require('ReactComponentWithPureRenderMixin');
-        *   React.createClass({
-        *     mixins: [ReactComponentWithPureRenderMixin],
-        *
-        *     render: function() {
-        *       return <div className={this.props.className}>foo</div>;
-        *     }
-        *   });
-        *
-        * Note: This only checks shallow equality for props and state. If these contain
-        * complex data structures this mixin may have false-negatives for deeper
-        * differences. Only mixin to components which have simple props and state, or
-        * use `forceUpdate()` when you know deep data structures have changed.
-        */
-       var ReactComponentWithPureRenderMixin = {
-         shouldComponentUpdate: function shouldComponentUpdate(nextProps, nextState) {
-           return !shallowEqual(this.props, nextProps) || !shallowEqual(this.state, nextState);
+       var _react = __webpack_require__(3);
+       
+       var _react2 = _interopRequireDefault(_react);
+       
+       var _rcTrigger = __webpack_require__(181);
+       
+       var _rcTrigger2 = _interopRequireDefault(_rcTrigger);
+       
+       var _Panel = __webpack_require__(213);
+       
+       var _Panel2 = _interopRequireDefault(_Panel);
+       
+       var _placements = __webpack_require__(237);
+       
+       var _placements2 = _interopRequireDefault(_placements);
+       
+       var _moment = __webpack_require__(177);
+       
+       var _moment2 = _interopRequireDefault(_moment);
+       
+       function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+       
+       function noop() {}
+       
+       function refFn(field, component) {
+         this[field] = component;
+       }
+       
+       var Picker = _react2.default.createClass({
+         displayName: 'Picker',
+       
+         propTypes: {
+           prefixCls: _react.PropTypes.string,
+           clearText: _react.PropTypes.string,
+           value: _react.PropTypes.object,
+           defaultOpenValue: _react.PropTypes.object,
+           disabled: _react.PropTypes.bool,
+           allowEmpty: _react.PropTypes.bool,
+           defaultValue: _react.PropTypes.object,
+           open: _react.PropTypes.bool,
+           defaultOpen: _react.PropTypes.bool,
+           align: _react.PropTypes.object,
+           placement: _react.PropTypes.any,
+           transitionName: _react.PropTypes.string,
+           getPopupContainer: _react.PropTypes.func,
+           placeholder: _react.PropTypes.string,
+           format: _react.PropTypes.string,
+           showHour: _react.PropTypes.bool,
+           style: _react.PropTypes.object,
+           className: _react.PropTypes.string,
+           showSecond: _react.PropTypes.bool,
+           disabledHours: _react.PropTypes.func,
+           disabledMinutes: _react.PropTypes.func,
+           disabledSeconds: _react.PropTypes.func,
+           hideDisabledOptions: _react.PropTypes.bool,
+           onChange: _react.PropTypes.func,
+           onOpen: _react.PropTypes.func,
+           onClose: _react.PropTypes.func
+         },
+       
+         getDefaultProps: function getDefaultProps() {
+           return {
+             clearText: 'clear',
+             prefixCls: 'rc-time-picker',
+             defaultOpen: false,
+             style: {},
+             className: '',
+             align: {},
+             defaultOpenValue: (0, _moment2.default)(),
+             allowEmpty: true,
+             showHour: true,
+             showSecond: true,
+             disabledHours: noop,
+             disabledMinutes: noop,
+             disabledSeconds: noop,
+             hideDisabledOptions: false,
+             placement: 'bottomLeft',
+             onChange: noop,
+             onOpen: noop,
+             onClose: noop
+           };
+         },
+         getInitialState: function getInitialState() {
+           this.savePanelRef = refFn.bind(this, 'panelInstance');
+           var _props = this.props;
+           var defaultOpen = _props.defaultOpen;
+           var defaultValue = _props.defaultValue;
+           var _props$open = _props.open;
+           var open = _props$open === undefined ? defaultOpen : _props$open;
+           var _props$value = _props.value;
+           var value = _props$value === undefined ? defaultValue : _props$value;
+       
+           return {
+             open: open,
+             value: value
+           };
+         },
+         componentWillReceiveProps: function componentWillReceiveProps(nextProps) {
+           var value = nextProps.value;
+           var open = nextProps.open;
+       
+           if ('value' in nextProps) {
+             this.setState({
+               value: value
+             });
+           }
+           if (open !== undefined) {
+             this.setState({ open: open });
+           }
+         },
+         onPanelChange: function onPanelChange(value) {
+           this.setValue(value);
+         },
+         onPanelClear: function onPanelClear() {
+           this.setValue(null);
+           this.setOpen(false);
+         },
+         onVisibleChange: function onVisibleChange(open) {
+           this.setOpen(open);
+         },
+         onEsc: function onEsc() {
+           this.setOpen(false);
+           this.refs.picker.focus();
+         },
+         onKeyDown: function onKeyDown(e) {
+           if (e.keyCode === 40) {
+             this.setOpen(true);
+           }
+         },
+         setValue: function setValue(value) {
+           if (!('value' in this.props)) {
+             this.setState({
+               value: value
+             });
+           }
+           this.props.onChange(value);
+         },
+         getFormat: function getFormat() {
+           var format = this.props.format;
+           if (format) {
+             return format;
+           }
+           if (!this.props.showSecond) {
+             return 'HH:mm';
+           }
+           if (!this.props.showHour) {
+             return 'mm:ss';
+           }
+           return 'HH:mm:ss';
+         },
+         getPanelElement: function getPanelElement() {
+           var _props2 = this.props;
+           var prefixCls = _props2.prefixCls;
+           var placeholder = _props2.placeholder;
+           var disabledHours = _props2.disabledHours;
+           var disabledMinutes = _props2.disabledMinutes;
+           var disabledSeconds = _props2.disabledSeconds;
+           var hideDisabledOptions = _props2.hideDisabledOptions;
+           var allowEmpty = _props2.allowEmpty;
+           var showHour = _props2.showHour;
+           var showSecond = _props2.showSecond;
+           var defaultOpenValue = _props2.defaultOpenValue;
+           var clearText = _props2.clearText;
+       
+           return _react2.default.createElement(_Panel2.default, {
+             clearText: clearText,
+             prefixCls: prefixCls + '-panel',
+             ref: this.savePanelRef,
+             value: this.state.value,
+             onChange: this.onPanelChange,
+             onClear: this.onPanelClear,
+             defaultOpenValue: defaultOpenValue,
+             showHour: showHour,
+             onEsc: this.onEsc,
+             showSecond: showSecond,
+             allowEmpty: allowEmpty,
+             format: this.getFormat(),
+             placeholder: placeholder,
+             disabledHours: disabledHours,
+             disabledMinutes: disabledMinutes,
+             disabledSeconds: disabledSeconds,
+             hideDisabledOptions: hideDisabledOptions
+           });
+         },
+         setOpen: function setOpen(open, callback) {
+           var _props3 = this.props;
+           var onOpen = _props3.onOpen;
+           var onClose = _props3.onClose;
+       
+           if (this.state.open !== open) {
+             this.setState({
+               open: open
+             }, callback);
+             var event = {
+               open: open
+             };
+             if (open) {
+               onOpen(event);
+             } else {
+               onClose(event);
+             }
+           }
+         },
+         render: function render() {
+           var _props4 = this.props;
+           var prefixCls = _props4.prefixCls;
+           var placeholder = _props4.placeholder;
+           var placement = _props4.placement;
+           var align = _props4.align;
+           var disabled = _props4.disabled;
+           var transitionName = _props4.transitionName;
+           var style = _props4.style;
+           var className = _props4.className;
+           var showHour = _props4.showHour;
+           var showSecond = _props4.showSecond;
+           var getPopupContainer = _props4.getPopupContainer;
+           var _state = this.state;
+           var open = _state.open;
+           var value = _state.value;
+       
+           var popupClassName = void 0;
+           if (!showHour || !showSecond) {
+             popupClassName = prefixCls + '-panel-narrow';
+           }
+           return _react2.default.createElement(
+             _rcTrigger2.default,
+             {
+               prefixCls: prefixCls + '-panel',
+               popupClassName: popupClassName,
+               popup: this.getPanelElement(),
+               popupAlign: align,
+               builtinPlacements: _placements2.default,
+               popupPlacement: placement,
+               action: disabled ? [] : ['click'],
+               destroyPopupOnHide: true,
+               getPopupContainer: getPopupContainer,
+               popupTransitionName: transitionName,
+               popupVisible: open,
+               onPopupVisibleChange: this.onVisibleChange
+             },
+             _react2.default.createElement(
+               'span',
+               { className: prefixCls + ' ' + className, style: style },
+               _react2.default.createElement('input', {
+                 className: prefixCls + '-input',
+                 ref: 'picker', type: 'text', placeholder: placeholder,
+                 readOnly: true,
+                 onKeyDown: this.onKeyDown,
+                 disabled: disabled, value: value && value.format(this.getFormat()) || ''
+               }),
+               _react2.default.createElement('span', { className: prefixCls + '-icon' })
+             )
+           );
          }
-       };
+       });
        
-       module.exports = ReactComponentWithPureRenderMixin;
+       exports.default = Picker;
+       module.exports = exports['default'];
 
 /***/ },
 /* 181 */
 
        'use strict';
        
-       var shallowEqual = __webpack_require__(182);
-       
-       module.exports = shallowEqual;
+       module.exports = __webpack_require__(182);
 
 /***/ },
 /* 182 */
 
        'use strict';
        
-       var fetchKeys = __webpack_require__(183);
-       
-       module.exports = function shallowEqual(objA, objB, compare, compareContext) {
-       
-           var ret = compare ? compare.call(compareContext, objA, objB) : void 0;
-       
-           if (ret !== void 0) {
-               return !!ret;
-           }
-       
-           if (objA === objB) {
-               return true;
-           }
-       
-           if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {
-               return false;
-           }
-       
-           var keysA = fetchKeys(objA);
-           var keysB = fetchKeys(objB);
-       
-           var len = keysA.length;
-           if (len !== keysB.length) {
-               return false;
-           }
-       
-           compareContext = compareContext || null;
-       
-           // Test for A's keys different from B.
-           var bHasOwnProperty = Object.prototype.hasOwnProperty.bind(objB);
-           for (var i = 0; i < len; i++) {
-               var key = keysA[i];
-               if (!bHasOwnProperty(key)) {
-                   return false;
-               }
-               var valueA = objA[key];
-               var valueB = objB[key];
-       
-               var _ret = compare ? compare.call(compareContext, valueA, valueB, key) : void 0;
-               if (_ret === false || _ret === void 0 && valueA !== valueB) {
-                   return false;
-               }
-           }
-       
-           return true;
-       };
-
-/***/ },
-/* 183 */
-/***/ function(module, exports, __webpack_require__) {
-
-       /**
-        * lodash 3.1.2 (Custom Build) <https://lodash.com/>
-        * Build: `lodash modern modularize exports="npm" -o ./`
-        * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>
-        * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
-        * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
-        * Available under MIT license <https://lodash.com/license>
-        */
-       var getNative = __webpack_require__(184),
-           isArguments = __webpack_require__(185),
-           isArray = __webpack_require__(186);
-       
-       /** Used to detect unsigned integer values. */
-       var reIsUint = /^\d+$/;
-       
-       /** Used for native method references. */
-       var objectProto = Object.prototype;
-       
-       /** Used to check objects for own properties. */
-       var hasOwnProperty = objectProto.hasOwnProperty;
-       
-       /* Native method references for those with the same name as other `lodash` methods. */
-       var nativeKeys = getNative(Object, 'keys');
-       
-       /**
-        * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)
-        * of an array-like value.
-        */
-       var MAX_SAFE_INTEGER = 9007199254740991;
-       
-       /**
-        * The base implementation of `_.property` without support for deep paths.
-        *
-        * @private
-        * @param {string} key The key of the property to get.
-        * @returns {Function} Returns the new function.
-        */
-       function baseProperty(key) {
-         return function(object) {
-           return object == null ? undefined : object[key];
-         };
-       }
-       
-       /**
-        * Gets the "length" property value of `object`.
-        *
-        * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)
-        * that affects Safari on at least iOS 8.1-8.3 ARM64.
-        *
-        * @private
-        * @param {Object} object The object to query.
-        * @returns {*} Returns the "length" value.
-        */
-       var getLength = baseProperty('length');
-       
-       /**
-        * Checks if `value` is array-like.
-        *
-        * @private
-        * @param {*} value The value to check.
-        * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
-        */
-       function isArrayLike(value) {
-         return value != null && isLength(getLength(value));
-       }
-       
-       /**
-        * Checks if `value` is a valid array-like index.
-        *
-        * @private
-        * @param {*} value The value to check.
-        * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
-        * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
-        */
-       function isIndex(value, length) {
-         value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;
-         length = length == null ? MAX_SAFE_INTEGER : length;
-         return value > -1 && value % 1 == 0 && value < length;
-       }
-       
-       /**
-        * Checks if `value` is a valid array-like length.
-        *
-        * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).
-        *
-        * @private
-        * @param {*} value The value to check.
-        * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
-        */
-       function isLength(value) {
-         return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
-       }
-       
-       /**
-        * A fallback implementation of `Object.keys` which creates an array of the
-        * own enumerable property names of `object`.
-        *
-        * @private
-        * @param {Object} object The object to query.
-        * @returns {Array} Returns the array of property names.
-        */
-       function shimKeys(object) {
-         var props = keysIn(object),
-             propsLength = props.length,
-             length = propsLength && object.length;
-       
-         var allowIndexes = !!length && isLength(length) &&
-           (isArray(object) || isArguments(object));
-       
-         var index = -1,
-             result = [];
-       
-         while (++index < propsLength) {
-           var key = props[index];
-           if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) {
-             result.push(key);
-           }
-         }
-         return result;
-       }
-       
-       /**
-        * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.
-        * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
-        *
-        * @static
-        * @memberOf _
-        * @category Lang
-        * @param {*} value The value to check.
-        * @returns {boolean} Returns `true` if `value` is an object, else `false`.
-        * @example
-        *
-        * _.isObject({});
-        * // => true
-        *
-        * _.isObject([1, 2, 3]);
-        * // => true
-        *
-        * _.isObject(1);
-        * // => false
-        */
-       function isObject(value) {
-         // Avoid a V8 JIT bug in Chrome 19-20.
-         // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.
-         var type = typeof value;
-         return !!value && (type == 'object' || type == 'function');
-       }
-       
-       /**
-        * Creates an array of the own enumerable property names of `object`.
-        *
-        * **Note:** Non-object values are coerced to objects. See the
-        * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys)
-        * for more details.
-        *
-        * @static
-        * @memberOf _
-        * @category Object
-        * @param {Object} object The object to query.
-        * @returns {Array} Returns the array of property names.
-        * @example
-        *
-        * function Foo() {
-        *   this.a = 1;
-        *   this.b = 2;
-        * }
-        *
-        * Foo.prototype.c = 3;
-        *
-        * _.keys(new Foo);
-        * // => ['a', 'b'] (iteration order is not guaranteed)
-        *
-        * _.keys('hi');
-        * // => ['0', '1']
-        */
-       var keys = !nativeKeys ? shimKeys : function(object) {
-         var Ctor = object == null ? undefined : object.constructor;
-         if ((typeof Ctor == 'function' && Ctor.prototype === object) ||
-             (typeof object != 'function' && isArrayLike(object))) {
-           return shimKeys(object);
-         }
-         return isObject(object) ? nativeKeys(object) : [];
-       };
-       
-       /**
-        * Creates an array of the own and inherited enumerable property names of `object`.
-        *
-        * **Note:** Non-object values are coerced to objects.
-        *
-        * @static
-        * @memberOf _
-        * @category Object
-        * @param {Object} object The object to query.
-        * @returns {Array} Returns the array of property names.
-        * @example
-        *
-        * function Foo() {
-        *   this.a = 1;
-        *   this.b = 2;
-        * }
-        *
-        * Foo.prototype.c = 3;
-        *
-        * _.keysIn(new Foo);
-        * // => ['a', 'b', 'c'] (iteration order is not guaranteed)
-        */
-       function keysIn(object) {
-         if (object == null) {
-           return [];
-         }
-         if (!isObject(object)) {
-           object = Object(object);
-         }
-         var length = object.length;
-         length = (length && isLength(length) &&
-           (isArray(object) || isArguments(object)) && length) || 0;
-       
-         var Ctor = object.constructor,
-             index = -1,
-             isProto = typeof Ctor == 'function' && Ctor.prototype === object,
-             result = Array(length),
-             skipIndexes = length > 0;
-       
-         while (++index < length) {
-           result[index] = (index + '');
-         }
-         for (var key in object) {
-           if (!(skipIndexes && isIndex(key, length)) &&
-               !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {
-             result.push(key);
-           }
-         }
-         return result;
-       }
-       
-       module.exports = keys;
-
-
-/***/ },
-/* 184 */
-/***/ function(module, exports) {
-
-       /**
-        * lodash 3.9.1 (Custom Build) <https://lodash.com/>
-        * Build: `lodash modern modularize exports="npm" -o ./`
-        * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>
-        * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
-        * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
-        * Available under MIT license <https://lodash.com/license>
-        */
-       
-       /** `Object#toString` result references. */
-       var funcTag = '[object Function]';
-       
-       /** Used to detect host constructors (Safari > 5). */
-       var reIsHostCtor = /^\[object .+?Constructor\]$/;
-       
-       /**
-        * Checks if `value` is object-like.
-        *
-        * @private
-        * @param {*} value The value to check.
-        * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
-        */
-       function isObjectLike(value) {
-         return !!value && typeof value == 'object';
-       }
-       
-       /** Used for native method references. */
-       var objectProto = Object.prototype;
-       
-       /** Used to resolve the decompiled source of functions. */
-       var fnToString = Function.prototype.toString;
+       Object.defineProperty(exports, "__esModule", {
+         value: true
+       });
        
-       /** Used to check objects for own properties. */
-       var hasOwnProperty = objectProto.hasOwnProperty;
+       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; };
        
-       /**
-        * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
-        * of values.
-        */
-       var objToString = objectProto.toString;
+       var _react = __webpack_require__(3);
        
-       /** Used to detect if a method is native. */
-       var reIsNative = RegExp('^' +
-         fnToString.call(hasOwnProperty).replace(/[\\^$.*+?()[\]{}|]/g, '\\$&')
-         .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
-       );
+       var _react2 = _interopRequireDefault(_react);
        
-       /**
-        * Gets the native function at `key` of `object`.
-        *
-        * @private
-        * @param {Object} object The object to query.
-        * @param {string} key The key of the method to get.
-        * @returns {*} Returns the function if it's native, else `undefined`.
-        */
-       function getNative(object, key) {
-         var value = object == null ? undefined : object[key];
-         return isNative(value) ? value : undefined;
-       }
+       var _reactDom = __webpack_require__(37);
        
-       /**
-        * Checks if `value` is classified as a `Function` object.
-        *
-        * @static
-        * @memberOf _
-        * @category Lang
-        * @param {*} value The value to check.
-        * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
-        * @example
-        *
-        * _.isFunction(_);
-        * // => true
-        *
-        * _.isFunction(/abc/);
-        * // => false
-        */
-       function isFunction(value) {
-         // The use of `Object#toString` avoids issues with the `typeof` operator
-         // in older versions of Chrome and Safari which return 'function' for regexes
-         // and Safari 8 equivalents which return 'object' for typed array constructors.
-         return isObject(value) && objToString.call(value) == funcTag;
-       }
+       var _reactDom2 = _interopRequireDefault(_reactDom);
        
-       /**
-        * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.
-        * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
-        *
-        * @static
-        * @memberOf _
-        * @category Lang
-        * @param {*} value The value to check.
-        * @returns {boolean} Returns `true` if `value` is an object, else `false`.
-        * @example
-        *
-        * _.isObject({});
-        * // => true
-        *
-        * _.isObject([1, 2, 3]);
-        * // => true
-        *
-        * _.isObject(1);
-        * // => false
-        */
-       function isObject(value) {
-         // Avoid a V8 JIT bug in Chrome 19-20.
-         // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.
-         var type = typeof value;
-         return !!value && (type == 'object' || type == 'function');
-       }
+       var _contains = __webpack_require__(183);
        
-       /**
-        * Checks if `value` is a native function.
-        *
-        * @static
-        * @memberOf _
-        * @category Lang
-        * @param {*} value The value to check.
-        * @returns {boolean} Returns `true` if `value` is a native function, else `false`.
-        * @example
-        *
-        * _.isNative(Array.prototype.push);
-        * // => true
-        *
-        * _.isNative(_);
-        * // => false
-        */
-       function isNative(value) {
-         if (value == null) {
-           return false;
-         }
-         if (isFunction(value)) {
-           return reIsNative.test(fnToString.call(value));
-         }
-         return isObjectLike(value) && reIsHostCtor.test(value);
-       }
+       var _contains2 = _interopRequireDefault(_contains);
        
-       module.exports = getNative;
-
-
-/***/ },
-/* 185 */
-/***/ function(module, exports) {
-
-       /**
-        * lodash 3.0.4 (Custom Build) <https://lodash.com/>
-        * Build: `lodash modern modularize exports="npm" -o ./`
-        * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>
-        * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
-        * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
-        * Available under MIT license <https://lodash.com/license>
-        */
+       var _addEventListener = __webpack_require__(184);
        
-       /**
-        * Checks if `value` is object-like.
-        *
-        * @private
-        * @param {*} value The value to check.
-        * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
-        */
-       function isObjectLike(value) {
-         return !!value && typeof value == 'object';
-       }
+       var _addEventListener2 = _interopRequireDefault(_addEventListener);
        
-       /** Used for native method references. */
-       var objectProto = Object.prototype;
+       var _Popup = __webpack_require__(188);
        
-       /** Used to check objects for own properties. */
-       var hasOwnProperty = objectProto.hasOwnProperty;
+       var _Popup2 = _interopRequireDefault(_Popup);
        
-       /** Native method references. */
-       var propertyIsEnumerable = objectProto.propertyIsEnumerable;
+       var _utils = __webpack_require__(211);
        
-       /**
-        * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)
-        * of an array-like value.
-        */
-       var MAX_SAFE_INTEGER = 9007199254740991;
+       var _getContainerRenderMixin = __webpack_require__(212);
        
-       /**
-        * The base implementation of `_.property` without support for deep paths.
-        *
-        * @private
-        * @param {string} key The key of the property to get.
-        * @returns {Function} Returns the new function.
-        */
-       function baseProperty(key) {
-         return function(object) {
-           return object == null ? undefined : object[key];
-         };
-       }
+       var _getContainerRenderMixin2 = _interopRequireDefault(_getContainerRenderMixin);
        
-       /**
-        * Gets the "length" property value of `object`.
-        *
-        * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)
-        * that affects Safari on at least iOS 8.1-8.3 ARM64.
-        *
-        * @private
-        * @param {Object} object The object to query.
-        * @returns {*} Returns the "length" value.
-        */
-       var getLength = baseProperty('length');
+       function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
        
-       /**
-        * Checks if `value` is array-like.
-        *
-        * @private
-        * @param {*} value The value to check.
-        * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
-        */
-       function isArrayLike(value) {
-         return value != null && isLength(getLength(value));
-       }
+       function noop() {}
        
-       /**
-        * Checks if `value` is a valid array-like length.
-        *
-        * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).
-        *
-        * @private
-        * @param {*} value The value to check.
-        * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
-        */
-       function isLength(value) {
-         return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
+       function returnEmptyString() {
+         return '';
        }
        
-       /**
-        * Checks if `value` is classified as an `arguments` object.
-        *
-        * @static
-        * @memberOf _
-        * @category Lang
-        * @param {*} value The value to check.
-        * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
-        * @example
-        *
-        * _.isArguments(function() { return arguments; }());
-        * // => true
-        *
-        * _.isArguments([1, 2, 3]);
-        * // => false
-        */
-       function isArguments(value) {
-         return isObjectLike(value) && isArrayLike(value) &&
-           hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee');
-       }
+       var ALL_HANDLERS = ['onClick', 'onMouseDown', 'onTouchStart', 'onMouseEnter', 'onMouseLeave', 'onFocus', 'onBlur'];
        
-       module.exports = isArguments;
-
-
-/***/ },
-/* 186 */
-/***/ function(module, exports) {
-
-       /**
-        * lodash 3.0.4 (Custom Build) <https://lodash.com/>
-        * Build: `lodash modern modularize exports="npm" -o ./`
-        * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>
-        * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
-        * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
-        * Available under MIT license <https://lodash.com/license>
-        */
+       var Trigger = _react2["default"].createClass({
+         displayName: 'Trigger',
        
-       /** `Object#toString` result references. */
-       var arrayTag = '[object Array]',
-           funcTag = '[object Function]';
+         propTypes: {
+           children: _react.PropTypes.any,
+           action: _react.PropTypes.oneOfType([_react.PropTypes.string, _react.PropTypes.arrayOf(_react.PropTypes.string)]),
+           showAction: _react.PropTypes.any,
+           hideAction: _react.PropTypes.any,
+           getPopupClassNameFromAlign: _react.PropTypes.any,
+           onPopupVisibleChange: _react.PropTypes.func,
+           afterPopupVisibleChange: _react.PropTypes.func,
+           popup: _react.PropTypes.oneOfType([_react.PropTypes.node, _react.PropTypes.func]).isRequired,
+           popupStyle: _react.PropTypes.object,
+           prefixCls: _react.PropTypes.string,
+           popupClassName: _react.PropTypes.string,
+           popupPlacement: _react.PropTypes.string,
+           builtinPlacements: _react.PropTypes.object,
+           popupTransitionName: _react.PropTypes.string,
+           popupAnimation: _react.PropTypes.any,
+           mouseEnterDelay: _react.PropTypes.number,
+           mouseLeaveDelay: _react.PropTypes.number,
+           zIndex: _react.PropTypes.number,
+           focusDelay: _react.PropTypes.number,
+           blurDelay: _react.PropTypes.number,
+           getPopupContainer: _react.PropTypes.func,
+           destroyPopupOnHide: _react.PropTypes.bool,
+           mask: _react.PropTypes.bool,
+           onPopupAlign: _react.PropTypes.func,
+           popupAlign: _react.PropTypes.object,
+           popupVisible: _react.PropTypes.bool,
+           maskTransitionName: _react.PropTypes.string,
+           maskAnimation: _react.PropTypes.string
+         },
        
-       /** Used to detect host constructors (Safari > 5). */
-       var reIsHostCtor = /^\[object .+?Constructor\]$/;
+         mixins: [(0, _getContainerRenderMixin2["default"])({
+           autoMount: false,
        
-       /**
-        * Checks if `value` is object-like.
-        *
-        * @private
-        * @param {*} value The value to check.
-        * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
-        */
-       function isObjectLike(value) {
-         return !!value && typeof value == 'object';
-       }
+           isVisible: function isVisible(instance) {
+             return instance.state.popupVisible;
+           },
+           getContainer: function getContainer(instance) {
+             var popupContainer = document.createElement('div');
+             var mountNode = instance.props.getPopupContainer ? instance.props.getPopupContainer((0, _reactDom.findDOMNode)(instance)) : document.body;
+             mountNode.appendChild(popupContainer);
+             return popupContainer;
+           },
+           getComponent: function getComponent(instance) {
+             var props = instance.props;
+             var state = instance.state;
+       
+             var mouseProps = {};
+             if (instance.isMouseEnterToShow()) {
+               mouseProps.onMouseEnter = instance.onPopupMouseEnter;
+             }
+             if (instance.isMouseLeaveToHide()) {
+               mouseProps.onMouseLeave = instance.onPopupMouseLeave;
+             }
+             return _react2["default"].createElement(
+               _Popup2["default"],
+               _extends({
+                 prefixCls: props.prefixCls,
+                 destroyPopupOnHide: props.destroyPopupOnHide,
+                 visible: state.popupVisible,
+                 className: props.popupClassName,
+                 action: props.action,
+                 align: instance.getPopupAlign(),
+                 onAlign: props.onPopupAlign,
+                 animation: props.popupAnimation,
+                 getClassNameFromAlign: instance.getPopupClassNameFromAlign
+               }, mouseProps, {
+                 getRootDomNode: instance.getRootDomNode,
+                 style: props.popupStyle,
+                 mask: props.mask,
+                 zIndex: props.zIndex,
+                 transitionName: props.popupTransitionName,
+                 maskAnimation: props.maskAnimation,
+                 maskTransitionName: props.maskTransitionName
+               }),
+               typeof props.popup === 'function' ? props.popup() : props.popup
+             );
+           }
+         })],
        
-       /** Used for native method references. */
-       var objectProto = Object.prototype;
+         getDefaultProps: function getDefaultProps() {
+           return {
+             prefixCls: 'rc-trigger-popup',
+             getPopupClassNameFromAlign: returnEmptyString,
+             onPopupVisibleChange: noop,
+             afterPopupVisibleChange: noop,
+             onPopupAlign: noop,
+             popupClassName: '',
+             mouseEnterDelay: 0,
+             mouseLeaveDelay: 0.1,
+             focusDelay: 0,
+             blurDelay: 0.15,
+             popupStyle: {},
+             destroyPopupOnHide: false,
+             popupAlign: {},
+             defaultPopupVisible: false,
+             mask: false,
+             action: [],
+             showAction: [],
+             hideAction: []
+           };
+         },
+         getInitialState: function getInitialState() {
+           var props = this.props;
+           var popupVisible = void 0;
+           if ('popupVisible' in props) {
+             popupVisible = !!props.popupVisible;
+           } else {
+             popupVisible = !!props.defaultPopupVisible;
+           }
+           return {
+             popupVisible: popupVisible
+           };
+         },
+         componentWillMount: function componentWillMount() {
+           var _this = this;
        
-       /** Used to resolve the decompiled source of functions. */
-       var fnToString = Function.prototype.toString;
+           ALL_HANDLERS.forEach(function (h) {
+             _this['fire' + h] = function (e) {
+               _this.fireEvents(h, e);
+             };
+           });
+         },
+         componentDidMount: function componentDidMount() {
+           this.componentDidUpdate({}, {
+             popupVisible: this.state.popupVisible
+           });
+         },
+         componentWillReceiveProps: function componentWillReceiveProps(_ref) {
+           var popupVisible = _ref.popupVisible;
        
-       /** Used to check objects for own properties. */
-       var hasOwnProperty = objectProto.hasOwnProperty;
+           if (popupVisible !== undefined) {
+             this.setState({
+               popupVisible: popupVisible
+             });
+           }
+         },
+         componentDidUpdate: function componentDidUpdate(_, prevState) {
+           var props = this.props;
+           var state = this.state;
+           this.renderComponent(null, function () {
+             if (prevState.popupVisible !== state.popupVisible) {
+               props.afterPopupVisibleChange(state.popupVisible);
+             }
+           });
+           if (this.isClickToHide()) {
+             if (state.popupVisible) {
+               if (!this.clickOutsideHandler) {
+                 this.clickOutsideHandler = (0, _addEventListener2["default"])(document, 'mousedown', this.onDocumentClick);
+                 this.touchOutsideHandler = (0, _addEventListener2["default"])(document, 'touchstart', this.onDocumentClick);
+               }
+               return;
+             }
+           }
+           if (this.clickOutsideHandler) {
+             this.clickOutsideHandler.remove();
+             this.touchOutsideHandler.remove();
+             this.clickOutsideHandler = null;
+             this.touchOutsideHandler = null;
+           }
+         },
+         componentWillUnmount: function componentWillUnmount() {
+           this.clearDelayTimer();
+           if (this.clickOutsideHandler) {
+             this.clickOutsideHandler.remove();
+             this.touchOutsideHandler.remove();
+             this.clickOutsideHandler = null;
+             this.touchOutsideHandler = null;
+           }
+         },
+         onMouseEnter: function onMouseEnter(e) {
+           this.fireEvents('onMouseEnter', e);
+           this.delaySetPopupVisible(true, this.props.mouseEnterDelay);
+         },
+         onMouseLeave: function onMouseLeave(e) {
+           this.fireEvents('onMouseLeave', e);
+           this.delaySetPopupVisible(false, this.props.mouseLeaveDelay);
+         },
+         onPopupMouseEnter: function onPopupMouseEnter() {
+           this.clearDelayTimer();
+         },
+         onPopupMouseLeave: function onPopupMouseLeave(e) {
+           // https://github.com/react-component/trigger/pull/13
+           // react bug?
+           if (e.relatedTarget && !e.relatedTarget.setTimeout && this._component && (0, _contains2["default"])(this._component.getPopupDomNode(), e.relatedTarget)) {
+             return;
+           }
+           this.delaySetPopupVisible(false, this.props.mouseLeaveDelay);
+         },
+         onFocus: function onFocus(e) {
+           this.fireEvents('onFocus', e);
+           // incase focusin and focusout
+           this.clearDelayTimer();
+           if (this.isFocusToShow()) {
+             this.focusTime = Date.now();
+             this.delaySetPopupVisible(true, this.props.focusDelay);
+           }
+         },
+         onMouseDown: function onMouseDown(e) {
+           this.fireEvents('onMouseDown', e);
+           this.preClickTime = Date.now();
+         },
+         onTouchStart: function onTouchStart(e) {
+           this.fireEvents('onTouchStart', e);
+           this.preTouchTime = Date.now();
+         },
+         onBlur: function onBlur(e) {
+           this.fireEvents('onBlur', e);
+           this.clearDelayTimer();
+           if (this.isBlurToHide()) {
+             this.delaySetPopupVisible(false, this.props.blurDelay);
+           }
+         },
+         onClick: function onClick(event) {
+           this.fireEvents('onClick', event);
+           // focus will trigger click
+           if (this.focusTime) {
+             var preTime = void 0;
+             if (this.preClickTime && this.preTouchTime) {
+               preTime = Math.min(this.preClickTime, this.preTouchTime);
+             } else if (this.preClickTime) {
+               preTime = this.preClickTime;
+             } else if (this.preTouchTime) {
+               preTime = this.preTouchTime;
+             }
+             if (Math.abs(preTime - this.focusTime) < 20) {
+               return;
+             }
+             this.focusTime = 0;
+           }
+           this.preClickTime = 0;
+           this.preTouchTime = 0;
+           event.preventDefault();
+           var nextVisible = !this.state.popupVisible;
+           if (this.isClickToHide() && !nextVisible || nextVisible && this.isClickToShow()) {
+             this.setPopupVisible(!this.state.popupVisible);
+           }
+         },
+         onDocumentClick: function onDocumentClick(event) {
+           var target = event.target;
+           var root = (0, _reactDom.findDOMNode)(this);
+           var popupNode = this.getPopupDomNode();
+           if (!(0, _contains2["default"])(root, target) && !(0, _contains2["default"])(popupNode, target)) {
+             this.setPopupVisible(false);
+           }
+         },
+         getPopupDomNode: function getPopupDomNode() {
+           // for test
+           if (this._component) {
+             return this._component.isMounted() ? this._component.getPopupDomNode() : null;
+           }
+           return null;
+         },
+         getRootDomNode: function getRootDomNode() {
+           return _reactDom2["default"].findDOMNode(this);
+         },
+         getPopupClassNameFromAlign: function getPopupClassNameFromAlign(align) {
+           var className = [];
+           var props = this.props;
+           var popupPlacement = props.popupPlacement;
+           var builtinPlacements = props.builtinPlacements;
+           var prefixCls = props.prefixCls;
        
-       /**
-        * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
-        * of values.
-        */
-       var objToString = objectProto.toString;
+           if (popupPlacement && builtinPlacements) {
+             className.push((0, _utils.getPopupClassNameFromAlign)(builtinPlacements, prefixCls, align));
+           }
+           if (props.getPopupClassNameFromAlign) {
+             className.push(props.getPopupClassNameFromAlign(align));
+           }
+           return className.join(' ');
+         },
+         getPopupAlign: function getPopupAlign() {
+           var props = this.props;
+           var popupPlacement = props.popupPlacement;
+           var popupAlign = props.popupAlign;
+           var builtinPlacements = props.builtinPlacements;
        
-       /** Used to detect if a method is native. */
-       var reIsNative = RegExp('^' +
-         fnToString.call(hasOwnProperty).replace(/[\\^$.*+?()[\]{}|]/g, '\\$&')
-         .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
-       );
+           if (popupPlacement && builtinPlacements) {
+             return (0, _utils.getAlignFromPlacement)(builtinPlacements, popupPlacement, popupAlign);
+           }
+           return popupAlign;
+         },
+         setPopupVisible: function setPopupVisible(popupVisible) {
+           this.clearDelayTimer();
+           if (this.state.popupVisible !== popupVisible) {
+             if (!('popupVisible' in this.props)) {
+               this.setState({
+                 popupVisible: popupVisible
+               });
+             }
+             this.props.onPopupVisibleChange(popupVisible);
+           }
+         },
+         delaySetPopupVisible: function delaySetPopupVisible(visible, delayS) {
+           var _this2 = this;
        
-       /* Native method references for those with the same name as other `lodash` methods. */
-       var nativeIsArray = getNative(Array, 'isArray');
+           var delay = delayS * 1000;
+           this.clearDelayTimer();
+           if (delay) {
+             this.delayTimer = setTimeout(function () {
+               _this2.setPopupVisible(visible);
+               _this2.clearDelayTimer();
+             }, delay);
+           } else {
+             this.setPopupVisible(visible);
+           }
+         },
+         clearDelayTimer: function clearDelayTimer() {
+           if (this.delayTimer) {
+             clearTimeout(this.delayTimer);
+             this.delayTimer = null;
+           }
+         },
+         createTwoChains: function createTwoChains(event) {
+           var childPros = this.props.children.props;
+           var props = this.props;
+           if (childPros[event] && props[event]) {
+             return this['fire' + event];
+           }
+           return childPros[event] || props[event];
+         },
+         isClickToShow: function isClickToShow() {
+           var _props = this.props;
+           var action = _props.action;
+           var showAction = _props.showAction;
        
-       /**
-        * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)
-        * of an array-like value.
-        */
-       var MAX_SAFE_INTEGER = 9007199254740991;
+           return action.indexOf('click') !== -1 || showAction.indexOf('click') !== -1;
+         },
+         isClickToHide: function isClickToHide() {
+           var _props2 = this.props;
+           var action = _props2.action;
+           var hideAction = _props2.hideAction;
        
-       /**
-        * Gets the native function at `key` of `object`.
-        *
-        * @private
-        * @param {Object} object The object to query.
-        * @param {string} key The key of the method to get.
-        * @returns {*} Returns the function if it's native, else `undefined`.
-        */
-       function getNative(object, key) {
-         var value = object == null ? undefined : object[key];
-         return isNative(value) ? value : undefined;
-       }
+           return action.indexOf('click') !== -1 || hideAction.indexOf('click') !== -1;
+         },
+         isMouseEnterToShow: function isMouseEnterToShow() {
+           var _props3 = this.props;
+           var action = _props3.action;
+           var showAction = _props3.showAction;
        
-       /**
-        * Checks if `value` is a valid array-like length.
-        *
-        * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).
-        *
-        * @private
-        * @param {*} value The value to check.
-        * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
-        */
-       function isLength(value) {
-         return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
-       }
+           return action.indexOf('hover') !== -1 || showAction.indexOf('mouseEnter') !== -1;
+         },
+         isMouseLeaveToHide: function isMouseLeaveToHide() {
+           var _props4 = this.props;
+           var action = _props4.action;
+           var hideAction = _props4.hideAction;
        
-       /**
-        * Checks if `value` is classified as an `Array` object.
-        *
-        * @static
-        * @memberOf _
-        * @category Lang
-        * @param {*} value The value to check.
-        * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
-        * @example
-        *
-        * _.isArray([1, 2, 3]);
-        * // => true
-        *
-        * _.isArray(function() { return arguments; }());
-        * // => false
-        */
-       var isArray = nativeIsArray || function(value) {
-         return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag;
-       };
+           return action.indexOf('hover') !== -1 || hideAction.indexOf('mouseLeave') !== -1;
+         },
+         isFocusToShow: function isFocusToShow() {
+           var _props5 = this.props;
+           var action = _props5.action;
+           var showAction = _props5.showAction;
        
-       /**
-        * Checks if `value` is classified as a `Function` object.
-        *
-        * @static
-        * @memberOf _
-        * @category Lang
-        * @param {*} value The value to check.
-        * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
-        * @example
-        *
-        * _.isFunction(_);
-        * // => true
-        *
-        * _.isFunction(/abc/);
-        * // => false
-        */
-       function isFunction(value) {
-         // The use of `Object#toString` avoids issues with the `typeof` operator
-         // in older versions of Chrome and Safari which return 'function' for regexes
-         // and Safari 8 equivalents which return 'object' for typed array constructors.
-         return isObject(value) && objToString.call(value) == funcTag;
-       }
+           return action.indexOf('focus') !== -1 || showAction.indexOf('focus') !== -1;
+         },
+         isBlurToHide: function isBlurToHide() {
+           var _props6 = this.props;
+           var action = _props6.action;
+           var hideAction = _props6.hideAction;
        
-       /**
-        * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.
-        * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
-        *
-        * @static
-        * @memberOf _
-        * @category Lang
-        * @param {*} value The value to check.
-        * @returns {boolean} Returns `true` if `value` is an object, else `false`.
-        * @example
-        *
-        * _.isObject({});
-        * // => true
-        *
-        * _.isObject([1, 2, 3]);
-        * // => true
-        *
-        * _.isObject(1);
-        * // => false
-        */
-       function isObject(value) {
-         // Avoid a V8 JIT bug in Chrome 19-20.
-         // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.
-         var type = typeof value;
-         return !!value && (type == 'object' || type == 'function');
-       }
+           return action.indexOf('focus') !== -1 || hideAction.indexOf('blur') !== -1;
+         },
+         forcePopupAlign: function forcePopupAlign() {
+           if (this.state.popupVisible && this.popupInstance && this.popupInstance.alignInstance) {
+             this.popupInstance.alignInstance.forceAlign();
+           }
+         },
+         fireEvents: function fireEvents(type, e) {
+           var childCallback = this.props.children.props[type];
+           if (childCallback) {
+             childCallback(e);
+           }
+           var callback = this.props[type];
+           if (callback) {
+             callback(e);
+           }
+         },
+         render: function render() {
+           var props = this.props;
+           var children = props.children;
+           var child = _react2["default"].Children.only(children);
+           var newChildProps = {};
        
-       /**
-        * Checks if `value` is a native function.
-        *
-        * @static
-        * @memberOf _
-        * @category Lang
-        * @param {*} value The value to check.
-        * @returns {boolean} Returns `true` if `value` is a native function, else `false`.
-        * @example
-        *
-        * _.isNative(Array.prototype.push);
-        * // => true
-        *
-        * _.isNative(_);
-        * // => false
-        */
-       function isNative(value) {
-         if (value == null) {
-           return false;
-         }
-         if (isFunction(value)) {
-           return reIsNative.test(fnToString.call(value));
+           if (this.isClickToHide() || this.isClickToShow()) {
+             newChildProps.onClick = this.onClick;
+             newChildProps.onMouseDown = this.onMouseDown;
+             newChildProps.onTouchStart = this.onTouchStart;
+           } else {
+             newChildProps.onClick = this.createTwoChains('onClick');
+             newChildProps.onMouseDown = this.createTwoChains('onMouseDown');
+             newChildProps.onTouchStart = this.createTwoChains('onTouchStart');
+           }
+           if (this.isMouseEnterToShow()) {
+             newChildProps.onMouseEnter = this.onMouseEnter;
+           } else {
+             newChildProps.onMouseEnter = this.createTwoChains('onMouseEnter');
+           }
+           if (this.isMouseLeaveToHide()) {
+             newChildProps.onMouseLeave = this.onMouseLeave;
+           } else {
+             newChildProps.onMouseLeave = this.createTwoChains('onMouseLeave');
+           }
+           if (this.isFocusToShow() || this.isBlurToHide()) {
+             newChildProps.onFocus = this.onFocus;
+             newChildProps.onBlur = this.onBlur;
+           } else {
+             newChildProps.onFocus = this.createTwoChains('onFocus');
+             newChildProps.onBlur = this.createTwoChains('onBlur');
+           }
+       
+           return _react2["default"].cloneElement(child, newChildProps);
          }
-         return isObjectLike(value) && reIsHostCtor.test(value);
-       }
+       });
        
-       module.exports = isArray;
-
+       exports["default"] = Trigger;
+       module.exports = exports['default'];
 
 /***/ },
-/* 187 */
+/* 183 */
 /***/ function(module, exports) {
 
-       /**
-        * Safe chained function
-        *
-        * Will only create a new function if needed,
-        * otherwise will pass back existing functions or null.
-        *
-        * @returns {function|null}
-        */
        "use strict";
        
-       function createChainedFunction() {
-         var args = arguments;
-         return function chainedFunction() {
-           for (var i = 0; i < args.length; i++) {
-             if (args[i] && args[i].apply) {
-               args[i].apply(this, arguments);
-             }
+       module.exports = function contains(root, n) {
+         var node = n;
+         while (node) {
+           if (node === root) {
+             return true;
            }
-         };
-       }
+           node = node.parentNode;
+         }
        
-       module.exports = createChainedFunction;
+         return false;
+       };
 
 /***/ },
-/* 188 */
+/* 184 */
 /***/ function(module, exports, __webpack_require__) {
 
        'use strict';
        
-       Object.defineProperty(exports, '__esModule', {
+       Object.defineProperty(exports, "__esModule", {
          value: true
        });
-       exports['default'] = addEventListenerWrap;
+       exports["default"] = addEventListenerWrap;
        
-       function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
-       
-       var _addDomEventListener = __webpack_require__(189);
+       var _addDomEventListener = __webpack_require__(185);
        
        var _addDomEventListener2 = _interopRequireDefault(_addDomEventListener);
        
-       var _reactDom = __webpack_require__(160);
+       var _reactDom = __webpack_require__(37);
        
        var _reactDom2 = _interopRequireDefault(_reactDom);
        
+       function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+       
        function addEventListenerWrap(target, eventType, cb) {
          /* eslint camelcase: 2 */
-         var callback = _reactDom2['default'].unstable_batchedUpdates ? function run(e) {
-           _reactDom2['default'].unstable_batchedUpdates(cb, e);
+         var callback = _reactDom2["default"].unstable_batchedUpdates ? function run(e) {
+           _reactDom2["default"].unstable_batchedUpdates(cb, e);
          } : cb;
-         return (0, _addDomEventListener2['default'])(target, eventType, callback);
+         return (0, _addDomEventListener2["default"])(target, eventType, callback);
        }
-       
        module.exports = exports['default'];
 
 /***/ },
-/* 189 */
+/* 185 */
 /***/ function(module, exports, __webpack_require__) {
 
        'use strict';
        
        function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
        
-       var _EventObject = __webpack_require__(190);
+       var _EventObject = __webpack_require__(186);
        
        var _EventObject2 = _interopRequireDefault(_EventObject);
        
        module.exports = exports['default'];
 
 /***/ },
-/* 190 */
+/* 186 */
 /***/ function(module, exports, __webpack_require__) {
 
        /**
        
        function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
        
-       var _EventBaseObject = __webpack_require__(191);
+       var _EventBaseObject = __webpack_require__(187);
        
        var _EventBaseObject2 = _interopRequireDefault(_EventBaseObject);
        
-       var _objectAssign = __webpack_require__(192);
+       var _objectAssign = __webpack_require__(6);
        
        var _objectAssign2 = _interopRequireDefault(_objectAssign);
        
        module.exports = exports['default'];
 
 /***/ },
-/* 191 */
+/* 187 */
 /***/ function(module, exports) {
 
        /**
        module.exports = exports["default"];
 
 /***/ },
-/* 192 */
-/***/ function(module, exports) {
-
-       /* eslint-disable no-unused-vars */
-       'use strict';
-       var hasOwnProperty = Object.prototype.hasOwnProperty;
-       var propIsEnumerable = Object.prototype.propertyIsEnumerable;
-       
-       function toObject(val) {
-               if (val === null || val === undefined) {
-                       throw new TypeError('Object.assign cannot be called with null or undefined');
-               }
-       
-               return Object(val);
-       }
-       
-       module.exports = Object.assign || function (target, source) {
-               var from;
-               var to = toObject(target);
-               var symbols;
-       
-               for (var s = 1; s < arguments.length; s++) {
-                       from = Object(arguments[s]);
-       
-                       for (var key in from) {
-                               if (hasOwnProperty.call(from, key)) {
-                                       to[key] = from[key];
-                               }
-                       }
-       
-                       if (Object.getOwnPropertySymbols) {
-                               symbols = Object.getOwnPropertySymbols(from);
-                               for (var i = 0; i < symbols.length; i++) {
-                                       if (propIsEnumerable.call(from, symbols[i])) {
-                                               to[symbols[i]] = from[symbols[i]];
-                                       }
-                               }
-                       }
-               }
-       
-               return to;
-       };
-
-
-/***/ },
-/* 193 */
-/***/ function(module, exports) {
-
-       "use strict";
-       
-       module.exports = function contains(root, n) {
-         var node = n;
-         while (node) {
-           if (node === root) {
-             return true;
-           }
-           node = node.parentNode;
-         }
-       
-         return false;
-       };
-
-/***/ },
-/* 194 */
-/***/ function(module, exports, __webpack_require__) {
-
-       'use strict';
-       
-       var React = __webpack_require__(3);
-       
-       module.exports = function toArray(children) {
-         var ret = [];
-         React.Children.forEach(children, function each(c) {
-           ret.push(c);
-         });
-         return ret;
-       };
-
-/***/ },
-/* 195 */
-/***/ function(module, exports, __webpack_require__) {
-
-       'use strict';
-       
-       var React = __webpack_require__(3);
-       
-       function mirror(o) {
-         return o;
-       }
-       
-       module.exports = function mapSelf(children) {
-         // return ReactFragment
-         return React.Children.map(children, mirror);
-       };
-
-/***/ },
-/* 196 */
+/* 188 */
 /***/ function(module, exports, __webpack_require__) {
 
        'use strict';
        
-       Object.defineProperty(exports, '__esModule', {
+       Object.defineProperty(exports, "__esModule", {
          value: true
        });
        
-       function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+       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; };
        
        var _react = __webpack_require__(3);
        
        var _react2 = _interopRequireDefault(_react);
        
-       var _reactDom = __webpack_require__(160);
+       var _reactDom = __webpack_require__(37);
        
        var _reactDom2 = _interopRequireDefault(_reactDom);
        
-       var _rcAlign = __webpack_require__(197);
+       var _rcAlign = __webpack_require__(189);
        
        var _rcAlign2 = _interopRequireDefault(_rcAlign);
        
-       var _rcAnimate = __webpack_require__(208);
+       var _rcAnimate = __webpack_require__(200);
        
        var _rcAnimate2 = _interopRequireDefault(_rcAnimate);
        
-       var _PopupInner = __webpack_require__(216);
+       var _PopupInner = __webpack_require__(209);
        
        var _PopupInner2 = _interopRequireDefault(_PopupInner);
        
-       var Popup = _react2['default'].createClass({
+       var _LazyRenderBox = __webpack_require__(210);
+       
+       var _LazyRenderBox2 = _interopRequireDefault(_LazyRenderBox);
+       
+       function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+       
+       var Popup = _react2["default"].createClass({
          displayName: 'Popup',
        
          propTypes: {
            visible: _react.PropTypes.bool,
-           wrap: _react.PropTypes.object,
            style: _react.PropTypes.object,
            getClassNameFromAlign: _react.PropTypes.func,
+           onAlign: _react.PropTypes.func,
+           getRootDomNode: _react.PropTypes.func,
            onMouseEnter: _react.PropTypes.func,
+           align: _react.PropTypes.any,
+           destroyPopupOnHide: _react.PropTypes.bool,
            className: _react.PropTypes.string,
+           prefixCls: _react.PropTypes.string,
            onMouseLeave: _react.PropTypes.func
          },
        
          componentDidMount: function componentDidMount() {
            this.rootNode = this.getPopupDomNode();
          },
-       
          onAlign: function onAlign(popupDomNode, align) {
            var props = this.props;
            var alignClassName = props.getClassNameFromAlign(props.align);
              this.currentAlignClassName = currentAlignClassName;
              popupDomNode.className = this.getClassName(currentAlignClassName);
            }
+           props.onAlign(popupDomNode, align);
          },
-       
          getPopupDomNode: function getPopupDomNode() {
-           return _reactDom2['default'].findDOMNode(this);
+           return _reactDom2["default"].findDOMNode(this.refs.popup);
          },
-       
          getTarget: function getTarget() {
-           return _reactDom2['default'].findDOMNode(this.props.wrap);
+           return this.props.getRootDomNode();
+         },
+         getMaskTransitionName: function getMaskTransitionName() {
+           var props = this.props;
+           var transitionName = props.maskTransitionName;
+           var animation = props.maskAnimation;
+           if (!transitionName && animation) {
+             transitionName = props.prefixCls + '-' + animation;
+           }
+           return transitionName;
          },
-       
          getTransitionName: function getTransitionName() {
            var props = this.props;
            var transitionName = props.transitionName;
            }
            return transitionName;
          },
-       
          getClassName: function getClassName(currentAlignClassName) {
-           var props = this.props;
-           var prefixCls = props.prefixCls;
-       
-           var className = prefixCls + ' ' + props.className + ' ';
-           className += currentAlignClassName;
-           return className;
+           return this.props.prefixCls + ' ' + this.props.className + ' ' + currentAlignClassName;
          },
-       
-         render: function render() {
+         getPopupElement: function getPopupElement() {
            var props = this.props;
            var align = props.align;
            var style = props.style;
            if (!visible) {
              this.currentAlignClassName = null;
            }
+           var newStyle = _extends({}, style, this.getZIndexStyle());
+           var popupInnerProps = {
+             className: className,
+             prefixCls: prefixCls,
+             ref: 'popup',
+             onMouseEnter: props.onMouseEnter,
+             onMouseLeave: props.onMouseLeave,
+             style: newStyle
+           };
            if (destroyPopupOnHide) {
-             return _react2['default'].createElement(
-               _rcAnimate2['default'],
-               { component: '',
+             return _react2["default"].createElement(
+               _rcAnimate2["default"],
+               {
+                 component: '',
                  exclusive: true,
                  transitionAppear: true,
-                 transitionName: this.getTransitionName() },
-               visible ? _react2['default'].createElement(
-                 _rcAlign2['default'],
-                 { target: this.getTarget,
+                 transitionName: this.getTransitionName()
+               },
+               visible ? _react2["default"].createElement(
+                 _rcAlign2["default"],
+                 {
+                   target: this.getTarget,
                    key: 'popup',
+                   ref: this.saveAlign,
                    monitorWindowResize: true,
                    align: align,
-                   onAlign: this.onAlign },
-                 _react2['default'].createElement(
-                   _PopupInner2['default'],
-                   { className: className,
-                     visible: true,
-                     onMouseEnter: props.onMouseEnter,
-                     onMouseLeave: props.onMouseLeave,
-                     style: style },
+                   onAlign: this.onAlign
+                 },
+                 _react2["default"].createElement(
+                   _PopupInner2["default"],
+                   _extends({
+                     visible: true
+                   }, popupInnerProps),
                    props.children
                  )
                ) : null
              );
            }
-           return _react2['default'].createElement(
-             _rcAnimate2['default'],
-             { component: '',
+           return _react2["default"].createElement(
+             _rcAnimate2["default"],
+             {
+               component: '',
                exclusive: true,
                transitionAppear: true,
                transitionName: this.getTransitionName(),
-               showProp: 'xVisible' },
-             _react2['default'].createElement(
-               _rcAlign2['default'],
-               { target: this.getTarget,
+               showProp: 'xVisible'
+             },
+             _react2["default"].createElement(
+               _rcAlign2["default"],
+               {
+                 target: this.getTarget,
                  key: 'popup',
+                 ref: this.saveAlign,
                  monitorWindowResize: true,
                  xVisible: visible,
-                 childrenProps: {
-                   visible: 'xVisible'
-                 },
+                 childrenProps: { visible: 'xVisible' },
                  disabled: !visible,
                  align: align,
-                 onAlign: this.onAlign },
-               _react2['default'].createElement(
-                 _PopupInner2['default'],
-                 { className: className,
-                   hiddenClassName: hiddenClassName,
-                   onMouseEnter: props.onMouseEnter,
-                   onMouseLeave: props.onMouseLeave,
-                   style: style },
+                 onAlign: this.onAlign
+               },
+               _react2["default"].createElement(
+                 _PopupInner2["default"],
+                 _extends({
+                   hiddenClassName: hiddenClassName
+                 }, popupInnerProps),
                  props.children
                )
              )
            );
+         },
+         getZIndexStyle: function getZIndexStyle() {
+           var style = {};
+           var props = this.props;
+           if (props.zIndex !== undefined) {
+             style.zIndex = props.zIndex;
+           }
+           return style;
+         },
+         getMaskElement: function getMaskElement() {
+           var props = this.props;
+           var maskElement = void 0;
+           if (props.mask) {
+             var maskTransition = this.getMaskTransitionName();
+             maskElement = _react2["default"].createElement(_LazyRenderBox2["default"], {
+               style: this.getZIndexStyle(),
+               key: 'mask',
+               className: props.prefixCls + '-mask',
+               hiddenClassName: props.prefixCls + '-mask-hidden',
+               visible: props.visible
+             });
+             if (maskTransition) {
+               maskElement = _react2["default"].createElement(
+                 _rcAnimate2["default"],
+                 {
+                   key: 'mask',
+                   showProp: 'visible',
+                   transitionAppear: true,
+                   component: '',
+                   transitionName: maskTransition
+                 },
+                 maskElement
+               );
+             }
+           }
+           return maskElement;
+         },
+         saveAlign: function saveAlign(align) {
+           this.alignInstance = align;
+         },
+         render: function render() {
+           return _react2["default"].createElement(
+             'div',
+             null,
+             this.getMaskElement(),
+             this.getPopupElement()
+           );
          }
        });
        
-       exports['default'] = Popup;
+       exports["default"] = Popup;
        module.exports = exports['default'];
 
 /***/ },
-/* 197 */
+/* 189 */
 /***/ function(module, exports, __webpack_require__) {
 
-       // export this package's api
        'use strict';
        
-       Object.defineProperty(exports, '__esModule', {
+       Object.defineProperty(exports, "__esModule", {
          value: true
        });
        
-       function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
-       
-       var _Align = __webpack_require__(198);
+       var _Align = __webpack_require__(190);
        
        var _Align2 = _interopRequireDefault(_Align);
        
-       exports['default'] = _Align2['default'];
+       function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+       
+       exports["default"] = _Align2["default"]; // export this package's api
+       
        module.exports = exports['default'];
 
 /***/ },
-/* 198 */
+/* 190 */
 /***/ function(module, exports, __webpack_require__) {
 
        'use strict';
        
-       Object.defineProperty(exports, '__esModule', {
+       Object.defineProperty(exports, "__esModule", {
          value: true
        });
        
-       function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
-       
        var _react = __webpack_require__(3);
        
        var _react2 = _interopRequireDefault(_react);
        
-       var _reactDom = __webpack_require__(160);
+       var _reactDom = __webpack_require__(37);
        
        var _reactDom2 = _interopRequireDefault(_reactDom);
        
-       var _domAlign = __webpack_require__(199);
+       var _domAlign = __webpack_require__(191);
        
        var _domAlign2 = _interopRequireDefault(_domAlign);
        
-       var _rcUtil = __webpack_require__(173);
+       var _addEventListener = __webpack_require__(184);
        
-       var _isWindow = __webpack_require__(207);
+       var _addEventListener2 = _interopRequireDefault(_addEventListener);
+       
+       var _isWindow = __webpack_require__(199);
        
        var _isWindow2 = _interopRequireDefault(_isWindow);
        
+       function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+       
        function buffer(fn, ms) {
-         var timer = undefined;
-         return function bufferFn() {
+         var timer = void 0;
+       
+         function clear() {
            if (timer) {
              clearTimeout(timer);
+             timer = null;
            }
+         }
+       
+         function bufferFn() {
+           clear();
            timer = setTimeout(fn, ms);
-         };
+         }
+       
+         bufferFn.clear = clear;
+       
+         return bufferFn;
        }
        
-       var Align = _react2['default'].createClass({
+       var Align = _react2["default"].createClass({
          displayName: 'Align',
        
          propTypes: {
                return window;
              },
              onAlign: function onAlign() {},
+       
              monitorBufferTime: 50,
              monitorWindowResize: false,
              disabled: false
            };
          },
-       
          componentDidMount: function componentDidMount() {
            var props = this.props;
            // if parent ref not attached .... use document.getElementById
-           if (!props.disabled) {
-             var source = _reactDom2['default'].findDOMNode(this);
-             props.onAlign(source, (0, _domAlign2['default'])(source, props.target(), props.align));
-             if (props.monitorWindowResize) {
-               this.startMonitorWindowResize();
-             }
+           this.forceAlign();
+           if (!props.disabled && props.monitorWindowResize) {
+             this.startMonitorWindowResize();
            }
          },
-       
          componentDidUpdate: function componentDidUpdate(prevProps) {
            var reAlign = false;
            var props = this.props;
-           var currentTarget = undefined;
        
            if (!props.disabled) {
              if (prevProps.disabled || prevProps.align !== props.align) {
                reAlign = true;
-               currentTarget = props.target();
              } else {
                var lastTarget = prevProps.target();
-               currentTarget = props.target();
-               if ((0, _isWindow2['default'])(lastTarget) && (0, _isWindow2['default'])(currentTarget)) {
+               var currentTarget = props.target();
+               if ((0, _isWindow2["default"])(lastTarget) && (0, _isWindow2["default"])(currentTarget)) {
                  reAlign = false;
                } else if (lastTarget !== currentTarget) {
                  reAlign = true;
            }
        
            if (reAlign) {
-             var source = _reactDom2['default'].findDOMNode(this);
-             props.onAlign(source, (0, _domAlign2['default'])(source, currentTarget, props.align));
+             this.forceAlign();
            }
        
            if (props.monitorWindowResize && !props.disabled) {
              this.stopMonitorWindowResize();
            }
          },
-       
          componentWillUnmount: function componentWillUnmount() {
            this.stopMonitorWindowResize();
          },
-       
-         onWindowResize: function onWindowResize() {
-           var props = this.props;
-           if (!props.disabled) {
-             var source = _reactDom2['default'].findDOMNode(this);
-             props.onAlign(source, (0, _domAlign2['default'])(source, props.target(), props.align));
-           }
-         },
-       
          startMonitorWindowResize: function startMonitorWindowResize() {
            if (!this.resizeHandler) {
-             this.resizeHandler = _rcUtil.Dom.addEventListener(window, 'resize', buffer(this.onWindowResize, this.props.monitorBufferTime));
+             this.bufferMonitor = buffer(this.forceAlign, this.props.monitorBufferTime);
+             this.resizeHandler = (0, _addEventListener2["default"])(window, 'resize', this.bufferMonitor);
            }
          },
-       
          stopMonitorWindowResize: function stopMonitorWindowResize() {
            if (this.resizeHandler) {
+             this.bufferMonitor.clear();
              this.resizeHandler.remove();
              this.resizeHandler = null;
            }
          },
-       
+         forceAlign: function forceAlign() {
+           var props = this.props;
+           if (!props.disabled) {
+             var source = _reactDom2["default"].findDOMNode(this);
+             props.onAlign(source, (0, _domAlign2["default"])(source, props.target(), props.align));
+           }
+         },
          render: function render() {
            var _props = this.props;
            var childrenProps = _props.childrenProps;
            var children = _props.children;
        
-           var child = _react2['default'].Children.only(children);
+           var child = _react2["default"].Children.only(children);
            if (childrenProps) {
              var newProps = {};
              for (var prop in childrenProps) {
                  newProps[prop] = this.props[childrenProps[prop]];
                }
              }
-             return _react2['default'].cloneElement(child, newProps);
+             return _react2["default"].cloneElement(child, newProps);
            }
            return child;
          }
        });
        
-       exports['default'] = Align;
+       exports["default"] = Align;
        module.exports = exports['default'];
 
 /***/ },
-/* 199 */
+/* 191 */
 /***/ function(module, exports, __webpack_require__) {
 
        /**
        
        function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
        
-       var _utils = __webpack_require__(200);
+       var _utils = __webpack_require__(192);
        
        var _utils2 = _interopRequireDefault(_utils);
        
-       var _getOffsetParent = __webpack_require__(201);
+       var _getOffsetParent = __webpack_require__(193);
        
        var _getOffsetParent2 = _interopRequireDefault(_getOffsetParent);
        
-       var _getVisibleRectForElement = __webpack_require__(202);
+       var _getVisibleRectForElement = __webpack_require__(194);
        
        var _getVisibleRectForElement2 = _interopRequireDefault(_getVisibleRectForElement);
        
-       var _adjustForViewport = __webpack_require__(203);
+       var _adjustForViewport = __webpack_require__(195);
        
        var _adjustForViewport2 = _interopRequireDefault(_adjustForViewport);
        
-       var _getRegion = __webpack_require__(204);
+       var _getRegion = __webpack_require__(196);
        
        var _getRegion2 = _interopRequireDefault(_getRegion);
        
-       var _getElFuturePos = __webpack_require__(205);
+       var _getElFuturePos = __webpack_require__(197);
        
        var _getElFuturePos2 = _interopRequireDefault(_getElFuturePos);
        
          return elFuturePos.top < visibleRect.top || elFuturePos.top + elRegion.height > visibleRect.bottom;
        }
        
+       function isCompleteFailX(elFuturePos, elRegion, visibleRect) {
+         return elFuturePos.left > visibleRect.right || elFuturePos.left + elRegion.width < visibleRect.left;
+       }
+       
+       function isCompleteFailY(elFuturePos, elRegion, visibleRect) {
+         return elFuturePos.top > visibleRect.bottom || elFuturePos.top + elRegion.height < visibleRect.top;
+       }
+       
        function flip(points, reg, map) {
          var ret = [];
          _utils2['default'].each(points, function (p) {
            if (overflow.adjustX) {
              // 如果横向不能放下
              if (isFailX(elFuturePos, elRegion, visibleRect)) {
-               fail = 1;
                // 对齐位置反下
-               points = flip(points, /[lr]/ig, {
+               var newPoints = flip(points, /[lr]/ig, {
                  l: 'r',
                  r: 'l'
                });
                // 偏移量也反下
-               offset = flipOffset(offset, 0);
-               targetOffset = flipOffset(targetOffset, 0);
+               var newOffset = flipOffset(offset, 0);
+               var newTargetOffset = flipOffset(targetOffset, 0);
+               var newElFuturePos = (0, _getElFuturePos2['default'])(elRegion, refNodeRegion, newPoints, newOffset, newTargetOffset);
+               if (!isCompleteFailX(newElFuturePos, elRegion, visibleRect)) {
+                 fail = 1;
+                 points = newPoints;
+                 offset = newOffset;
+                 targetOffset = newTargetOffset;
+               }
              }
            }
        
            if (overflow.adjustY) {
              // 如果纵向不能放下
              if (isFailY(elFuturePos, elRegion, visibleRect)) {
-               fail = 1;
                // 对齐位置反下
-               points = flip(points, /[tb]/ig, {
+               var newPoints = flip(points, /[tb]/ig, {
                  t: 'b',
                  b: 't'
                });
                // 偏移量也反下
-               offset = flipOffset(offset, 1);
-               targetOffset = flipOffset(targetOffset, 1);
+               var newOffset = flipOffset(offset, 1);
+               var newTargetOffset = flipOffset(targetOffset, 1);
+               var newElFuturePos = (0, _getElFuturePos2['default'])(elRegion, refNodeRegion, newPoints, newOffset, newTargetOffset);
+               if (!isCompleteFailY(newElFuturePos, elRegion, visibleRect)) {
+                 fail = 1;
+                 points = newPoints;
+                 offset = newOffset;
+                 targetOffset = newTargetOffset;
+               }
              }
            }
        
        module.exports = exports['default'];
 
 /***/ },
-/* 200 */
+/* 192 */
 /***/ function(module, exports) {
 
        'use strict';
        module.exports = exports['default'];
 
 /***/ },
-/* 201 */
+/* 193 */
 /***/ function(module, exports, __webpack_require__) {
 
        'use strict';
        
        function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
        
-       var _utils = __webpack_require__(200);
+       var _utils = __webpack_require__(192);
        
        var _utils2 = _interopRequireDefault(_utils);
        
        module.exports = exports['default'];
 
 /***/ },
-/* 202 */
+/* 194 */
 /***/ function(module, exports, __webpack_require__) {
 
        'use strict';
        
        function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
        
-       var _utils = __webpack_require__(200);
+       var _utils = __webpack_require__(192);
        
        var _utils2 = _interopRequireDefault(_utils);
        
-       var _getOffsetParent = __webpack_require__(201);
+       var _getOffsetParent = __webpack_require__(193);
        
        var _getOffsetParent2 = _interopRequireDefault(_getOffsetParent);
        
        module.exports = exports['default'];
 
 /***/ },
-/* 203 */
+/* 195 */
 /***/ function(module, exports, __webpack_require__) {
 
        'use strict';
        
        function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
        
-       var _utils = __webpack_require__(200);
+       var _utils = __webpack_require__(192);
        
        var _utils2 = _interopRequireDefault(_utils);
        
        module.exports = exports['default'];
 
 /***/ },
-/* 204 */
+/* 196 */
 /***/ function(module, exports, __webpack_require__) {
 
        'use strict';
        
        function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
        
-       var _utils = __webpack_require__(200);
+       var _utils = __webpack_require__(192);
        
        var _utils2 = _interopRequireDefault(_utils);
        
        module.exports = exports['default'];
 
 /***/ },
-/* 205 */
+/* 197 */
 /***/ function(module, exports, __webpack_require__) {
 
        'use strict';
        
        function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
        
-       var _getAlignOffset = __webpack_require__(206);
+       var _getAlignOffset = __webpack_require__(198);
        
        var _getAlignOffset2 = _interopRequireDefault(_getAlignOffset);
        
        module.exports = exports['default'];
 
 /***/ },
-/* 206 */
+/* 198 */
 /***/ function(module, exports) {
 
        /**
        module.exports = exports['default'];
 
 /***/ },
-/* 207 */
+/* 199 */
 /***/ function(module, exports) {
 
        "use strict";
          value: true
        });
        exports["default"] = isWindow;
-       
        function isWindow(obj) {
          /* eslint no-eq-null: 0 */
          /* eslint eqeqeq: 0 */
          return obj != null && obj == obj.window;
        }
-       
-       module.exports = exports["default"];
+       module.exports = exports['default'];
 
 /***/ },
-/* 208 */
+/* 200 */
 /***/ function(module, exports, __webpack_require__) {
 
-       // export this package's api
        'use strict';
        
-       module.exports = __webpack_require__(209);
+       // export this package's api
+       module.exports = __webpack_require__(201);
 
 /***/ },
-/* 209 */
+/* 201 */
 /***/ function(module, exports, __webpack_require__) {
 
        'use strict';
        
-       Object.defineProperty(exports, '__esModule', {
+       Object.defineProperty(exports, "__esModule", {
          value: true
        });
        
-       function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
-       
-       function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
-       
        var _react = __webpack_require__(3);
        
        var _react2 = _interopRequireDefault(_react);
        
-       var _ChildrenUtils = __webpack_require__(210);
+       var _ChildrenUtils = __webpack_require__(202);
        
-       var _AnimateChild = __webpack_require__(211);
+       var _AnimateChild = __webpack_require__(203);
        
        var _AnimateChild2 = _interopRequireDefault(_AnimateChild);
        
-       var _util = __webpack_require__(215);
+       var _util = __webpack_require__(208);
        
        var _util2 = _interopRequireDefault(_util);
        
+       function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+       
+       function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+       
        var defaultKey = 'rc_animate_' + Date.now();
        
+       
        function getChildrenFromProps(props) {
          var children = props.children;
-         if (_react2['default'].isValidElement(children)) {
+         if (_react2["default"].isValidElement(children)) {
            if (!children.key) {
-             return _react2['default'].cloneElement(children, {
+             return _react2["default"].cloneElement(children, {
                key: defaultKey
              });
            }
        
        function noop() {}
        
-       var Animate = _react2['default'].createClass({
+       var Animate = _react2["default"].createClass({
          displayName: 'Animate',
        
          propTypes: {
-           component: _react2['default'].PropTypes.any,
-           animation: _react2['default'].PropTypes.object,
-           transitionName: _react2['default'].PropTypes.string,
-           transitionEnter: _react2['default'].PropTypes.bool,
-           transitionAppear: _react2['default'].PropTypes.bool,
-           exclusive: _react2['default'].PropTypes.bool,
-           transitionLeave: _react2['default'].PropTypes.bool,
-           onEnd: _react2['default'].PropTypes.func,
-           onEnter: _react2['default'].PropTypes.func,
-           onLeave: _react2['default'].PropTypes.func,
-           onAppear: _react2['default'].PropTypes.func,
-           showProp: _react2['default'].PropTypes.string
+           component: _react2["default"].PropTypes.any,
+           animation: _react2["default"].PropTypes.object,
+           transitionName: _react2["default"].PropTypes.oneOfType([_react2["default"].PropTypes.string, _react2["default"].PropTypes.object]),
+           transitionEnter: _react2["default"].PropTypes.bool,
+           transitionAppear: _react2["default"].PropTypes.bool,
+           exclusive: _react2["default"].PropTypes.bool,
+           transitionLeave: _react2["default"].PropTypes.bool,
+           onEnd: _react2["default"].PropTypes.func,
+           onEnter: _react2["default"].PropTypes.func,
+           onLeave: _react2["default"].PropTypes.func,
+           onAppear: _react2["default"].PropTypes.func,
+           showProp: _react2["default"].PropTypes.string
          },
        
          getDefaultProps: function getDefaultProps() {
              onAppear: noop
            };
          },
-       
          getInitialState: function getInitialState() {
            this.currentlyAnimatingKeys = {};
            this.keysToEnter = [];
              children: (0, _ChildrenUtils.toArrayChildren)(getChildrenFromProps(this.props))
            };
          },
-       
          componentDidMount: function componentDidMount() {
            var _this = this;
        
              });
            }
            children.forEach(function (child) {
-             _this.performAppear(child.key);
+             if (child) {
+               _this.performAppear(child.key);
+             }
            });
          },
-       
          componentWillReceiveProps: function componentWillReceiveProps(nextProps) {
            var _this2 = this;
        
+           this.nextProps = nextProps;
            var nextChildren = (0, _ChildrenUtils.toArrayChildren)(getChildrenFromProps(nextProps));
            var props = this.props;
+           // exclusive needs immediate response
+           if (props.exclusive) {
+             Object.keys(this.currentlyAnimatingKeys).forEach(function (key) {
+               _this2.stop(key);
+             });
+           }
            var showProp = props.showProp;
            var currentlyAnimatingKeys = this.currentlyAnimatingKeys;
            // last props children if exclusive
-           // exclusive needs immediate response
-           var currentChildren = this.state.children;
+           var currentChildren = props.exclusive ? (0, _ChildrenUtils.toArrayChildren)(getChildrenFromProps(props)) : this.state.children;
            // in case destroy in showProp mode
            var newChildren = [];
            if (showProp) {
              currentChildren.forEach(function (currentChild) {
-               var nextChild = (0, _ChildrenUtils.findChildInChildrenByKey)(nextChildren, currentChild.key);
-               var newChild = undefined;
+               var nextChild = currentChild && (0, _ChildrenUtils.findChildInChildrenByKey)(nextChildren, currentChild.key);
+               var newChild = void 0;
                if ((!nextChild || !nextChild.props[showProp]) && currentChild.props[showProp]) {
-                 newChild = _react2['default'].cloneElement(nextChild || currentChild, _defineProperty({}, showProp, true));
+                 newChild = _react2["default"].cloneElement(nextChild || currentChild, _defineProperty({}, showProp, true));
                } else {
                  newChild = nextChild;
                }
                }
              });
              nextChildren.forEach(function (nextChild) {
-               if (!(0, _ChildrenUtils.findChildInChildrenByKey)(currentChildren, nextChild.key)) {
+               if (!nextChild || !(0, _ChildrenUtils.findChildInChildrenByKey)(currentChildren, nextChild.key)) {
                  newChildren.push(nextChild);
                }
              });
            });
        
            nextChildren.forEach(function (child) {
-             var key = child.key;
-             if (currentlyAnimatingKeys[key]) {
+             var key = child && child.key;
+             if (child && currentlyAnimatingKeys[key]) {
                return;
              }
-             var hasPrev = (0, _ChildrenUtils.findChildInChildrenByKey)(currentChildren, key);
+             var hasPrev = child && (0, _ChildrenUtils.findChildInChildrenByKey)(currentChildren, key);
              if (showProp) {
                var showInNext = child.props[showProp];
                if (hasPrev) {
            });
        
            currentChildren.forEach(function (child) {
-             var key = child.key;
-             if (currentlyAnimatingKeys[key]) {
+             var key = child && child.key;
+             if (child && currentlyAnimatingKeys[key]) {
                return;
              }
-             var hasNext = (0, _ChildrenUtils.findChildInChildrenByKey)(nextChildren, key);
+             var hasNext = child && (0, _ChildrenUtils.findChildInChildrenByKey)(nextChildren, key);
              if (showProp) {
                var showInNow = child.props[showProp];
                if (hasNext) {
              }
            });
          },
-       
-         componentDidUpdate: function componentDidUpdate(prevProps) {
-           var _this3 = this;
-       
-           // exclusive needs immediate response
-           if (this.props.exclusive && this.props !== prevProps) {
-             Object.keys(this.currentlyAnimatingKeys).forEach(function (key) {
-               _this3.stop(key);
-             });
-           }
-           if (this.isMounted()) {
-             var keysToEnter = this.keysToEnter;
-             this.keysToEnter = [];
-             keysToEnter.forEach(this.performEnter);
-             var keysToLeave = this.keysToLeave;
-             this.keysToLeave = [];
-             keysToLeave.forEach(this.performLeave);
-           }
+         componentDidUpdate: function componentDidUpdate() {
+           var keysToEnter = this.keysToEnter;
+           this.keysToEnter = [];
+           keysToEnter.forEach(this.performEnter);
+           var keysToLeave = this.keysToLeave;
+           this.keysToLeave = [];
+           keysToLeave.forEach(this.performLeave);
          },
-       
          performEnter: function performEnter(key) {
            // may already remove by exclusive
            if (this.refs[key]) {
              this.refs[key].componentWillEnter(this.handleDoneAdding.bind(this, key, 'enter'));
            }
          },
-       
          performAppear: function performAppear(key) {
            if (this.refs[key]) {
              this.currentlyAnimatingKeys[key] = true;
              this.refs[key].componentWillAppear(this.handleDoneAdding.bind(this, key, 'appear'));
            }
          },
-       
          handleDoneAdding: function handleDoneAdding(key, type) {
            var props = this.props;
            delete this.currentlyAnimatingKeys[key];
+           // if update on exclusive mode, skip check
+           if (props.exclusive && props !== this.nextProps) {
+             return;
+           }
            var currentChildren = (0, _ChildrenUtils.toArrayChildren)(getChildrenFromProps(props));
            if (!this.isValidChildByKey(currentChildren, key)) {
              // exclusive will not need this
              this.performLeave(key);
            } else {
              if (type === 'appear') {
-               if (_util2['default'].allowAppearCallback(props)) {
+               if (_util2["default"].allowAppearCallback(props)) {
                  props.onAppear(key);
                  props.onEnd(key, true);
                }
              } else {
-               if (_util2['default'].allowEnterCallback(props)) {
+               if (_util2["default"].allowEnterCallback(props)) {
                  props.onEnter(key);
                  props.onEnd(key, true);
                }
              }
            }
          },
-       
          performLeave: function performLeave(key) {
            // may already remove by exclusive
            if (this.refs[key]) {
              this.refs[key].componentWillLeave(this.handleDoneLeaving.bind(this, key));
            }
          },
-       
          handleDoneLeaving: function handleDoneLeaving(key) {
            var props = this.props;
            delete this.currentlyAnimatingKeys[key];
+           // if update on exclusive mode, skip check
+           if (props.exclusive && props !== this.nextProps) {
+             return;
+           }
            var currentChildren = (0, _ChildrenUtils.toArrayChildren)(getChildrenFromProps(props));
            // in case state change is too fast
            if (this.isValidChildByKey(currentChildren, key)) {
              this.performEnter(key);
            } else {
-             if (_util2['default'].allowLeaveCallback(props)) {
-               props.onLeave(key);
-               props.onEnd(key, false);
-             }
+             var end = function end() {
+               if (_util2["default"].allowLeaveCallback(props)) {
+                 props.onLeave(key);
+                 props.onEnd(key, false);
+               }
+             };
+             /* eslint react/no-is-mounted:0 */
              if (this.isMounted() && !(0, _ChildrenUtils.isSameChildren)(this.state.children, currentChildren, props.showProp)) {
                this.setState({
                  children: currentChildren
-               });
+               }, end);
+             } else {
+               end();
              }
            }
          },
-       
          isValidChildByKey: function isValidChildByKey(currentChildren, key) {
            var showProp = this.props.showProp;
            if (showProp) {
            }
            return (0, _ChildrenUtils.findChildInChildrenByKey)(currentChildren, key);
          },
-       
          stop: function stop(key) {
            delete this.currentlyAnimatingKeys[key];
            var component = this.refs[key];
              component.stop();
            }
          },
-       
          render: function render() {
            var props = this.props;
+           this.nextProps = props;
            var stateChildren = this.state.children;
            var children = null;
            if (stateChildren) {
              children = stateChildren.map(function (child) {
+               if (child === null || child === undefined) {
+                 return child;
+               }
                if (!child.key) {
                  throw new Error('must set key for <rc-animate> children');
                }
-               return _react2['default'].createElement(
-                 _AnimateChild2['default'],
+               return _react2["default"].createElement(
+                 _AnimateChild2["default"],
                  {
                    key: child.key,
                    ref: child.key,
                    transitionName: props.transitionName,
                    transitionEnter: props.transitionEnter,
                    transitionAppear: props.transitionAppear,
-                   transitionLeave: props.transitionLeave },
+                   transitionLeave: props.transitionLeave
+                 },
                  child
                );
              });
            }
            var Component = props.component;
            if (Component) {
-             return _react2['default'].createElement(
+             var passedProps = props;
+             if (typeof Component === 'string') {
+               passedProps = {
+                 className: props.className,
+                 style: props.style
+               };
+             }
+             return _react2["default"].createElement(
                Component,
-               this.props,
+               passedProps,
                children
              );
            }
          }
        });
        
-       exports['default'] = Animate;
+       exports["default"] = Animate;
        module.exports = exports['default'];
 
 /***/ },
-/* 210 */
+/* 202 */
 /***/ function(module, exports, __webpack_require__) {
 
        'use strict';
        
-       Object.defineProperty(exports, '__esModule', {
+       Object.defineProperty(exports, "__esModule", {
          value: true
        });
        exports.toArrayChildren = toArrayChildren;
        exports.isSameChildren = isSameChildren;
        exports.mergeChildren = mergeChildren;
        
-       function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
-       
        var _react = __webpack_require__(3);
        
        var _react2 = _interopRequireDefault(_react);
        
+       function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+       
        function toArrayChildren(children) {
          var ret = [];
-         _react2['default'].Children.forEach(children, function (child) {
+         _react2["default"].Children.forEach(children, function (child) {
            ret.push(child);
          });
          return ret;
              if (ret) {
                return;
              }
-             if (child.key === key) {
+             if (child && child.key === key) {
                ret = child;
              }
            });
          var ret = null;
          if (children) {
            children.forEach(function (child) {
-             if (child.key === key && child.props[showProp]) {
+             if (child && child.key === key && child.props[showProp]) {
                if (ret) {
                  throw new Error('two child with same key for <rc-animate> children');
                }
              if (found) {
                return;
              }
-             found = child.key === key && !child.props[showProp];
+             found = child && child.key === key && !child.props[showProp];
            });
          }
          return found;
          if (same) {
            c1.forEach(function (child, index) {
              var child2 = c2[index];
-             if (child.key !== child2.key) {
-               same = false;
-             } else if (showProp && child.props[showProp] !== child2.props[showProp]) {
-               same = false;
+             if (child && child2) {
+               if (child && !child2 || !child && child2) {
+                 same = false;
+               } else if (child.key !== child2.key) {
+                 same = false;
+               } else if (showProp && child.props[showProp] !== child2.props[showProp]) {
+                 same = false;
+               }
              }
            });
          }
          var nextChildrenPending = {};
          var pendingChildren = [];
          prev.forEach(function (child) {
-           if (findChildInChildrenByKey(next, child.key)) {
+           if (child && findChildInChildrenByKey(next, child.key)) {
              if (pendingChildren.length) {
                nextChildrenPending[child.key] = pendingChildren;
                pendingChildren = [];
          });
        
          next.forEach(function (child) {
-           if (nextChildrenPending.hasOwnProperty(child.key)) {
+           if (child && nextChildrenPending.hasOwnProperty(child.key)) {
              ret = ret.concat(nextChildrenPending[child.key]);
            }
            ret.push(child);
        }
 
 /***/ },
-/* 211 */
+/* 203 */
 /***/ function(module, exports, __webpack_require__) {
 
        'use strict';
        
-       Object.defineProperty(exports, '__esModule', {
+       Object.defineProperty(exports, "__esModule", {
          value: true
        });
        
-       function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+       var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
        
        var _react = __webpack_require__(3);
        
        var _react2 = _interopRequireDefault(_react);
        
-       var _reactDom = __webpack_require__(160);
+       var _reactDom = __webpack_require__(37);
        
        var _reactDom2 = _interopRequireDefault(_reactDom);
        
-       var _cssAnimation = __webpack_require__(212);
+       var _cssAnimation = __webpack_require__(204);
        
        var _cssAnimation2 = _interopRequireDefault(_cssAnimation);
        
-       var _util = __webpack_require__(215);
+       var _util = __webpack_require__(208);
        
        var _util2 = _interopRequireDefault(_util);
        
+       function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+       
        var transitionMap = {
          enter: 'transitionEnter',
          appear: 'transitionAppear',
          leave: 'transitionLeave'
        };
        
-       var AnimateChild = _react2['default'].createClass({
+       var AnimateChild = _react2["default"].createClass({
          displayName: 'AnimateChild',
        
          propTypes: {
-           children: _react2['default'].PropTypes.any
+           children: _react2["default"].PropTypes.any
          },
        
          componentWillUnmount: function componentWillUnmount() {
            this.stop();
          },
-       
          componentWillEnter: function componentWillEnter(done) {
-           if (_util2['default'].isEnterSupported(this.props)) {
+           if (_util2["default"].isEnterSupported(this.props)) {
              this.transition('enter', done);
            } else {
              done();
            }
          },
-       
          componentWillAppear: function componentWillAppear(done) {
-           if (_util2['default'].isAppearSupported(this.props)) {
+           if (_util2["default"].isAppearSupported(this.props)) {
              this.transition('appear', done);
            } else {
              done();
            }
          },
-       
          componentWillLeave: function componentWillLeave(done) {
-           if (_util2['default'].isLeaveSupported(this.props)) {
+           if (_util2["default"].isLeaveSupported(this.props)) {
              this.transition('leave', done);
            } else {
+             // always sync, do not interupt with react component life cycle
+             // update hidden -> animate hidden ->
+             // didUpdate -> animate leave -> unmount (if animate is none)
              done();
            }
          },
-       
          transition: function transition(animationType, finishCallback) {
            var _this = this;
        
-           var node = _reactDom2['default'].findDOMNode(this);
+           var node = _reactDom2["default"].findDOMNode(this);
            var props = this.props;
            var transitionName = props.transitionName;
+           var nameIsObj = (typeof transitionName === 'undefined' ? 'undefined' : _typeof(transitionName)) === 'object';
            this.stop();
            var end = function end() {
              _this.stopper = null;
              finishCallback();
            };
            if ((_cssAnimation.isCssAnimationSupported || !props.animation[animationType]) && transitionName && props[transitionMap[animationType]]) {
-             this.stopper = (0, _cssAnimation2['default'])(node, transitionName + '-' + animationType, end);
+             var name = nameIsObj ? transitionName[animationType] : transitionName + '-' + animationType;
+             var activeName = name + '-active';
+             if (nameIsObj && transitionName[animationType + 'Active']) {
+               activeName = transitionName[animationType + 'Active'];
+             }
+             this.stopper = (0, _cssAnimation2["default"])(node, {
+               name: name,
+               active: activeName
+             }, end);
            } else {
              this.stopper = props.animation[animationType](node, end);
            }
          },
-       
          stop: function stop() {
            var stopper = this.stopper;
            if (stopper) {
              stopper.stop();
            }
          },
-       
          render: function render() {
            return this.props.children;
          }
        });
        
-       exports['default'] = AnimateChild;
+       exports["default"] = AnimateChild;
        module.exports = exports['default'];
 
 /***/ },
-/* 212 */
+/* 204 */
 /***/ function(module, exports, __webpack_require__) {
 
        'use strict';
        
-       var Event = __webpack_require__(213);
-       var Css = __webpack_require__(214);
-       var isCssAnimationSupported = Event.endEvents.length !== 0;
+       Object.defineProperty(exports, "__esModule", {
+         value: true
+       });
+       
+       var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
+       
+       var _Event = __webpack_require__(205);
+       
+       var _Event2 = _interopRequireDefault(_Event);
+       
+       var _componentClasses = __webpack_require__(206);
+       
+       var _componentClasses2 = _interopRequireDefault(_componentClasses);
+       
+       function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
        
-       function getDuration(node, name) {
+       var isCssAnimationSupported = _Event2["default"].endEvents.length !== 0;
+       
+       
+       var capitalPrefixes = ['Webkit', 'Moz', 'O',
+       // ms is special .... !
+       'ms'];
+       var prefixes = ['-webkit-', '-moz-', '-o-', 'ms-', ''];
+       
+       function getStyleProperty(node, name) {
          var style = window.getComputedStyle(node);
-         var prefixes = ['-webkit-', '-moz-', '-o-', 'ms-', ''];
+       
          var ret = '';
          for (var i = 0; i < prefixes.length; i++) {
            ret = style.getPropertyValue(prefixes[i] + name);
        
        function fixBrowserByTimeout(node) {
          if (isCssAnimationSupported) {
-           var transitionDuration = parseFloat(getDuration(node, 'transition-duration')) || 0;
-           var animationDuration = parseFloat(getDuration(node, 'animation-duration')) || 0;
-           var time = Math.max(transitionDuration, animationDuration);
+           var transitionDelay = parseFloat(getStyleProperty(node, 'transition-delay')) || 0;
+           var transitionDuration = parseFloat(getStyleProperty(node, 'transition-duration')) || 0;
+           var animationDelay = parseFloat(getStyleProperty(node, 'animation-delay')) || 0;
+           var animationDuration = parseFloat(getStyleProperty(node, 'animation-duration')) || 0;
+           var time = Math.max(transitionDuration + transitionDelay, animationDuration + animationDelay);
            // sometimes, browser bug
            node.rcEndAnimTimeout = setTimeout(function () {
              node.rcEndAnimTimeout = null;
          }
        }
        
-       var cssAnimation = function cssAnimation(node, transitionName, callback) {
-         var className = transitionName;
-         var activeClassName = className + '-active';
+       var cssAnimation = function cssAnimation(node, transitionName, endCallback) {
+         var nameIsObj = (typeof transitionName === 'undefined' ? 'undefined' : _typeof(transitionName)) === 'object';
+         var className = nameIsObj ? transitionName.name : transitionName;
+         var activeClassName = nameIsObj ? transitionName.active : transitionName + '-active';
+         var end = endCallback;
+         var start = void 0;
+         var active = void 0;
+         var nodeClasses = (0, _componentClasses2["default"])(node);
+       
+         if (endCallback && Object.prototype.toString.call(endCallback) === '[object Object]') {
+           end = endCallback.end;
+           start = endCallback.start;
+           active = endCallback.active;
+         }
        
          if (node.rcEndListener) {
            node.rcEndListener();
        
            clearBrowserBugTimeout(node);
        
-           Css.removeClass(node, className);
-           Css.removeClass(node, activeClassName);
+           nodeClasses.remove(className);
+           nodeClasses.remove(activeClassName);
        
-           Event.removeEndEventListener(node, node.rcEndListener);
+           _Event2["default"].removeEndEventListener(node, node.rcEndListener);
            node.rcEndListener = null;
        
-           // Usually this optional callback is used for informing an owner of
+           // Usually this optional end is used for informing an owner of
            // a leave animation and telling it to remove the child.
-           if (callback) {
-             callback();
+           if (end) {
+             end();
            }
          };
        
-         Event.addEndEventListener(node, node.rcEndListener);
+         _Event2["default"].addEndEventListener(node, node.rcEndListener);
        
-         Css.addClass(node, className);
+         if (start) {
+           start();
+         }
+         nodeClasses.add(className);
        
          node.rcAnimTimeout = setTimeout(function () {
            node.rcAnimTimeout = null;
-           Css.addClass(node, activeClassName);
+           nodeClasses.add(activeClassName);
+           if (active) {
+             setTimeout(active, 0);
+           }
            fixBrowserByTimeout(node);
-         }, 0);
+           // 30ms for firefox
+         }, 30);
        
          return {
            stop: function stop() {
        
            clearBrowserBugTimeout(node);
        
-           Event.removeEndEventListener(node, node.rcEndListener);
+           _Event2["default"].removeEndEventListener(node, node.rcEndListener);
            node.rcEndListener = null;
        
            // Usually this optional callback is used for informing an owner of
            }
          };
        
-         Event.addEndEventListener(node, node.rcEndListener);
+         _Event2["default"].addEndEventListener(node, node.rcEndListener);
        
          node.rcAnimTimeout = setTimeout(function () {
            for (var s in style) {
            property = '';
          }
          property = property || '';
-         ['Webkit', 'Moz', 'O',
-         // ms is special .... !
-         'ms'].forEach(function (prefix) {
+         capitalPrefixes.forEach(function (prefix) {
            node.style[prefix + 'Transition' + property] = v;
          });
        };
        
-       cssAnimation.addClass = Css.addClass;
-       cssAnimation.removeClass = Css.removeClass;
        cssAnimation.isCssAnimationSupported = isCssAnimationSupported;
        
-       module.exports = cssAnimation;
+       exports["default"] = cssAnimation;
+       module.exports = exports['default'];
 
 /***/ },
-/* 213 */
+/* 205 */
 /***/ function(module, exports) {
 
        'use strict';
        
+       Object.defineProperty(exports, "__esModule", {
+         value: true
+       });
        var EVENT_NAME_MAP = {
          transitionend: {
            transition: 'transitionend',
          }
        }
        
-       if (typeof window !== 'undefined') {
+       if (typeof window !== 'undefined' && typeof document !== 'undefined') {
          detectEvents();
        }
        
            });
          },
        
+       
          endEvents: endEvents,
        
          removeEndEventListener: function removeEndEventListener(node, eventListener) {
          }
        };
        
-       module.exports = TransitionEvents;
+       exports["default"] = TransitionEvents;
+       module.exports = exports['default'];
 
 /***/ },
-/* 214 */
-/***/ function(module, exports) {
+/* 206 */
+/***/ function(module, exports, __webpack_require__) {
 
-       'use strict';
+       /**
+        * Module dependencies.
+        */
+       
+       try {
+         var index = __webpack_require__(207);
+       } catch (err) {
+         var index = __webpack_require__(207);
+       }
+       
+       /**
+        * Whitespace regexp.
+        */
+       
+       var re = /\s+/;
+       
+       /**
+        * toString reference.
+        */
+       
+       var toString = Object.prototype.toString;
+       
+       /**
+        * Wrap `el` in a `ClassList`.
+        *
+        * @param {Element} el
+        * @return {ClassList}
+        * @api public
+        */
+       
+       module.exports = function(el){
+         return new ClassList(el);
+       };
        
-       var SPACE = ' ';
-       var RE_CLASS = /[\n\t\r]/g;
+       /**
+        * Initialize a new ClassList for `el`.
+        *
+        * @param {Element} el
+        * @api private
+        */
        
-       function norm(elemClass) {
-         return (SPACE + elemClass + SPACE).replace(RE_CLASS, SPACE);
+       function ClassList(el) {
+         if (!el || !el.nodeType) {
+           throw new Error('A DOM element reference is required');
+         }
+         this.el = el;
+         this.list = el.classList;
        }
        
-       module.exports = {
-         addClass: function addClass(elem, className) {
-           elem.className += ' ' + className;
-         },
+       /**
+        * Add class `name` if not already present.
+        *
+        * @param {String} name
+        * @return {ClassList}
+        * @api public
+        */
+       
+       ClassList.prototype.add = function(name){
+         // classList
+         if (this.list) {
+           this.list.add(name);
+           return this;
+         }
+       
+         // fallback
+         var arr = this.array();
+         var i = index(arr, name);
+         if (!~i) arr.push(name);
+         this.el.className = arr.join(' ');
+         return this;
+       };
+       
+       /**
+        * Remove class `name` when present, or
+        * pass a regular expression to remove
+        * any which match.
+        *
+        * @param {String|RegExp} name
+        * @return {ClassList}
+        * @api public
+        */
+       
+       ClassList.prototype.remove = function(name){
+         if ('[object RegExp]' == toString.call(name)) {
+           return this.removeMatching(name);
+         }
+       
+         // classList
+         if (this.list) {
+           this.list.remove(name);
+           return this;
+         }
+       
+         // fallback
+         var arr = this.array();
+         var i = index(arr, name);
+         if (~i) arr.splice(i, 1);
+         this.el.className = arr.join(' ');
+         return this;
+       };
+       
+       /**
+        * Remove all classes matching `re`.
+        *
+        * @param {RegExp} re
+        * @return {ClassList}
+        * @api private
+        */
+       
+       ClassList.prototype.removeMatching = function(re){
+         var arr = this.array();
+         for (var i = 0; i < arr.length; i++) {
+           if (re.test(arr[i])) {
+             this.remove(arr[i]);
+           }
+         }
+         return this;
+       };
+       
+       /**
+        * Toggle class `name`, can force state via `force`.
+        *
+        * For browsers that support classList, but do not support `force` yet,
+        * the mistake will be detected and corrected.
+        *
+        * @param {String} name
+        * @param {Boolean} force
+        * @return {ClassList}
+        * @api public
+        */
+       
+       ClassList.prototype.toggle = function(name, force){
+         // classList
+         if (this.list) {
+           if ("undefined" !== typeof force) {
+             if (force !== this.list.toggle(name, force)) {
+               this.list.toggle(name); // toggle again to correct
+             }
+           } else {
+             this.list.toggle(name);
+           }
+           return this;
+         }
        
-         removeClass: function removeClass(elem, n) {
-           var elemClass = elem.className.trim();
-           var className = norm(elemClass);
-           var needle = n.trim();
-           needle = SPACE + needle + SPACE;
-           // 一个 cls 有可能多次出现:'link link2 link link3 link'
-           while (className.indexOf(needle) >= 0) {
-             className = className.replace(needle, SPACE);
+         // fallback
+         if ("undefined" !== typeof force) {
+           if (!force) {
+             this.remove(name);
+           } else {
+             this.add(name);
+           }
+         } else {
+           if (this.has(name)) {
+             this.remove(name);
+           } else {
+             this.add(name);
            }
-           elem.className = className.trim();
          }
+       
+         return this;
+       };
+       
+       /**
+        * Return an array of classes.
+        *
+        * @return {Array}
+        * @api public
+        */
+       
+       ClassList.prototype.array = function(){
+         var className = this.el.getAttribute('class') || '';
+         var str = className.replace(/^\s+|\s+$/g, '');
+         var arr = str.split(re);
+         if ('' === arr[0]) arr.shift();
+         return arr;
+       };
+       
+       /**
+        * Check if class `name` is present.
+        *
+        * @param {String} name
+        * @return {ClassList}
+        * @api public
+        */
+       
+       ClassList.prototype.has =
+       ClassList.prototype.contains = function(name){
+         return this.list
+           ? this.list.contains(name)
+           : !! ~index(this.array(), name);
+       };
+
+
+/***/ },
+/* 207 */
+/***/ function(module, exports) {
+
+       module.exports = function(arr, obj){
+         if (arr.indexOf) return arr.indexOf(obj);
+         for (var i = 0; i < arr.length; ++i) {
+           if (arr[i] === obj) return i;
+         }
+         return -1;
        };
 
 /***/ },
-/* 215 */
+/* 208 */
 /***/ function(module, exports) {
 
        "use strict";
          isLeaveSupported: function isLeaveSupported(props) {
            return props.transitionName && props.transitionLeave || props.animation.leave;
          },
-       
          allowAppearCallback: function allowAppearCallback(props) {
            return props.transitionAppear || props.animation.appear;
          },
          }
        };
        exports["default"] = util;
-       module.exports = exports["default"];
+       module.exports = exports['default'];
 
 /***/ },
-/* 216 */
+/* 209 */
 /***/ function(module, exports, __webpack_require__) {
 
        'use strict';
        
-       Object.defineProperty(exports, '__esModule', {
+       Object.defineProperty(exports, "__esModule", {
          value: true
        });
        
-       function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
-       
        var _react = __webpack_require__(3);
        
        var _react2 = _interopRequireDefault(_react);
        
-       var PopupInner = _react2['default'].createClass({
+       var _LazyRenderBox = __webpack_require__(210);
+       
+       var _LazyRenderBox2 = _interopRequireDefault(_LazyRenderBox);
+       
+       function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+       
+       var PopupInner = _react2["default"].createClass({
          displayName: 'PopupInner',
        
          propTypes: {
            hiddenClassName: _react.PropTypes.string,
            className: _react.PropTypes.string,
+           prefixCls: _react.PropTypes.string,
            onMouseEnter: _react.PropTypes.func,
            onMouseLeave: _react.PropTypes.func,
            children: _react.PropTypes.any
            if (!props.visible) {
              className += ' ' + props.hiddenClassName;
            }
-           return _react2['default'].createElement(
-             'div',
-             { className: className,
-               onMouseEnter: props.onMouseEnter,
-               onMouseLeave: props.onMouseLeave,
-               style: props.style },
-             props.children
-           );
+           return _react2["default"].createElement(
+             'div',
+             {
+               className: className,
+               onMouseEnter: props.onMouseEnter,
+               onMouseLeave: props.onMouseLeave,
+               style: props.style
+             },
+             _react2["default"].createElement(
+               _LazyRenderBox2["default"],
+               { className: props.prefixCls + '-content', visible: props.visible },
+               props.children
+             )
+           );
+         }
+       });
+       
+       exports["default"] = PopupInner;
+       module.exports = exports['default'];
+
+/***/ },
+/* 210 */
+/***/ function(module, exports, __webpack_require__) {
+
+       'use strict';
+       
+       Object.defineProperty(exports, "__esModule", {
+         value: true
+       });
+       
+       var _react = __webpack_require__(3);
+       
+       var _react2 = _interopRequireDefault(_react);
+       
+       function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+       
+       function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }
+       
+       var LazyRenderBox = _react2["default"].createClass({
+         displayName: 'LazyRenderBox',
+       
+         propTypes: {
+           children: _react.PropTypes.any,
+           className: _react.PropTypes.string,
+           visible: _react.PropTypes.bool,
+           hiddenClassName: _react.PropTypes.string
+         },
+         shouldComponentUpdate: function shouldComponentUpdate(nextProps) {
+           return nextProps.hiddenClassName || nextProps.visible;
+         },
+         render: function render() {
+           var _props = this.props;
+           var hiddenClassName = _props.hiddenClassName;
+           var visible = _props.visible;
+       
+           var props = _objectWithoutProperties(_props, ['hiddenClassName', 'visible']);
+       
+           if (hiddenClassName || _react2["default"].Children.count(props.children) > 1) {
+             if (!visible && hiddenClassName) {
+               props.className += ' ' + hiddenClassName;
+             }
+             return _react2["default"].createElement('div', props);
+           }
+       
+           return _react2["default"].Children.only(props.children);
          }
        });
        
-       exports['default'] = PopupInner;
+       exports["default"] = LazyRenderBox;
        module.exports = exports['default'];
 
 /***/ },
-/* 217 */
-/***/ function(module, exports, __webpack_require__) {
+/* 211 */
+/***/ function(module, exports) {
 
        'use strict';
        
-       Object.defineProperty(exports, '__esModule', {
+       Object.defineProperty(exports, "__esModule", {
          value: true
        });
-       exports.getAlignFromPlacement = getAlignFromPlacement;
-       exports.getPopupClassNameFromAlign = getPopupClassNameFromAlign;
-       
-       function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
-       
-       var _objectAssign = __webpack_require__(192);
        
-       var _objectAssign2 = _interopRequireDefault(_objectAssign);
+       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.getAlignFromPlacement = getAlignFromPlacement;
+       exports.getPopupClassNameFromAlign = getPopupClassNameFromAlign;
        function isPointsEq(a1, a2) {
          return a1[0] === a2[0] && a1[1] === a2[1];
        }
        
        function getAlignFromPlacement(builtinPlacements, placementStr, align) {
          var baseAlign = builtinPlacements[placementStr] || {};
-         return (0, _objectAssign2['default'])({}, baseAlign, align);
+         return _extends({}, baseAlign, align);
        }
        
        function getPopupClassNameFromAlign(builtinPlacements, prefixCls, align) {
        }
 
 /***/ },
-/* 218 */
+/* 212 */
 /***/ function(module, exports, __webpack_require__) {
 
        'use strict';
        
-       Object.defineProperty(exports, '__esModule', {
+       Object.defineProperty(exports, "__esModule", {
          value: true
        });
        
-       function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+       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; };
        
-       var _react = __webpack_require__(3);
+       exports["default"] = getContainerRenderMixin;
        
-       var _react2 = _interopRequireDefault(_react);
+       var _reactDom = __webpack_require__(37);
+       
+       var _reactDom2 = _interopRequireDefault(_reactDom);
+       
+       function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+       
+       function defaultGetContainer() {
+         var container = document.createElement('div');
+         document.body.appendChild(container);
+         return container;
+       }
+       
+       function getContainerRenderMixin(config) {
+         var _config$autoMount = config.autoMount;
+         var autoMount = _config$autoMount === undefined ? true : _config$autoMount;
+         var _config$autoDestroy = config.autoDestroy;
+         var autoDestroy = _config$autoDestroy === undefined ? true : _config$autoDestroy;
+         var isVisible = config.isVisible;
+         var getComponent = config.getComponent;
+         var _config$getContainer = config.getContainer;
+         var getContainer = _config$getContainer === undefined ? defaultGetContainer : _config$getContainer;
+       
+       
+         var mixin = void 0;
+       
+         function _renderComponent(instance, componentArg, ready) {
+           if (!isVisible || instance._component || isVisible(instance)) {
+             if (!instance._container) {
+               instance._container = getContainer(instance);
+             }
+             _reactDom2["default"].unstable_renderSubtreeIntoContainer(instance, getComponent(instance, componentArg), instance._container, function callback() {
+               instance._component = this;
+               if (ready) {
+                 ready.call(this);
+               }
+             });
+           }
+         }
+       
+         if (autoMount) {
+           mixin = _extends({}, mixin, {
+             componentDidMount: function componentDidMount() {
+               _renderComponent(this);
+             },
+             componentDidUpdate: function componentDidUpdate() {
+               _renderComponent(this);
+             }
+           });
+         }
+       
+         if (!autoMount || !autoDestroy) {
+           mixin = _extends({}, mixin, {
+             renderComponent: function renderComponent(componentArg, ready) {
+               _renderComponent(this, componentArg, ready);
+             }
+           });
+         }
+       
+         function _removeContainer(instance) {
+           if (instance._container) {
+             var container = instance._container;
+             _reactDom2["default"].unmountComponentAtNode(container);
+             container.parentNode.removeChild(container);
+             instance._container = null;
+           }
+         }
+       
+         if (autoDestroy) {
+           mixin = _extends({}, mixin, {
+             componentWillUnmount: function componentWillUnmount() {
+               _removeContainer(this);
+             }
+           });
+         } else {
+           mixin = _extends({}, mixin, {
+             removeContainer: function removeContainer() {
+               _removeContainer(this);
+             }
+           });
+         }
+       
+         return mixin;
+       }
+       module.exports = exports['default'];
+
+/***/ },
+/* 213 */
+/***/ function(module, exports, __webpack_require__) {
+
+       'use strict';
+       
+       Object.defineProperty(exports, "__esModule", {
+         value: true
+       });
        
-       var _mixinCommonMixin = __webpack_require__(219);
+       var _react = __webpack_require__(3);
        
-       var _mixinCommonMixin2 = _interopRequireDefault(_mixinCommonMixin);
+       var _react2 = _interopRequireDefault(_react);
        
-       var _Header = __webpack_require__(221);
+       var _Header = __webpack_require__(214);
        
        var _Header2 = _interopRequireDefault(_Header);
        
-       var _Combobox = __webpack_require__(223);
+       var _Combobox = __webpack_require__(215);
        
        var _Combobox2 = _interopRequireDefault(_Combobox);
        
+       var _moment = __webpack_require__(177);
+       
+       var _moment2 = _interopRequireDefault(_moment);
+       
+       function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+       
        function noop() {}
        
        function generateOptions(length, disabledOptions, hideDisabledOptions) {
          return arr;
        }
        
-       var Panel = _react2['default'].createClass({
+       var Panel = _react2.default.createClass({
          displayName: 'Panel',
        
          propTypes: {
+           clearText: _react.PropTypes.string,
            prefixCls: _react.PropTypes.string,
+           defaultOpenValue: _react.PropTypes.object,
            value: _react.PropTypes.object,
-           locale: _react.PropTypes.object,
            placeholder: _react.PropTypes.string,
-           gregorianCalendarLocale: _react.PropTypes.object,
-           formatter: _react.PropTypes.object,
+           format: _react.PropTypes.string,
            disabledHours: _react.PropTypes.func,
            disabledMinutes: _react.PropTypes.func,
            disabledSeconds: _react.PropTypes.func,
            onClear: _react.PropTypes.func
          },
        
-         mixins: [_mixinCommonMixin2['default']],
-       
          getDefaultProps: function getDefaultProps() {
            return {
              prefixCls: 'rc-time-picker-panel',
              onChange: noop,
-             onClear: noop
+             onClear: noop,
+             defaultOpenValue: (0, _moment2.default)()
            };
          },
-       
          getInitialState: function getInitialState() {
            return {
              value: this.props.value,
              selectionRange: []
            };
          },
-       
          componentWillReceiveProps: function componentWillReceiveProps(nextProps) {
            var value = nextProps.value;
            if (value) {
              });
            }
          },
-       
          onChange: function onChange(newValue) {
            this.setState({ value: newValue });
            this.props.onChange(newValue);
          },
-       
          onClear: function onClear() {
            this.props.onClear();
          },
-       
          onCurrentSelectPanelChange: function onCurrentSelectPanelChange(currentSelectPanel) {
            this.setState({ currentSelectPanel: currentSelectPanel });
          },
-       
          render: function render() {
            var _props = this.props;
-           var locale = _props.locale;
            var prefixCls = _props.prefixCls;
            var placeholder = _props.placeholder;
            var disabledHours = _props.disabledHours;
            var allowEmpty = _props.allowEmpty;
            var showHour = _props.showHour;
            var showSecond = _props.showSecond;
-           var formatter = _props.formatter;
-           var gregorianCalendarLocale = _props.gregorianCalendarLocale;
+           var format = _props.format;
+           var defaultOpenValue = _props.defaultOpenValue;
+           var clearText = _props.clearText;
+           var onEsc = _props.onEsc;
+           var _state = this.state;
+           var value = _state.value;
+           var currentSelectPanel = _state.currentSelectPanel;
        
-           var value = this.state.value;
            var disabledHourOptions = disabledHours();
-           var disabledMinuteOptions = disabledMinutes(value ? value.getHourOfDay() : null);
-           var disabledSecondOptions = disabledSeconds(value ? value.getHourOfDay() : null, value ? value.getMinutes() : null);
+           var disabledMinuteOptions = disabledMinutes(value ? value.hour() : null);
+           var disabledSecondOptions = disabledSeconds(value ? value.hour() : null, value ? value.minute() : null);
            var hourOptions = generateOptions(24, disabledHourOptions, hideDisabledOptions);
            var minuteOptions = generateOptions(60, disabledMinuteOptions, hideDisabledOptions);
            var secondOptions = generateOptions(60, disabledSecondOptions, hideDisabledOptions);
        
-           return _react2['default'].createElement(
+           return _react2.default.createElement(
              'div',
              { className: prefixCls + '-inner' },
-             _react2['default'].createElement(_Header2['default'], {
+             _react2.default.createElement(_Header2.default, {
+               clearText: clearText,
                prefixCls: prefixCls,
-               gregorianCalendarLocale: gregorianCalendarLocale,
-               locale: locale,
+               defaultOpenValue: defaultOpenValue,
                value: value,
-               currentSelectPanel: this.state.currentSelectPanel,
-               onEsc: this.props.onEsc,
-               formatter: formatter,
+               currentSelectPanel: currentSelectPanel,
+               onEsc: onEsc,
+               format: format,
                placeholder: placeholder,
                hourOptions: hourOptions,
                minuteOptions: minuteOptions,
                onClear: this.onClear,
                allowEmpty: allowEmpty
              }),
-             _react2['default'].createElement(_Combobox2['default'], {
+             _react2.default.createElement(_Combobox2.default, {
                prefixCls: prefixCls,
                value: value,
-               gregorianCalendarLocale: gregorianCalendarLocale,
-               formatter: formatter,
+               defaultOpenValue: defaultOpenValue,
+               format: format,
                onChange: this.onChange,
                showHour: showHour,
                showSecond: showSecond,
          }
        });
        
-       exports['default'] = Panel;
-       module.exports = exports['default'];
-
-/***/ },
-/* 219 */
-/***/ function(module, exports, __webpack_require__) {
-
-       'use strict';
-       
-       Object.defineProperty(exports, '__esModule', {
-         value: true
-       });
-       
-       function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
-       
-       var _react = __webpack_require__(3);
-       
-       var _localeEn_US = __webpack_require__(220);
-       
-       var _localeEn_US2 = _interopRequireDefault(_localeEn_US);
-       
-       exports['default'] = {
-         propTypes: {
-           prefixCls: _react.PropTypes.string,
-           locale: _react.PropTypes.object
-         },
-       
-         getDefaultProps: function getDefaultProps() {
-           return {
-             locale: _localeEn_US2['default']
-           };
-         }
-       };
-       module.exports = exports['default'];
-
-/***/ },
-/* 220 */
-/***/ function(module, exports, __webpack_require__) {
-
-       'use strict';
-       
-       Object.defineProperty(exports, '__esModule', {
-         value: true
-       });
-       
-       function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
-       
-       var _gregorianCalendarFormatLibLocaleEn_US = __webpack_require__(166);
-       
-       var _gregorianCalendarFormatLibLocaleEn_US2 = _interopRequireDefault(_gregorianCalendarFormatLibLocaleEn_US);
-       
-       var _gregorianCalendarLibLocaleEn_US = __webpack_require__(164);
-       
-       var _gregorianCalendarLibLocaleEn_US2 = _interopRequireDefault(_gregorianCalendarLibLocaleEn_US);
-       
-       exports['default'] = {
-         clear: 'Clear',
-         format: _gregorianCalendarFormatLibLocaleEn_US2['default'],
-         calendar: _gregorianCalendarLibLocaleEn_US2['default']
-       };
+       exports.default = Panel;
        module.exports = exports['default'];
 
 /***/ },
-/* 221 */
+/* 214 */
 /***/ function(module, exports, __webpack_require__) {
 
        'use strict';
        
-       Object.defineProperty(exports, '__esModule', {
+       Object.defineProperty(exports, "__esModule", {
          value: true
        });
        
-       function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
-       
        var _react = __webpack_require__(3);
        
        var _react2 = _interopRequireDefault(_react);
        
-       var _utilSelection = __webpack_require__(222);
+       var _moment = __webpack_require__(177);
        
-       var _utilSelection2 = _interopRequireDefault(_utilSelection);
+       var _moment2 = _interopRequireDefault(_moment);
        
-       var Header = _react2['default'].createClass({
+       function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+       
+       var Header = _react2.default.createClass({
          displayName: 'Header',
        
          propTypes: {
-           formatter: _react.PropTypes.object,
+           format: _react.PropTypes.string,
            prefixCls: _react.PropTypes.string,
-           gregorianCalendarLocale: _react.PropTypes.object,
-           locale: _react.PropTypes.object,
            disabledDate: _react.PropTypes.func,
            placeholder: _react.PropTypes.string,
+           clearText: _react.PropTypes.string,
            value: _react.PropTypes.object,
            hourOptions: _react.PropTypes.array,
            minuteOptions: _react.PropTypes.array,
            onClear: _react.PropTypes.func,
            onEsc: _react.PropTypes.func,
            allowEmpty: _react.PropTypes.bool,
+           defaultOpenValue: _react.PropTypes.object,
            currentSelectPanel: _react.PropTypes.string
          },
        
          getInitialState: function getInitialState() {
-           var value = this.props.value;
+           var _props = this.props;
+           var value = _props.value;
+           var format = _props.format;
+       
            return {
-             str: value && this.props.formatter.format(value) || '',
+             str: value && value.format(format) || '',
              invalid: false
            };
          },
-       
-         componentDidMount: function componentDidMount() {
-           this.timer = setTimeout(this.selectRange, 0);
-         },
-       
          componentWillReceiveProps: function componentWillReceiveProps(nextProps) {
            var value = nextProps.value;
+           var format = nextProps.format;
+       
            this.setState({
-             str: value && nextProps.formatter.format(value) || '',
+             str: value && value.format(format) || '',
              invalid: false
            });
          },
-       
-         componentDidUpdate: function componentDidUpdate() {
-           this.timer = setTimeout(this.selectRange, 0);
-         },
-       
-         componentWillUnmount: function componentWillUnmount() {
-           clearTimeout(this.timer);
-         },
-       
          onInputChange: function onInputChange(event) {
            var str = event.target.value;
            this.setState({
              str: str
            });
-           var value = null;
-           var _props = this.props;
-           var formatter = _props.formatter;
-           var gregorianCalendarLocale = _props.gregorianCalendarLocale;
-           var hourOptions = _props.hourOptions;
-           var minuteOptions = _props.minuteOptions;
-           var secondOptions = _props.secondOptions;
-           var disabledHours = _props.disabledHours;
-           var disabledMinutes = _props.disabledMinutes;
-           var disabledSeconds = _props.disabledSeconds;
-           var onChange = _props.onChange;
-           var allowEmpty = _props.allowEmpty;
+           var _props2 = this.props;
+           var format = _props2.format;
+           var hourOptions = _props2.hourOptions;
+           var minuteOptions = _props2.minuteOptions;
+           var secondOptions = _props2.secondOptions;
+           var disabledHours = _props2.disabledHours;
+           var disabledMinutes = _props2.disabledMinutes;
+           var disabledSeconds = _props2.disabledSeconds;
+           var onChange = _props2.onChange;
+           var allowEmpty = _props2.allowEmpty;
+       
        
            if (str) {
              var originalValue = this.props.value;
-             try {
-               value = formatter.parse(str, {
-                 locale: gregorianCalendarLocale,
-                 obeyCount: true
+             var value = this.getProtoValue().clone();
+             var parsed = (0, _moment2.default)(str, format, true);
+             if (!parsed.isValid()) {
+               this.setState({
+                 invalid: true
                });
-             } catch (ex) {
+               return;
+             }
+             value.hour(parsed.hour()).minute(parsed.minute()).second(parsed.second());
+       
+             // if time value not allowed, response warning.
+             if (hourOptions.indexOf(value.hour()) < 0 || minuteOptions.indexOf(value.minute()) < 0 || secondOptions.indexOf(value.second()) < 0) {
                this.setState({
                  invalid: true
                });
                return;
              }
        
-             if (value) {
-               // if time value not allowed, response warning.
-               if (hourOptions.indexOf(value.getHourOfDay()) < 0 || minuteOptions.indexOf(value.getMinutes()) < 0 || secondOptions.indexOf(value.getSeconds()) < 0) {
-                 this.setState({
-                   invalid: true
-                 });
-                 return;
-               }
-       
-               // if time value is disabled, response warning.
-               var disabledHourOptions = disabledHours();
-               var disabledMinuteOptions = disabledMinutes(value.getHourOfDay());
-               var disabledSecondOptions = disabledSeconds(value.getHourOfDay(), value.getMinutes());
-               if (disabledHourOptions && disabledHourOptions.indexOf(value.getHourOfDay()) >= 0 || disabledMinuteOptions && disabledMinuteOptions.indexOf(value.getMinutes()) >= 0 || disabledSecondOptions && disabledSecondOptions.indexOf(value.getSeconds()) >= 0) {
-                 this.setState({
-                   invalid: true
-                 });
-                 return;
-               }
-       
-               if (originalValue && value) {
-                 if (originalValue.getHourOfDay() !== value.getHourOfDay() || originalValue.getMinutes() !== value.getMinutes() || originalValue.getSeconds() !== value.getSeconds()) {
-                   // keep other fields for rc-calendar
-                   var changedValue = originalValue.clone();
-                   changedValue.setHourOfDay(value.getHourOfDay());
-                   changedValue.setMinutes(value.getMinutes());
-                   changedValue.setSeconds(value.getSeconds());
-                   onChange(changedValue);
-                 }
-               } else if (originalValue !== value) {
-                 onChange(value);
-               }
-             } else {
+             // if time value is disabled, response warning.
+             var disabledHourOptions = disabledHours();
+             var disabledMinuteOptions = disabledMinutes(value.hour());
+             var disabledSecondOptions = disabledSeconds(value.hour(), value.minute());
+             if (disabledHourOptions && disabledHourOptions.indexOf(value.hour()) >= 0 || disabledMinuteOptions && disabledMinuteOptions.indexOf(value.minute()) >= 0 || disabledSecondOptions && disabledSecondOptions.indexOf(value.second()) >= 0) {
                this.setState({
                  invalid: true
                });
                return;
              }
+       
+             if (originalValue) {
+               if (originalValue.hour() !== value.hour() || originalValue.minute() !== value.minute() || originalValue.second() !== value.second()) {
+                 // keep other fields for rc-calendar
+                 var changedValue = originalValue.clone();
+                 changedValue.hour(value.hour());
+                 changedValue.minute(value.minute());
+                 changedValue.second(value.second());
+                 onChange(changedValue);
+               }
+             } else if (originalValue !== value) {
+               onChange(value);
+             }
            } else if (allowEmpty) {
              onChange(null);
            } else {
              invalid: false
            });
          },
-       
          onKeyDown: function onKeyDown(e) {
            if (e.keyCode === 27) {
              this.props.onEsc();
            }
          },
-       
          onClear: function onClear() {
            this.setState({ str: '' });
            this.props.onClear();
          },
-       
          getClearButton: function getClearButton() {
-           var _props2 = this.props;
-           var locale = _props2.locale;
-           var prefixCls = _props2.prefixCls;
-           var allowEmpty = _props2.allowEmpty;
+           var _props3 = this.props;
+           var prefixCls = _props3.prefixCls;
+           var allowEmpty = _props3.allowEmpty;
        
            if (!allowEmpty) {
              return null;
            }
-           return _react2['default'].createElement('a', { className: prefixCls + '-clear-btn', role: 'button', title: locale.clear, onMouseDown: this.onClear });
+           return _react2.default.createElement('a', {
+             className: prefixCls + '-clear-btn',
+             role: 'button',
+             title: this.props.clearText,
+             onMouseDown: this.onClear
+           });
+         },
+         getProtoValue: function getProtoValue() {
+           return this.props.value || this.props.defaultOpenValue;
          },
-       
          getInput: function getInput() {
-           var _props3 = this.props;
-           var prefixCls = _props3.prefixCls;
-           var placeholder = _props3.placeholder;
+           var _props4 = this.props;
+           var prefixCls = _props4.prefixCls;
+           var placeholder = _props4.placeholder;
            var _state = this.state;
            var invalid = _state.invalid;
            var str = _state.str;
        
            var invalidClass = invalid ? prefixCls + '-input-invalid' : '';
-           return _react2['default'].createElement('input', {
+           return _react2.default.createElement('input', {
              className: prefixCls + '-input  ' + invalidClass,
              ref: 'input',
              onKeyDown: this.onKeyDown,
              value: str,
-             placeholder: placeholder, onChange: this.onInputChange
+             placeholder: placeholder,
+             onChange: this.onInputChange
            });
          },
-       
-         selectRange: function selectRange() {
-           this.refs.input.select();
-           if (this.props.currentSelectPanel && this.refs.input.value) {
-             var selectionRangeStart = 0;
-             var selectionRangeEnd = 0;
-             if (this.props.currentSelectPanel === 'hour') {
-               selectionRangeStart = 0;
-               selectionRangeEnd = this.refs.input.value.indexOf(':');
-             } else if (this.props.currentSelectPanel === 'minute') {
-               selectionRangeStart = this.refs.input.value.indexOf(':') + 1;
-               selectionRangeEnd = this.refs.input.value.lastIndexOf(':');
-             } else if (this.props.currentSelectPanel === 'second') {
-               selectionRangeStart = this.refs.input.value.lastIndexOf(':') + 1;
-               selectionRangeEnd = this.refs.input.value.length;
-             }
-             if (selectionRangeEnd - selectionRangeStart === 2) {
-               (0, _utilSelection2['default'])(this.refs.input, selectionRangeStart, selectionRangeEnd);
-             }
-           }
-         },
-       
          render: function render() {
            var prefixCls = this.props.prefixCls;
        
-           return _react2['default'].createElement(
+           return _react2.default.createElement(
              'div',
              { className: prefixCls + '-input-wrap' },
              this.getInput(),
          }
        });
        
-       exports['default'] = Header;
-       module.exports = exports['default'];
-
-/***/ },
-/* 222 */
-/***/ function(module, exports) {
-
-       'use strict';
-       
-       Object.defineProperty(exports, '__esModule', {
-         value: true
-       });
-       exports['default'] = createSelection;
-       
-       function createSelection(field, start, end) {
-         if (field.createTextRange) {
-           var selRange = field.createTextRange();
-           selRange.collapse(true);
-           selRange.moveStart('character', start);
-           selRange.moveEnd('character', end);
-           selRange.select();
-           field.focus();
-         } else if (field.setSelectionRange) {
-           field.focus();
-           field.setSelectionRange(start, end);
-         } else if (typeof field.selectionStart !== 'undefined') {
-           field.selectionStart = start;
-           field.selectionEnd = end;
-           field.focus();
-         }
-       }
-       
+       exports.default = Header;
        module.exports = exports['default'];
 
 /***/ },
-/* 223 */
+/* 215 */
 /***/ function(module, exports, __webpack_require__) {
 
        'use strict';
        
-       Object.defineProperty(exports, '__esModule', {
+       Object.defineProperty(exports, "__esModule", {
          value: true
        });
        
-       function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
-       
        var _react = __webpack_require__(3);
        
        var _react2 = _interopRequireDefault(_react);
        
-       var _Select = __webpack_require__(224);
+       var _Select = __webpack_require__(216);
        
        var _Select2 = _interopRequireDefault(_Select);
        
-       var _gregorianCalendar = __webpack_require__(161);
-       
-       var _gregorianCalendar2 = _interopRequireDefault(_gregorianCalendar);
+       function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
        
        var formatOption = function formatOption(option, disabledOptions) {
          var value = '' + option;
          };
        };
        
-       var Combobox = _react2['default'].createClass({
+       var Combobox = _react2.default.createClass({
          displayName: 'Combobox',
        
          propTypes: {
-           formatter: _react.PropTypes.object,
+           format: _react.PropTypes.string,
+           defaultOpenValue: _react.PropTypes.object,
            prefixCls: _react.PropTypes.string,
            value: _react.PropTypes.object,
            onChange: _react.PropTypes.func,
            showHour: _react.PropTypes.bool,
-           gregorianCalendarLocale: _react.PropTypes.object,
            showSecond: _react.PropTypes.bool,
            hourOptions: _react.PropTypes.array,
            minuteOptions: _react.PropTypes.array,
          },
        
          onItemChange: function onItemChange(type, itemValue) {
-           var onChange = this.props.onChange;
+           var _props = this.props;
+           var onChange = _props.onChange;
+           var defaultOpenValue = _props.defaultOpenValue;
        
-           var value = this.props.value;
-           if (value) {
-             value = value.clone();
-           } else {
-             value = this.getNow().clone();
-           }
+           var value = (this.props.value || defaultOpenValue).clone();
            if (type === 'hour') {
-             value.setHourOfDay(itemValue);
+             value.hour(itemValue);
            } else if (type === 'minute') {
-             value.setMinutes(itemValue);
+             value.minute(itemValue);
            } else {
-             value.setSeconds(itemValue);
+             value.second(itemValue);
            }
            onChange(value);
          },
-       
          onEnterSelectPanel: function onEnterSelectPanel(range) {
            this.props.onCurrentSelectPanelChange(range);
          },
-       
          getHourSelect: function getHourSelect(hour) {
-           var _props = this.props;
-           var prefixCls = _props.prefixCls;
-           var hourOptions = _props.hourOptions;
-           var disabledHours = _props.disabledHours;
-           var showHour = _props.showHour;
+           var _props2 = this.props;
+           var prefixCls = _props2.prefixCls;
+           var hourOptions = _props2.hourOptions;
+           var disabledHours = _props2.disabledHours;
+           var showHour = _props2.showHour;
        
            if (!showHour) {
              return null;
            }
            var disabledOptions = disabledHours();
        
-           return _react2['default'].createElement(_Select2['default'], {
+           return _react2.default.createElement(_Select2.default, {
              prefixCls: prefixCls,
              options: hourOptions.map(function (option) {
                return formatOption(option, disabledOptions);
              onMouseEnter: this.onEnterSelectPanel.bind(this, 'hour')
            });
          },
-       
          getMinuteSelect: function getMinuteSelect(minute) {
-           var _props2 = this.props;
-           var prefixCls = _props2.prefixCls;
-           var minuteOptions = _props2.minuteOptions;
-           var disabledMinutes = _props2.disabledMinutes;
+           var _props3 = this.props;
+           var prefixCls = _props3.prefixCls;
+           var minuteOptions = _props3.minuteOptions;
+           var disabledMinutes = _props3.disabledMinutes;
+           var defaultOpenValue = _props3.defaultOpenValue;
        
-           var value = this.props.value || this.getNow();
-           var disabledOptions = disabledMinutes(value.getHourOfDay());
+           var value = this.props.value || defaultOpenValue;
+           var disabledOptions = disabledMinutes(value.hour());
        
-           return _react2['default'].createElement(_Select2['default'], {
+           return _react2.default.createElement(_Select2.default, {
              prefixCls: prefixCls,
              options: minuteOptions.map(function (option) {
                return formatOption(option, disabledOptions);
              onMouseEnter: this.onEnterSelectPanel.bind(this, 'minute')
            });
          },
-       
          getSecondSelect: function getSecondSelect(second) {
-           var _props3 = this.props;
-           var prefixCls = _props3.prefixCls;
-           var secondOptions = _props3.secondOptions;
-           var disabledSeconds = _props3.disabledSeconds;
-           var showSecond = _props3.showSecond;
+           var _props4 = this.props;
+           var prefixCls = _props4.prefixCls;
+           var secondOptions = _props4.secondOptions;
+           var disabledSeconds = _props4.disabledSeconds;
+           var showSecond = _props4.showSecond;
+           var defaultOpenValue = _props4.defaultOpenValue;
        
            if (!showSecond) {
              return null;
            }
-           var value = this.props.value || this.getNow();
-           var disabledOptions = disabledSeconds(value.getHourOfDay(), value.getMinutes());
+           var value = this.props.value || defaultOpenValue;
+           var disabledOptions = disabledSeconds(value.hour(), value.minute());
        
-           return _react2['default'].createElement(_Select2['default'], {
+           return _react2.default.createElement(_Select2.default, {
              prefixCls: prefixCls,
              options: secondOptions.map(function (option) {
                return formatOption(option, disabledOptions);
              onMouseEnter: this.onEnterSelectPanel.bind(this, 'second')
            });
          },
-       
-         getNow: function getNow() {
-           if (this.showNow) {
-             return this.showNow;
-           }
-           var value = new _gregorianCalendar2['default'](this.props.gregorianCalendarLocale);
-           value.setTime(Date.now());
-           this.showNow = value;
-           return value;
-         },
-       
          render: function render() {
-           var prefixCls = this.props.prefixCls;
+           var _props5 = this.props;
+           var prefixCls = _props5.prefixCls;
+           var defaultOpenValue = _props5.defaultOpenValue;
        
-           var value = this.props.value || this.getNow();
-           return _react2['default'].createElement(
+           var value = this.props.value || defaultOpenValue;
+           return _react2.default.createElement(
              'div',
              { className: prefixCls + '-combobox' },
-             this.getHourSelect(value.getHourOfDay()),
-             this.getMinuteSelect(value.getMinutes()),
-             this.getSecondSelect(value.getSeconds())
+             this.getHourSelect(value.hour()),
+             this.getMinuteSelect(value.minute()),
+             this.getSecondSelect(value.second())
            );
          }
        });
        
-       exports['default'] = Combobox;
+       exports.default = Combobox;
        module.exports = exports['default'];
 
 /***/ },
-/* 224 */
+/* 216 */
 /***/ function(module, exports, __webpack_require__) {
 
        'use strict';
        
-       Object.defineProperty(exports, '__esModule', {
+       Object.defineProperty(exports, "__esModule", {
          value: true
        });
        
-       function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+       var _defineProperty2 = __webpack_require__(217);
        
-       function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+       var _defineProperty3 = _interopRequireDefault(_defineProperty2);
        
        var _react = __webpack_require__(3);
        
        var _react2 = _interopRequireDefault(_react);
        
-       var _reactDom = __webpack_require__(160);
+       var _reactDom = __webpack_require__(37);
        
        var _reactDom2 = _interopRequireDefault(_reactDom);
        
-       var _classnames2 = __webpack_require__(177);
+       var _classnames2 = __webpack_require__(236);
        
        var _classnames3 = _interopRequireDefault(_classnames2);
        
+       function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+       
        var scrollTo = function scrollTo(element, to, duration) {
          var requestAnimationFrame = window.requestAnimationFrame || function requestAnimationFrameTimeout() {
            return setTimeout(arguments[0], 10);
          });
        };
        
-       var Select = _react2['default'].createClass({
+       var Select = _react2.default.createClass({
          displayName: 'Select',
        
          propTypes: {
            prefixCls: _react.PropTypes.string,
            options: _react.PropTypes.array,
-           gregorianCalendarLocale: _react.PropTypes.object,
            selectedIndex: _react.PropTypes.number,
            type: _react.PropTypes.string,
            onSelect: _react.PropTypes.func,
            // jump to selected option
            this.scrollToSelected(0);
          },
-       
          componentDidUpdate: function componentDidUpdate(prevProps) {
            // smooth scroll to selected option
            if (prevProps.selectedIndex !== this.props.selectedIndex) {
              this.scrollToSelected(120);
            }
          },
-       
          onSelect: function onSelect(value) {
            var _props = this.props;
            var onSelect = _props.onSelect;
        
            onSelect(type, value);
          },
-       
          getOptions: function getOptions() {
            var _this = this;
        
            return options.map(function (item, index) {
              var _classnames;
        
-             var cls = (0, _classnames3['default'])((_classnames = {}, _defineProperty(_classnames, prefixCls + '-select-option-selected', selectedIndex === index), _defineProperty(_classnames, prefixCls + '-select-option-disabled', item.disabled), _classnames));
+             var cls = (0, _classnames3.default)((_classnames = {}, (0, _defineProperty3.default)(_classnames, prefixCls + '-select-option-selected', selectedIndex === index), (0, _defineProperty3.default)(_classnames, prefixCls + '-select-option-disabled', item.disabled), _classnames));
              var onclick = null;
              if (!item.disabled) {
                onclick = _this.onSelect.bind(_this, +item.value);
              }
-             return _react2['default'].createElement(
+             return _react2.default.createElement(
                'li',
-               { className: cls, key: index, onClick: onclick, disabled: item.disabled },
+               {
+                 className: cls,
+                 key: index,
+                 onClick: onclick,
+                 disabled: item.disabled
+               },
                item.value
              );
            });
          },
-       
          scrollToSelected: function scrollToSelected(duration) {
            // move to selected item
-           var select = _reactDom2['default'].findDOMNode(this);
-           var list = _reactDom2['default'].findDOMNode(this.refs.list);
+           var select = _reactDom2.default.findDOMNode(this);
+           var list = _reactDom2.default.findDOMNode(this.refs.list);
            var index = this.props.selectedIndex;
            if (index < 0) {
              index = 0;
            var to = topOption.offsetTop;
            scrollTo(select, to, duration);
          },
-       
          render: function render() {
            if (this.props.options.length === 0) {
              return null;
        
            var prefixCls = this.props.prefixCls;
        
-           return _react2['default'].createElement(
+       
+           return _react2.default.createElement(
              'div',
-             { className: prefixCls + '-select',
-               onMouseEnter: this.props.onMouseEnter },
-             _react2['default'].createElement(
+             {
+               className: prefixCls + '-select',
+               onMouseEnter: this.props.onMouseEnter
+             },
+             _react2.default.createElement(
                'ul',
                { ref: 'list' },
                this.getOptions()
          }
        });
        
-       exports['default'] = Select;
+       exports.default = Select;
        module.exports = exports['default'];
 
+/***/ },
+/* 217 */
+/***/ function(module, exports, __webpack_require__) {
+
+       "use strict";
+       
+       exports.__esModule = true;
+       
+       var _defineProperty = __webpack_require__(218);
+       
+       var _defineProperty2 = _interopRequireDefault(_defineProperty);
+       
+       function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+       
+       exports.default = function (obj, key, value) {
+         if (key in obj) {
+           (0, _defineProperty2.default)(obj, key, {
+             value: value,
+             enumerable: true,
+             configurable: true,
+             writable: true
+           });
+         } else {
+           obj[key] = value;
+         }
+       
+         return obj;
+       };
+
+/***/ },
+/* 218 */
+/***/ function(module, exports, __webpack_require__) {
+
+       module.exports = { "default": __webpack_require__(219), __esModule: true };
+
+/***/ },
+/* 219 */
+/***/ function(module, exports, __webpack_require__) {
+
+       __webpack_require__(220);
+       var $Object = __webpack_require__(223).Object;
+       module.exports = function defineProperty(it, key, desc){
+         return $Object.defineProperty(it, key, desc);
+       };
+
+/***/ },
+/* 220 */
+/***/ function(module, exports, __webpack_require__) {
+
+       var $export = __webpack_require__(221);
+       // 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)
+       $export($export.S + $export.F * !__webpack_require__(231), 'Object', {defineProperty: __webpack_require__(227).f});
+
+/***/ },
+/* 221 */
+/***/ function(module, exports, __webpack_require__) {
+
+       var global    = __webpack_require__(222)
+         , core      = __webpack_require__(223)
+         , ctx       = __webpack_require__(224)
+         , hide      = __webpack_require__(226)
+         , PROTOTYPE = 'prototype';
+       
+       var $export = function(type, name, source){
+         var IS_FORCED = type & $export.F
+           , IS_GLOBAL = type & $export.G
+           , IS_STATIC = type & $export.S
+           , IS_PROTO  = type & $export.P
+           , IS_BIND   = type & $export.B
+           , IS_WRAP   = type & $export.W
+           , exports   = IS_GLOBAL ? core : core[name] || (core[name] = {})
+           , expProto  = exports[PROTOTYPE]
+           , target    = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE]
+           , key, own, out;
+         if(IS_GLOBAL)source = name;
+         for(key in source){
+           // contains in native
+           own = !IS_FORCED && target && target[key] !== undefined;
+           if(own && key in exports)continue;
+           // export native or passed
+           out = own ? target[key] : source[key];
+           // prevent global pollution for namespaces
+           exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]
+           // bind timers to global for call from export context
+           : IS_BIND && own ? ctx(out, global)
+           // wrap global constructors for prevent change them in library
+           : IS_WRAP && target[key] == out ? (function(C){
+             var F = function(a, b, c){
+               if(this instanceof C){
+                 switch(arguments.length){
+                   case 0: return new C;
+                   case 1: return new C(a);
+                   case 2: return new C(a, b);
+                 } return new C(a, b, c);
+               } return C.apply(this, arguments);
+             };
+             F[PROTOTYPE] = C[PROTOTYPE];
+             return F;
+           // make static versions for prototype methods
+           })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;
+           // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%
+           if(IS_PROTO){
+             (exports.virtual || (exports.virtual = {}))[key] = out;
+             // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%
+             if(type & $export.R && expProto && !expProto[key])hide(expProto, key, out);
+           }
+         }
+       };
+       // type bitmap
+       $export.F = 1;   // forced
+       $export.G = 2;   // global
+       $export.S = 4;   // static
+       $export.P = 8;   // proto
+       $export.B = 16;  // bind
+       $export.W = 32;  // wrap
+       $export.U = 64;  // safe
+       $export.R = 128; // real proto method for `library` 
+       module.exports = $export;
+
+/***/ },
+/* 222 */
+/***/ function(module, exports) {
+
+       // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
+       var global = module.exports = typeof window != 'undefined' && window.Math == Math
+         ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')();
+       if(typeof __g == 'number')__g = global; // eslint-disable-line no-undef
+
+/***/ },
+/* 223 */
+/***/ function(module, exports) {
+
+       var core = module.exports = {version: '2.4.0'};
+       if(typeof __e == 'number')__e = core; // eslint-disable-line no-undef
+
+/***/ },
+/* 224 */
+/***/ function(module, exports, __webpack_require__) {
+
+       // optional / simple context binding
+       var aFunction = __webpack_require__(225);
+       module.exports = function(fn, that, length){
+         aFunction(fn);
+         if(that === undefined)return fn;
+         switch(length){
+           case 1: return function(a){
+             return fn.call(that, a);
+           };
+           case 2: return function(a, b){
+             return fn.call(that, a, b);
+           };
+           case 3: return function(a, b, c){
+             return fn.call(that, a, b, c);
+           };
+         }
+         return function(/* ...args */){
+           return fn.apply(that, arguments);
+         };
+       };
+
 /***/ },
 /* 225 */
+/***/ function(module, exports) {
+
+       module.exports = function(it){
+         if(typeof it != 'function')throw TypeError(it + ' is not a function!');
+         return it;
+       };
+
+/***/ },
+/* 226 */
+/***/ function(module, exports, __webpack_require__) {
+
+       var dP         = __webpack_require__(227)
+         , createDesc = __webpack_require__(235);
+       module.exports = __webpack_require__(231) ? function(object, key, value){
+         return dP.f(object, key, createDesc(1, value));
+       } : function(object, key, value){
+         object[key] = value;
+         return object;
+       };
+
+/***/ },
+/* 227 */
+/***/ function(module, exports, __webpack_require__) {
+
+       var anObject       = __webpack_require__(228)
+         , IE8_DOM_DEFINE = __webpack_require__(230)
+         , toPrimitive    = __webpack_require__(234)
+         , dP             = Object.defineProperty;
+       
+       exports.f = __webpack_require__(231) ? Object.defineProperty : function defineProperty(O, P, Attributes){
+         anObject(O);
+         P = toPrimitive(P, true);
+         anObject(Attributes);
+         if(IE8_DOM_DEFINE)try {
+           return dP(O, P, Attributes);
+         } catch(e){ /* empty */ }
+         if('get' in Attributes || 'set' in Attributes)throw TypeError('Accessors not supported!');
+         if('value' in Attributes)O[P] = Attributes.value;
+         return O;
+       };
+
+/***/ },
+/* 228 */
+/***/ function(module, exports, __webpack_require__) {
+
+       var isObject = __webpack_require__(229);
+       module.exports = function(it){
+         if(!isObject(it))throw TypeError(it + ' is not an object!');
+         return it;
+       };
+
+/***/ },
+/* 229 */
+/***/ function(module, exports) {
+
+       module.exports = function(it){
+         return typeof it === 'object' ? it !== null : typeof it === 'function';
+       };
+
+/***/ },
+/* 230 */
+/***/ function(module, exports, __webpack_require__) {
+
+       module.exports = !__webpack_require__(231) && !__webpack_require__(232)(function(){
+         return Object.defineProperty(__webpack_require__(233)('div'), 'a', {get: function(){ return 7; }}).a != 7;
+       });
+
+/***/ },
+/* 231 */
+/***/ function(module, exports, __webpack_require__) {
+
+       // Thank's IE8 for his funny defineProperty
+       module.exports = !__webpack_require__(232)(function(){
+         return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7;
+       });
+
+/***/ },
+/* 232 */
+/***/ function(module, exports) {
+
+       module.exports = function(exec){
+         try {
+           return !!exec();
+         } catch(e){
+           return true;
+         }
+       };
+
+/***/ },
+/* 233 */
+/***/ function(module, exports, __webpack_require__) {
+
+       var isObject = __webpack_require__(229)
+         , document = __webpack_require__(222).document
+         // in old IE typeof document.createElement is 'object'
+         , is = isObject(document) && isObject(document.createElement);
+       module.exports = function(it){
+         return is ? document.createElement(it) : {};
+       };
+
+/***/ },
+/* 234 */
+/***/ function(module, exports, __webpack_require__) {
+
+       // 7.1.1 ToPrimitive(input [, PreferredType])
+       var isObject = __webpack_require__(229);
+       // instead of the ES6 spec version, we didn't implement @@toPrimitive case
+       // and the second argument - flag - preferred type is a string
+       module.exports = function(it, S){
+         if(!isObject(it))return it;
+         var fn, val;
+         if(S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;
+         if(typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it)))return val;
+         if(!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;
+         throw TypeError("Can't convert object to primitive value");
+       };
+
+/***/ },
+/* 235 */
+/***/ function(module, exports) {
+
+       module.exports = function(bitmap, value){
+         return {
+           enumerable  : !(bitmap & 1),
+           configurable: !(bitmap & 2),
+           writable    : !(bitmap & 4),
+           value       : value
+         };
+       };
+
+/***/ },
+/* 236 */
+/***/ function(module, exports, __webpack_require__) {
+
+       var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
+         Copyright (c) 2016 Jed Watson.
+         Licensed under the MIT License (MIT), see
+         http://jedwatson.github.io/classnames
+       */
+       /* global define */
+       
+       (function () {
+               'use strict';
+       
+               var hasOwn = {}.hasOwnProperty;
+       
+               function classNames () {
+                       var classes = [];
+       
+                       for (var i = 0; i < arguments.length; i++) {
+                               var arg = arguments[i];
+                               if (!arg) continue;
+       
+                               var argType = typeof arg;
+       
+                               if (argType === 'string' || argType === 'number') {
+                                       classes.push(arg);
+                               } else if (Array.isArray(arg)) {
+                                       classes.push(classNames.apply(null, arg));
+                               } else if (argType === 'object') {
+                                       for (var key in arg) {
+                                               if (hasOwn.call(arg, key) && arg[key]) {
+                                                       classes.push(key);
+                                               }
+                                       }
+                               }
+                       }
+       
+                       return classes.join(' ');
+               }
+       
+               if (typeof module !== 'undefined' && module.exports) {
+                       module.exports = classNames;
+               } else if (true) {
+                       // register as 'classnames', consistent with npm package name
+                       !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function () {
+                               return classNames;
+                       }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
+               } else {
+                       window.classNames = classNames;
+               }
+       }());
+
+
+/***/ },
+/* 237 */
 /***/ function(module, exports) {
 
        'use strict';
        
-       Object.defineProperty(exports, '__esModule', {
+       Object.defineProperty(exports, "__esModule", {
          value: true
        });
        var autoAdjustOverflow = {
          }
        };
        
-       exports['default'] = placements;
-       module.exports = exports['default'];
-
-/***/ },
-/* 226 */
-/***/ function(module, exports, __webpack_require__) {
-
-       'use strict';
-       
-       Object.defineProperty(exports, '__esModule', {
-         value: true
-       });
-       exports.getFormatter = getFormatter;
-       
-       function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
-       
-       var _gregorianCalendarFormat = __webpack_require__(165);
-       
-       var _gregorianCalendarFormat2 = _interopRequireDefault(_gregorianCalendarFormat);
-       
-       function getFormatter(format, locale) {
-         if (typeof format === 'string') {
-           return new _gregorianCalendarFormat2['default'](format, locale.format);
-         }
-         return format;
-       }
-
-/***/ },
-/* 227 */
-/***/ function(module, exports, __webpack_require__) {
-
-       'use strict';
-       
-       Object.defineProperty(exports, '__esModule', {
-         value: true
-       });
-       
-       function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
-       
-       var _gregorianCalendarFormatLibLocaleZh_CN = __webpack_require__(228);
-       
-       var _gregorianCalendarFormatLibLocaleZh_CN2 = _interopRequireDefault(_gregorianCalendarFormatLibLocaleZh_CN);
-       
-       var _gregorianCalendarLibLocaleZh_CN = __webpack_require__(229);
-       
-       var _gregorianCalendarLibLocaleZh_CN2 = _interopRequireDefault(_gregorianCalendarLibLocaleZh_CN);
-       
-       exports['default'] = {
-         clear: '清除',
-         format: _gregorianCalendarFormatLibLocaleZh_CN2['default'],
-         calendar: _gregorianCalendarLibLocaleZh_CN2['default']
-       };
+       exports.default = placements;
        module.exports = exports['default'];
 
-/***/ },
-/* 228 */
-/***/ function(module, exports) {
-
-       'use strict';
-       
-       module.exports = {
-         eras: ['公元前', '公元'],
-         months: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'],
-         shortMonths: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'],
-         weekdays: ['星期天', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'],
-         shortWeekdays: ['周日', '周一', '周二', '周三', '周四', '周五', '周六'],
-         veryShortWeekdays: ['日', '一', '二', '三', '四', '五', '六'],
-         ampms: ['上午', '下午'],
-         datePatterns: ['yyyy\'年\'M\'月\'d\'日\' EEEE', 'yyyy\'年\'M\'月\'d\'日\'', 'yyyy-M-d', 'yy-M-d'],
-         timePatterns: ['ahh\'时\'mm\'分\'ss\'秒\' \'GMT\'Z', 'ahh\'时\'mm\'分\'ss\'秒\'', 'H:mm:ss', 'ah:mm'],
-         dateTimePattern: '{date} {time}'
-       };
-
-/***/ },
-/* 229 */
-/***/ function(module, exports) {
-
-       /*
-        * zh-cn locale
-        * @ignore
-        * @author yiminghe@gmail.com
-        */
-       "use strict";
-       
-       module.exports = {
-         // in minutes
-         timezoneOffset: 8 * 60,
-         firstDayOfWeek: 1,
-         minimalDaysInFirstWeek: 1
-       };
-
 /***/ }
 /******/ ]);
 //# sourceMappingURL=common.js.map
\ No newline at end of file
index 0c317f98457f90637bbdb45b70801d6e42f26399..e27c470a388e8e17944cfdeeafa55a2a113c352c 100644 (file)
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///webpack/bootstrap b92ccce943cebbd77676","webpack:///./assets/index.less","webpack:///./~/react/react.js","webpack:///./~/react/lib/React.js","webpack:///./~/react/lib/ReactDOM.js","webpack:///./~/process/browser.js","webpack:///./~/react/lib/ReactCurrentOwner.js","webpack:///./~/react/lib/ReactDOMTextComponent.js","webpack:///./~/react/lib/DOMChildrenOperations.js","webpack:///./~/react/lib/Danger.js","webpack:///./~/fbjs/lib/ExecutionEnvironment.js","webpack:///./~/fbjs/lib/createNodesFromMarkup.js","webpack:///./~/fbjs/lib/createArrayFromMixed.js","webpack:///./~/fbjs/lib/toArray.js","webpack:///./~/fbjs/lib/invariant.js","webpack:///./~/fbjs/lib/getMarkupWrap.js","webpack:///./~/fbjs/lib/emptyFunction.js","webpack:///./~/react/lib/ReactMultiChildUpdateTypes.js","webpack:///./~/fbjs/lib/keyMirror.js","webpack:///./~/react/lib/ReactPerf.js","webpack:///./~/react/lib/setInnerHTML.js","webpack:///./~/react/lib/setTextContent.js","webpack:///./~/react/lib/escapeTextContentForBrowser.js","webpack:///./~/react/lib/DOMPropertyOperations.js","webpack:///./~/react/lib/DOMProperty.js","webpack:///./~/react/lib/quoteAttributeValueForBrowser.js","webpack:///./~/fbjs/lib/warning.js","webpack:///./~/react/lib/ReactComponentBrowserEnvironment.js","webpack:///./~/react/lib/ReactDOMIDOperations.js","webpack:///./~/react/lib/ReactMount.js","webpack:///./~/react/lib/ReactBrowserEventEmitter.js","webpack:///./~/react/lib/EventConstants.js","webpack:///./~/react/lib/EventPluginHub.js","webpack:///./~/react/lib/EventPluginRegistry.js","webpack:///./~/react/lib/EventPluginUtils.js","webpack:///./~/react/lib/ReactErrorUtils.js","webpack:///./~/react/lib/accumulateInto.js","webpack:///./~/react/lib/forEachAccumulated.js","webpack:///./~/react/lib/ReactEventEmitterMixin.js","webpack:///./~/react/lib/ViewportMetrics.js","webpack:///./~/react/lib/Object.assign.js","webpack:///./~/react/lib/isEventSupported.js","webpack:///./~/react/lib/ReactDOMFeatureFlags.js","webpack:///./~/react/lib/ReactElement.js","webpack:///./~/react/lib/canDefineProperty.js","webpack:///./~/react/lib/ReactEmptyComponentRegistry.js","webpack:///./~/react/lib/ReactInstanceHandles.js","webpack:///./~/react/lib/ReactRootIndex.js","webpack:///./~/react/lib/ReactInstanceMap.js","webpack:///./~/react/lib/ReactMarkupChecksum.js","webpack:///./~/react/lib/adler32.js","webpack:///./~/react/lib/ReactReconciler.js","webpack:///./~/react/lib/ReactRef.js","webpack:///./~/react/lib/ReactOwner.js","webpack:///./~/react/lib/ReactUpdateQueue.js","webpack:///./~/react/lib/ReactUpdates.js","webpack:///./~/react/lib/CallbackQueue.js","webpack:///./~/react/lib/PooledClass.js","webpack:///./~/react/lib/Transaction.js","webpack:///./~/fbjs/lib/emptyObject.js","webpack:///./~/fbjs/lib/containsNode.js","webpack:///./~/fbjs/lib/isTextNode.js","webpack:///./~/fbjs/lib/isNode.js","webpack:///./~/react/lib/instantiateReactComponent.js","webpack:///./~/react/lib/ReactCompositeComponent.js","webpack:///./~/react/lib/ReactComponentEnvironment.js","webpack:///./~/react/lib/ReactPropTypeLocations.js","webpack:///./~/react/lib/ReactPropTypeLocationNames.js","webpack:///./~/react/lib/shouldUpdateReactComponent.js","webpack:///./~/react/lib/ReactEmptyComponent.js","webpack:///./~/react/lib/ReactNativeComponent.js","webpack:///./~/react/lib/validateDOMNesting.js","webpack:///./~/react/lib/ReactDefaultInjection.js","webpack:///./~/react/lib/BeforeInputEventPlugin.js","webpack:///./~/react/lib/EventPropagators.js","webpack:///./~/react/lib/FallbackCompositionState.js","webpack:///./~/react/lib/getTextContentAccessor.js","webpack:///./~/react/lib/SyntheticCompositionEvent.js","webpack:///./~/react/lib/SyntheticEvent.js","webpack:///./~/react/lib/SyntheticInputEvent.js","webpack:///./~/fbjs/lib/keyOf.js","webpack:///./~/react/lib/ChangeEventPlugin.js","webpack:///./~/react/lib/getEventTarget.js","webpack:///./~/react/lib/isTextInputElement.js","webpack:///./~/react/lib/ClientReactRootIndex.js","webpack:///./~/react/lib/DefaultEventPluginOrder.js","webpack:///./~/react/lib/EnterLeaveEventPlugin.js","webpack:///./~/react/lib/SyntheticMouseEvent.js","webpack:///./~/react/lib/SyntheticUIEvent.js","webpack:///./~/react/lib/getEventModifierState.js","webpack:///./~/react/lib/HTMLDOMPropertyConfig.js","webpack:///./~/react/lib/ReactBrowserComponentMixin.js","webpack:///./~/react/lib/findDOMNode.js","webpack:///./~/react/lib/ReactDefaultBatchingStrategy.js","webpack:///./~/react/lib/ReactDOMComponent.js","webpack:///./~/react/lib/AutoFocusUtils.js","webpack:///./~/fbjs/lib/focusNode.js","webpack:///./~/react/lib/CSSPropertyOperations.js","webpack:///./~/react/lib/CSSProperty.js","webpack:///./~/fbjs/lib/camelizeStyleName.js","webpack:///./~/fbjs/lib/camelize.js","webpack:///./~/react/lib/dangerousStyleValue.js","webpack:///./~/fbjs/lib/hyphenateStyleName.js","webpack:///./~/fbjs/lib/hyphenate.js","webpack:///./~/fbjs/lib/memoizeStringOnly.js","webpack:///./~/react/lib/ReactDOMButton.js","webpack:///./~/react/lib/ReactDOMInput.js","webpack:///./~/react/lib/LinkedValueUtils.js","webpack:///./~/react/lib/ReactPropTypes.js","webpack:///./~/react/lib/getIteratorFn.js","webpack:///./~/react/lib/ReactDOMOption.js","webpack:///./~/react/lib/ReactChildren.js","webpack:///./~/react/lib/traverseAllChildren.js","webpack:///./~/react/lib/ReactDOMSelect.js","webpack:///./~/react/lib/ReactDOMTextarea.js","webpack:///./~/react/lib/ReactMultiChild.js","webpack:///./~/react/lib/ReactChildReconciler.js","webpack:///./~/react/lib/flattenChildren.js","webpack:///./~/fbjs/lib/shallowEqual.js","webpack:///./~/react/lib/ReactEventListener.js","webpack:///./~/fbjs/lib/EventListener.js","webpack:///./~/fbjs/lib/getUnboundedScrollPosition.js","webpack:///./~/react/lib/ReactInjection.js","webpack:///./~/react/lib/ReactClass.js","webpack:///./~/react/lib/ReactComponent.js","webpack:///./~/react/lib/ReactNoopUpdateQueue.js","webpack:///./~/react/lib/ReactReconcileTransaction.js","webpack:///./~/react/lib/ReactInputSelection.js","webpack:///./~/react/lib/ReactDOMSelection.js","webpack:///./~/react/lib/getNodeForCharacterOffset.js","webpack:///./~/fbjs/lib/getActiveElement.js","webpack:///./~/react/lib/SelectEventPlugin.js","webpack:///./~/react/lib/ServerReactRootIndex.js","webpack:///./~/react/lib/SimpleEventPlugin.js","webpack:///./~/react/lib/SyntheticClipboardEvent.js","webpack:///./~/react/lib/SyntheticFocusEvent.js","webpack:///./~/react/lib/SyntheticKeyboardEvent.js","webpack:///./~/react/lib/getEventCharCode.js","webpack:///./~/react/lib/getEventKey.js","webpack:///./~/react/lib/SyntheticDragEvent.js","webpack:///./~/react/lib/SyntheticTouchEvent.js","webpack:///./~/react/lib/SyntheticWheelEvent.js","webpack:///./~/react/lib/SVGDOMPropertyConfig.js","webpack:///./~/react/lib/ReactDefaultPerf.js","webpack:///./~/react/lib/ReactDefaultPerfAnalysis.js","webpack:///./~/fbjs/lib/performanceNow.js","webpack:///./~/fbjs/lib/performance.js","webpack:///./~/react/lib/ReactVersion.js","webpack:///./~/react/lib/renderSubtreeIntoContainer.js","webpack:///./~/react/lib/ReactDOMServer.js","webpack:///./~/react/lib/ReactServerRendering.js","webpack:///./~/react/lib/ReactServerBatchingStrategy.js","webpack:///./~/react/lib/ReactServerRenderingTransaction.js","webpack:///./~/react/lib/ReactIsomorphic.js","webpack:///./~/react/lib/ReactDOMFactories.js","webpack:///./~/react/lib/ReactElementValidator.js","webpack:///./~/fbjs/lib/mapObject.js","webpack:///./~/react/lib/onlyChild.js","webpack:///./~/react/lib/deprecated.js","webpack:///./~/react-dom/index.js","webpack:///./~/gregorian-calendar/lib/gregorian-calendar.js","webpack:///./~/gregorian-calendar/lib/utils.js","webpack:///./~/gregorian-calendar/lib/const.js","webpack:///./~/gregorian-calendar/lib/locale/en_US.js","webpack:///./~/gregorian-calendar-format/lib/gregorian-calendar-format.js","webpack:///./~/gregorian-calendar-format/lib/locale/en_US.js","webpack:///./~/warning/browser.js","webpack:///./index.js","webpack:///./src/index.js","webpack:///./src/TimePicker.jsx","webpack:///./~/rc-trigger/lib/index.js","webpack:///./~/rc-trigger/lib/Trigger.js","webpack:///./~/rc-util/lib/index.js","webpack:///./~/rc-util/lib/guid.js","webpack:///./~/rc-util/lib/classSet.js","webpack:///./~/util-deprecate/browser.js","webpack:///./~/classnames/index.js","webpack:///./~/rc-util/lib/joinClasses.js","webpack:///./~/rc-util/lib/KeyCode.js","webpack:///./~/rc-util/lib/PureRenderMixin.js","webpack:///./~/rc-util/lib/shallowEqual.js","webpack:///./~/shallowequal/modules/index.js","webpack:///./~/lodash.keys/index.js","webpack:///./~/lodash._getnative/index.js","webpack:///./~/lodash.isarguments/index.js","webpack:///./~/lodash.isarray/index.js","webpack:///./~/rc-util/lib/createChainedFunction.js","webpack:///./~/rc-util/lib/Dom/addEventListener.js","webpack:///./~/add-dom-event-listener/lib/index.js","webpack:///./~/add-dom-event-listener/lib/EventObject.js","webpack:///./~/add-dom-event-listener/lib/EventBaseObject.js","webpack:///./~/object-assign/index.js","webpack:///./~/rc-util/lib/Dom/contains.js","webpack:///./~/rc-util/lib/Children/toArray.js","webpack:///./~/rc-util/lib/Children/mapSelf.js","webpack:///./~/rc-trigger/lib/Popup.js","webpack:///./~/rc-align/lib/index.js","webpack:///./~/rc-align/lib/Align.js","webpack:///./~/dom-align/lib/index.js","webpack:///./~/dom-align/lib/utils.js","webpack:///./~/dom-align/lib/getOffsetParent.js","webpack:///./~/dom-align/lib/getVisibleRectForElement.js","webpack:///./~/dom-align/lib/adjustForViewport.js","webpack:///./~/dom-align/lib/getRegion.js","webpack:///./~/dom-align/lib/getElFuturePos.js","webpack:///./~/dom-align/lib/getAlignOffset.js","webpack:///./~/rc-align/lib/isWindow.js","webpack:///./~/rc-animate/lib/index.js","webpack:///./~/rc-animate/lib/Animate.js","webpack:///./~/rc-animate/lib/ChildrenUtils.js","webpack:///./~/rc-animate/lib/AnimateChild.js","webpack:///./~/css-animation/lib/index.js","webpack:///./~/css-animation/lib/Event.js","webpack:///./~/css-animation/lib/Css.js","webpack:///./~/rc-animate/lib/util.js","webpack:///./~/rc-trigger/lib/PopupInner.js","webpack:///./~/rc-trigger/lib/utils.js","webpack:///./src/module/Panel.jsx","webpack:///./src/mixin/CommonMixin.js","webpack:///./src/locale/en_US.js","webpack:///./src/module/Header.jsx","webpack:///./src/util/selection.js","webpack:///./src/module/Combobox.jsx","webpack:///./src/module/Select.jsx","webpack:///./src/util/placements.js","webpack:///./src/util/index.js","webpack:///./src/locale/zh_CN.js","webpack:///./~/gregorian-calendar-format/lib/locale/zh_CN.js","webpack:///./~/gregorian-calendar/lib/locale/zh_CN.js"],"names":[],"mappings":";AAAA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAQ,oBAAoB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uBAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wEAAgE,yEAAyE;AACzI;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;;;ACzFA,0C;;;;;;ACAA;;AAEA;;;;;;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAC;;AAED;AACA;;AAEA,wB;;;;;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,+HAA8H;;AAE9H;AACA;AACA;;AAEA;AACA;;AAEA,oBAAmB,6BAA6B;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wB;;;;;;;AC3FA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,wBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAqB;AACrB;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,4BAA2B;AAC3B;AACA;AACA;AACA,6BAA4B,UAAU;;;;;;;AC1FtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAY;AACZ;AACA;;AAEA;;AAEA,oC;;;;;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,cAAa,UAAU;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,0DAA0D;AACvE,eAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,UAAU;AACvB,cAAa,0BAA0B;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA,EAAC;;AAED,wC;;;;;;;AC9HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,WAAW;AACtB,YAAW,WAAW;AACtB,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,cAAa,cAAc;AAC3B,cAAa,cAAc;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAmB,oBAAoB;AACvC;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA,sBAAqB,4BAA4B;AACjD;AACA;AACA;;AAEA,oBAAmB,oBAAoB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,EAAC;;AAED,wC;;;;;;;AChIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa,cAAc;AAC3B,eAAc,kBAAkB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,uBAAuB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,sBAAqB,wBAAwB;AAC7C;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;;AAEA,yB;;;;;;;AChJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA,uC;;;;;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,UAAU;AACrB,aAAY,8BAA8B;AAC1C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,wC;;;;;;;ACnFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,aAAY;AACZ;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,IAAG;AACH;AACA;AACA;;AAEA,uC;;;;;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,yBAAyB;AACpC,aAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA,mBAAkB,aAAa;AAC/B;AACA;AACA;AACA;;AAEA,0B;;;;;;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,sDAAqD;AACrD,MAAK;AACL;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA,2BAA0B;AAC1B;AACA;AACA;;AAEA,4B;;;;;;;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA,gC;;;;;;;AC9FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,8CAA6C;AAC7C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gC;;;;;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED,6C;;;;;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,8BAA6B,sBAAsB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd,eAAc;AACd;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,4B;;;;;;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,cAAa,eAAe;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,cAAa,SAAS;AACtB,eAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,gBAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,aAAY;AACZ;AACA;AACA;AACA;;AAEA,4B;;;;;;;AC/FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,WAAW;AACtB,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,wBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;;AAEA,+B;;;;;;ACzFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,WAAW;AACtB,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iC;;;;;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,cAAa;AACb,aAAY;AACZ,aAAY;AACZ,eAAc;AACd,gBAAe;AACf;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,EAAE;AACb,aAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA,8C;;;;;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,8CAA6C;AAC7C;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAa,OAAO;AACpB,eAAc,OAAO;AACrB;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,EAAE;AACf,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,EAAE;AACf,eAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,OAAO;AACpB,cAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,UAAS;AACT;AACA;AACA,QAAO;AACP;AACA;AACA,2CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,EAAC;;AAED,wC;;;;;;;AChOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA4C;AAC5C,+BAA8B;AAC9B;AACA,iBAAgB;;AAEhB;AACA;AACA;AACA,aAAY;AACZ;AACA,sEAAqE;;AAErE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAmB,oDAAoD;AACvE;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA,8B;;;;;;;ACzOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,EAAE;AACb,aAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA,gD;;;;;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,uFAAsF,aAAa;AACnG;AACA;;AAEA;AACA;AACA;;AAEA;AACA,cAAa;AACb;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA,0B;;;;;;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,mD;;;;;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,cAAa,EAAE;AACf;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,cAAc;AAC3B,cAAa,cAAc;AAC3B;AACA;AACA;AACA,oBAAmB,oBAAoB;AACvC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAC;;AAED,uC;;;;;;;AC7FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAY,OAAO;AACnB;AACA;AACA;AACA,kBAAiB,YAAY;AAC7B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,uBAAuB;AAClC;AACA,aAAY,GAAG;AACf;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA,YAAW,WAAW;AACtB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,8CAA8C;AACzD,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,WAAW;AACtB,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,WAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,EAAE;AACb,aAAY,YAAY;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,YAAY;AACvB,YAAW,OAAO;AAClB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,eAAe;AAC1B,YAAW,OAAO;AAClB,YAAW,WAAW;AACtB,YAAW,0BAA0B;AACrC,YAAW,QAAQ;AACnB;AACA;AACA;AACA,wBAAuB;AACvB;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,eAAe;AAC1B,YAAW,OAAO;AAClB,YAAW,WAAW;AACtB,YAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,eAAe;AAC1B,YAAW,WAAW;AACtB;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,YAAY;AACvB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ,kCAAkC;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,SAAS;AACtB;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,cAAa,eAAe;AAC5B,cAAa,aAAa;AAC1B,cAAa,WAAW;AACxB,cAAa,UAAU;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,eAAe;AAC5B,cAAa,WAAW;AACxB,eAAc,OAAO;AACrB;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,cAAa,aAAa;AAC1B,cAAa,WAAW;AACxB,cAAa,QAAQ;AACrB,eAAc,eAAe;AAC7B;AACA;AACA;AACA;AACA;AACA,qLAAoL;;AAEpL;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,eAAe;AAC5B,cAAa,aAAa;AAC1B,cAAa,WAAW;AACxB,cAAa,UAAU;AACvB,eAAc,eAAe;AAC7B;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,aAAa;AAC1B,cAAa,WAAW;AACxB,cAAa,UAAU;AACvB,eAAc,eAAe;AAC7B;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,cAAa,WAAW;AACxB,eAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,WAAW;AACxB,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oLAAmL;;AAEnL;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,eAAc,YAAY;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB,eAAc,WAAW;AACzB;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,EAAE;AACf,eAAc;AACd;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,cAAa,eAAe;AAC5B,eAAc,OAAO;AACrB,eAAc,eAAe;AAC7B;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,2CAA0C;AAC1C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,EAAC;;AAED,6B;;;;;;;ACj1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAwC;;AAExC;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA,eAAc,QAAQ;AACtB;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAmB,yBAAyB;AAC5C;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA,YAAW;AACX;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA,EAAC;;AAED;AACA;AACA;AACA,EAAC;;AAED,2C;;;;;;ACnUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,oCAAmC,gCAAgC;;AAEnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA,iC;;;;;;AC3FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,QAAQ;AACnB,YAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,uBAAsB;AACtB;AACA;AACA;AACA,oBAAmB;AACnB;AACA;AACA;AACA;AACA,yBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,gBAAe,OAAO;AACtB;AACA;AACA;;AAEA;AACA,gBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA,gBAAe,MAAM;AACrB;AACA;AACA;;AAEA;AACA,gBAAe,OAAO;AACtB;AACA;;AAEA,IAAG;;AAEH;;AAEA;;AAEA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,cAAa,UAAU;AACvB;AACA;AACA;;AAEA,yGAAwG;AACxG;;AAEA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,eAAc,UAAU;AACxB;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,eAAe;AAC5B,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,eAAc,EAAE;AAChB;AACA;AACA;AACA;AACA;AACA,oBAAmB,oBAAoB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;;AAEA,iC;;;;;;;ACtRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,+BAA8B;;AAE9B;AACA;AACA;AACA,8BAA6B;;AAE7B;AACA;AACA;AACA,mCAAkC;;AAElC;AACA;AACA;AACA;AACA;AACA,cAAa,MAAM;AACnB;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,sC;;;;;;;AC3NA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,YAAW,eAAe;AAC1B,YAAW,QAAQ;AACnB,YAAW,SAAS;AACpB,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,8BAA8B;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,8BAA8B;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAY,EAAE;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,eAAe;AAC1B,aAAY,QAAQ;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;;AAEH;AACA;;AAEA,mC;;;;;;;ACzMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,QAAQ;AACnB,YAAW,SAAS;AACpB,YAAW,EAAE;AACb,YAAW,EAAE;AACb;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kC;;;;;;;AC5EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA6B;AAC7B;AACA;AACA;AACA,aAAY,WAAW;AACvB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,iC;;;;;;;AC1DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,YAAW,MAAM;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA,qC;;;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA,yC;;;;;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA,kC;;;;;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,0BAAyB,8BAA8B;AACvD;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,yB;;;;;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,6CAA4C;AAC5C;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,mC;;;;;;AC3DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,uC;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,YAAW,EAAE;AACb,YAAW,cAAc;AACzB,YAAW,EAAE;AACb;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb;AACA,YAAW,EAAE;AACb,YAAW,EAAE;AACb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,oBAAmB,oBAAoB;AACvC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,wBAAuB;;AAEvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,oBAAmB,oBAAoB;AACvC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,YAAW,QAAQ;AACnB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;;AAEA,+B;;;;;;;ACtPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,6BAA4B,QAAQ,oBAAoB,EAAE;AAC1D;AACA,IAAG;AACH;AACA;AACA;;AAEA,oC;;;;;;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,8C;;;;;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB,0BAA0B;AAC3C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB,gBAAgB;AACjC;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,QAAQ;AACnB,YAAW,QAAQ;AACnB,YAAW,SAAS;AACpB,YAAW,EAAE;AACb,YAAW,SAAS;AACpB,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAc,OAAO;AACrB;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,eAAc,OAAO;AACrB;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,cAAa,SAAS;AACtB,cAAa,EAAE;AACf,cAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,SAAS;AACtB,cAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,SAAS;AACtB,cAAa,EAAE;AACf;AACA;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA,uC;;;;;;;AC7SA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,cAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,iC;;;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;;AAEA,mC;;;;;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA,cAAa,OAAO;AACpB,eAAc,OAAO;AACrB;AACA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA,cAAa,OAAO;AACpB,cAAa,WAAW;AACxB,gBAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,sC;;;;;;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU,2BAA2B;AACrC;AACA;AACA;AACA;AACA;AACA,SAAQ,OAAO;AACf;AACA;AACA;AACA;AACA;AACA;;AAEA,0B;;;;;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,cAAa,eAAe;AAC5B,cAAa,OAAO;AACpB,cAAa,0DAA0D;AACvE,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,eAAe;AAC5B,cAAa,aAAa;AAC1B,cAAa,0BAA0B;AACvC,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,eAAe;AAC5B,cAAa,0BAA0B;AACvC;AACA;AACA;AACA;AACA;;AAEA;;AAEA,kC;;;;;;AC1GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,2B;;;;;;AC7EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAAyB,iBAAiB;AAC1C;AACA;AACA;AACA,SAAQ;AACR;AACA;AACA,SAAQ;AACR;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAa,QAAQ;AACrB,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,eAAe;AAC5B,cAAa,OAAO;AACpB,cAAa,WAAW;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,eAAe;AAC5B,cAAa,OAAO;AACpB,cAAa,WAAW;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,6B;;;;;;;AC1FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAa,WAAW;AACxB,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,UAAU;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,WAAW;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,0BAAyB;AACzB;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;;AAEA,mC;;;;;;;AChQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,eAAe;AAC1B,YAAW,eAAe;AAC1B,aAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,kBAAiB,SAAS;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,sBAAqB,sBAAsB;AAC3C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,2DAA0D;AAC1D;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,+B;;;;;;;AC9NA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,cAAa,SAAS;AACtB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAqB,sBAAsB;AAC3C;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA,EAAC;;AAED;;AAEA,gC;;;;;;;AC5FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,8B;;;;;;;ACtHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,4BAA4B;AACvC;AACA,aAAY,YAAY;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;AACA,eAAc,0BAA0B;AACxC;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,SAAS;AACtB,cAAa,OAAO;AACpB,cAAa,SAAS;AACtB,cAAa,SAAS;AACtB,cAAa,SAAS;AACtB,cAAa,SAAS;AACtB,cAAa,SAAS;AACtB,cAAa,SAAS;AACtB;AACA,eAAc,EAAE;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,6BAA4B,gCAAgC;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,2DAA0D;AAC1D;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA4B,gCAAgC;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,sDAAqD;AACrD;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA,8B;;;;;;;ACtOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA,8B;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,SAAS;AACpB,YAAW,SAAS;AACpB,aAAY,QAAQ;AACpB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA,+B;;;;;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA,YAAW,EAAE;AACb,aAAY,QAAQ;AACpB;AACA;AACA;AACA;;AAEA,6B;;;;;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,EAAE;AACb,aAAY,QAAQ;AACpB;AACA;;AAEA;AACA;AACA;;AAEA,yB;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,UAAU;AACrB,aAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;AACH;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,4C;;;;;;;AC/GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW;AACX;AACA;;AAEA;AACA;AACA;AACA,cAAa,aAAa;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,0DAA0D;AACvE,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,eAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,eAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA,cAAa,OAAO;AACpB,eAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAsB;AACtB;AACA;AACA,IAAG;;AAEH;AACA;AACA,uEAAsE;AACtE;AACA;AACA,cAAa,OAAO;AACpB,eAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gJAA+I;AAC/I;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,0BAA0B;AACvC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,0BAA0B;AACvC,cAAa,aAAa;AAC1B,cAAa,aAAa;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,8BAA6B;AAC7B,kCAAiC,kBAAkB;AACnD;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,aAAa;AAC1B,cAAa,OAAO;AACpB,cAAa,QAAQ;AACrB,cAAa,QAAQ;AACrB,cAAa,0BAA0B;AACvC,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,0BAA0B;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,UAAU;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAAyD;AACzD;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,eAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,eAAc,eAAe;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,EAAC;;AAED;;AAEA;;AAEA;;AAEA,0C;;;;;;;ACrrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,4C;;;;;;;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,EAAC;;AAED,yC;;;;;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6C;;;;;;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,QAAQ;AACnB,YAAW,QAAQ;AACnB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA,6C;;;;;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAkC;AAClC;AACA;AACA;AACA;AACA,IAAG;AACH,mCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;;AAEA,sC;;;;;;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,aAAa;AACxB,aAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,aAAa;AACxB,aAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,UAAU;AACrB,aAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA,YAAW,eAAe;AAC1B,aAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,uC;;;;;;;AC7FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,0DAAyD;AACzD;AACA;AACA,wCAAuC;AACvC;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,iCAAgC;AAChC,iBAAgB;;AAEhB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,kBAAiB,iBAAiB;AAClC;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,qC;;;;;;;AC1WA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,G;;;;;;;AChGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,oCAAmC;AACnC;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,uBAAsB,sBAAsB;AAC5C,wBAAuB,6BAA6B;AACpD,MAAK;AACL;AACA,IAAG;AACH;AACA;AACA,uBAAsB,yBAAyB;AAC/C,wBAAuB,gCAAgC;AACvD,MAAK;AACL;AACA,IAAG;AACH;AACA;AACA,uBAAsB,2BAA2B;AACjD,wBAAuB,kCAAkC;AACzD,MAAK;AACL;AACA,IAAG;AACH;AACA;AACA,uBAAsB,4BAA4B;AAClD,wBAAuB,mCAAmC;AAC1D,MAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,YAAW,eAAe;AAC1B,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,eAAe;AAC1B,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,aAAY,QAAQ;AACpB;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,cAAa,OAAO;AACpB,cAAa,eAAe;AAC5B,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,eAAc,EAAE;AAChB,YAAW;AACX;AACA;AACA;AACA;AACA;;AAEA,yC;;;;;;ACpZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,eAAe;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,mC;;;;;;;ACtIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,eAAe;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAmB,qBAAqB;AACxC;AACA;AACA;AACA;;AAEA;AACA,kBAAiB,eAAe;AAChC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAC;;AAED;;AAEA,2C;;;;;;AC9FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,yC;;;;;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa;AACb;AACA;AACA;AACA;;AAEA;;AAEA,4C;;;;;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,eAAc,QAAQ;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,EAAC;;AAED;;AAEA;AACA;AACA;AACA,YAAW,SAAS;AACpB,YAAW,QAAQ;AACnB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,8BAA6B;AAC7B;;AAEA;AACA;;AAEA;;AAEA,iC;;;;;;;AChLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa;AACb;AACA;AACA;AACA;;AAEA;;AAEA,sC;;;;;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA8C,gBAAgB;AAC9D;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wB;;;;;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,uBAAsB,iBAAiB;AACvC,wBAAuB,wBAAwB;AAC/C,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,cAAa,OAAO;AACpB,cAAa,eAAe;AAC5B,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,eAAc,EAAE;AAChB,YAAW;AACX;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA,oC;;;;;;AChUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,eAAe;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iC;;;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,qC;;;;;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,uC;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC,6BAA6B,UAAU,0BAA0B,UAAU,uBAAuB,UAAU,8BAA8B,UAAU,0BAA0B,UAAU,0BAA0B,UAAU,+BAA+B;;AAEjS,0C;;;;;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,8BAA6B,qBAAqB;AAClD;AACA,IAAG;AACH;AACA,8BAA6B,qBAAqB;AAClD;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,eAAe;AAC5B,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,eAAc,EAAE;AAChB,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA,wC;;;;;;AC3HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa;AACb;AACA;AACA;AACA;;AAEA;;AAEA,sC;;;;;;ACxEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa;AACb;AACA;AACA;AACA;;AAEA;;AAEA,mC;;;;;;AC3DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,wC;;;;;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wC;;;;;;ACvOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,eAAc,WAAW;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6C;;;;;;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,0BAA0B;AACrC,aAAY,YAAY;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,8B;;;;;;;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAC;;AAED;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA,+C;;;;;;AClEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,sBAAqB;;AAErB,uBAAsB,iBAAiB;AACvC,oBAAmB,cAAc;AACjC,mBAAkB,eAAe;;AAEjC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uHAAsH;AACtH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,0HAAyH;AACzH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,yBAAyB;AACxC;AACA,IAAG;AACH;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,YAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qNAAoN,YAAY;AAChO;AACA;AACA;AACA;AACA;AACA,qOAAoO,+BAA+B;AACnQ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,EAAC;;AAED;AACA;AACA;;AAEA,qDAAoD;AACpD;AACA,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,sBAAqB;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,0DAA0D;AACvE,cAAa,OAAO;AACpB,eAAc,OAAO;AACrB;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAkC;AAClC;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,0DAA0D;AACvE,cAAa,OAAO;AACpB,eAAc,OAAO;AACrB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,4DAA2D;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,0DAA0D;AACvE,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,eAAc,OAAO;AACrB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,wBAAuB,wBAAwB;AAC/C;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,aAAa;AAC1B,cAAa,0DAA0D;AACvE,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,0BAA0B;AACvC,cAAa,aAAa;AAC1B,cAAa,aAAa;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,cAAa,0BAA0B;AACvC,cAAa,YAAY;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,uCAAsC,KAAK;AAC3C;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAwD;AACxD,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,cAAa,0BAA0B;AACvC,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAAyB,sBAAsB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,EAAC;;AAED;;AAEA,oC;;;;;;;ACj8BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,iC;;;;;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,YAAW,WAAW;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA,4B;;;;;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,6CAA4C;;AAE5C;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,cAAa,OAAO;AACpB,cAAa,EAAE;AACf;AACA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iCAAgC,0BAA0B;AAC1D,qBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,eAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sEAAqE;AACrE;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,EAAC;;AAED,wC;;;;;;;AC9KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,8B;;;;;;AC1IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;AACA;AACA;;AAEA,oC;;;;;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA,2B;;;;;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,EAAE;AACb,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,uBAAsB;AACtB;;AAEA;AACA;AACA;AACA;AACA;;AAEA,sC;;;;;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;AACA;AACA;;AAEA,qC;;;;;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;AACA;AACA;;AAEA,4B;;;;;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,SAAS;AACpB,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oC;;;;;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iC;;;;;;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,uCAAsC;AACtC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gCAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAmB,kBAAkB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,+BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,gC;;;;;;;ACxJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA,cAAa,OAAO;AACpB,eAAc,EAAE;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA,cAAa,OAAO;AACpB,eAAc,EAAE;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA,cAAa,OAAO;AACpB,cAAa,eAAe;AAC5B;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA,mC;;;;;;;ACrIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR,4BAA2B;AAC3B,OAAM;AACN;AACA;AACA;AACA;AACA,8BAA6B,KAAK;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,2BAA0B;AAC1B,MAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,sBAAsB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA,oBAAmB,2BAA2B;AAC9C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA,oBAAmB,gCAAgC;AACnD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iC;;;;;;ACnWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,yCAAwC;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,QAAQ;AACnB,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gC;;;;;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,wBAAwB;AAC/C;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA,2BAA0B;AAC1B,IAAG;;AAEH;AACA,+BAA8B,2CAA2C;;AAEzE;AACA,iBAAgB;AAChB;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;;AAEL;AACA;AACA;;AAEA;;AAEA,iC;;;;;;;ACrFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,UAAU;AACrB,YAAW,GAAG;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,GAAG;AACd,YAAW,iBAAiB;AAC5B,YAAW,EAAE;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,GAAG;AACd,YAAW,UAAU;AACrB,YAAW,GAAG;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,GAAG;AACd,YAAW,iBAAiB;AAC5B,YAAW,EAAE;AACb,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,GAAG;AACd,aAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gC;;;;;;ACrLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,EAAE;AACb,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,EAAE;AACb,aAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA,YAAW,GAAG;AACd,YAAW,QAAQ;AACnB,YAAW,UAAU;AACrB,YAAW,GAAG;AACd;AACA,aAAY,QAAQ;AACpB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,wBAAuB;AACvB;;AAEA;AACA,oBAAmB,qBAAqB;AACxC;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2LAA2L,yCAAyC;AACpO;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,GAAG;AACd,YAAW,UAAU;AACrB,YAAW,GAAG;AACd,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,sC;;;;;;;AC5LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAiB,2BAA2B;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA,YAAW,kBAAkB;AAC7B,YAAW,QAAQ;AACnB,YAAW,EAAE;AACb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAe,sBAAsB;AACrC;AACA;AACA,gBAAe,oBAAoB;AACnC;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,gBAAe,oBAAoB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qBAAoB;AACpB;AACA;AACA,MAAK;AACL,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,iCAAgC;AAChC;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,iC;;;;;;;AC3LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uCAAsC;AACtC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gCAA+B;AAC/B;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,mC;;;;;;;AChHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA,gBAAe,QAAQ;AACvB,iBAAgB,MAAM;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,gBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,gBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,gBAAe,QAAQ;AACvB,gBAAe,0BAA0B;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA,gBAAe,QAAQ;AACvB,gBAAe,0BAA0B;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,gBAAe,eAAe;AAC9B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,gBAAe,eAAe;AAC9B,gBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,gBAAe,eAAe;AAC9B;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,gBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,gBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,gBAAe,eAAe;AAC9B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,0BAA0B;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,gBAAe,eAAe;AAC9B;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,kC;;;;;;;AC/eA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wKAAuK;AACvK;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,QAAQ;AACrB,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,QAAQ;AACrB,cAAa,QAAQ;AACrB,cAAa,0BAA0B;AACvC,cAAa,OAAO;AACpB,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,uC;;;;;;;ACzHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA,YAAW,SAAS;AACpB,YAAW,gBAAgB;AAC3B,YAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,wKAAuK;AACvK;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kC;;;;;;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;;AAEA;AACA;;AAEA,+B;;;;;;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,EAAE;AACb,aAAY,gBAAgB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAiB,kCAAkC;AACnD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAiB,iBAAiB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA,qC;;;;;;AClNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,eAAe;AAC5B,cAAa,OAAO;AACpB,cAAa,SAAS;AACtB,eAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,eAAe;AAC5B,cAAa,OAAO;AACpB,cAAa,SAAS;AACtB,eAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA,gC;;;;;;;ACnFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,qBAAqB;AAChC,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6C;;;;;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iC;;;;;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,yBAAwB,eAAe;;AAEvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAY;AACZ;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;;AAEA;AACA,eAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA6B,KAAK;AAClC;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,WAAW;AACxB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,QAAQ;AACrB,cAAa,QAAQ;AACrB,eAAc,QAAQ;AACtB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,QAAQ;AACrB,cAAa,QAAQ;AACrB,cAAa,0BAA0B;AACvC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,QAAQ;AACrB,cAAa,QAAQ;AACrB,cAAa,WAAW;AACxB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,0BAA0B;AACvC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,sBAAqB,mBAAmB;AACxC;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,8CAA6C;AAC7C,IAAG;AACH;AACA;AACA;AACA;AACA,yCAAwC;AACxC,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,sCAAqC;AACrC,IAAG;AACH;AACA;AACA,IAAG;AACH,2BAA0B;;AAE1B;AACA;AACA;AACA;AACA;AACA;AACA,6HAA4H;AAC5H;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,+OAA8O;;AAE9O;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;AACA;;AAEA;AACA;AACA,+NAA8N;AAC9N;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,SAAS;AACpB,YAAW,SAAS;AACpB,aAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,SAAS;AACpB,YAAW,SAAS;AACpB,aAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,aAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yFAAwF,aAAa;AACrG;AACA;;AAEA,uDAAsD;AACtD;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,UAAU;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,UAAU;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAa,OAAO;AACpB,eAAc,SAAS;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;;AAEA,6B;;;;;;;AClwBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,gBAAgB;AAC3B;AACA,YAAW,UAAU;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,wIAAuI;AACvI;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,UAAU;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iC;;;;;;;ACzHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAa,WAAW;AACxB,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,UAAU;AACvB;AACA;AACA,0DAAyD;;AAEzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,WAAW;AACxB;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;;AAEA,uC;;;;;;;ACrHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAc,UAAU;AACxB;AACA;AACA;AACA,cAAa,UAAU;AACvB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAc,cAAc;AAC5B;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA,eAAc,OAAO;AACrB;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,4C;;;;;;ACtJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA,0BAAyB;AACzB,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA,sC;;;;;;AC3HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,WAAW;AACtB,aAAY;AACZ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,WAAW;AACtB,aAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,uBAAuB;AAClC,YAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,uBAAuB;AAClC,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,cAAa,WAAW;AACxB;AACA;;AAEA;AACA,cAAa,uBAAuB;AACpC,cAAa,OAAO;AACpB;AACA;AACA;;AAEA,oC;;;;;;ACnNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,uBAAuB;AAClC,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,uBAAuB;AAClC,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,uBAAuB;AAClC,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,4C;;;;;;ACxEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA,mC;;;;;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,uBAAsB,iBAAiB;AACvC,wBAAuB,wBAAwB;AAC/C,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,4BAA2B,iBAAiB;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,WAAW;AACtB,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,cAAa,OAAO;AACpB,cAAa,eAAe;AAC5B,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,eAAc,EAAE;AAChB,YAAW;AACX;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA,oC;;;;;;ACxMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,uC;;;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,uBAAsB,gBAAgB;AACtC,wBAAuB,uBAAuB;AAC9C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,eAAe;AACrC,wBAAuB,sBAAsB;AAC7C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,kBAAkB;AACxC,wBAAuB,yBAAyB;AAChD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,yBAAyB;AAC/C,wBAAuB,gCAAgC;AACvD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,gBAAgB;AACtC,wBAAuB,uBAAuB;AAC9C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,sBAAsB;AAC5C,wBAAuB,6BAA6B;AACpD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,eAAe;AACrC,wBAAuB,sBAAsB;AAC7C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,cAAc;AACpC,wBAAuB,qBAAqB;AAC5C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,sBAAsB;AAC5C,wBAAuB,6BAA6B;AACpD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,eAAe;AACrC,wBAAuB,sBAAsB;AAC7C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,kBAAkB;AACxC,wBAAuB,yBAAyB;AAChD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,oBAAoB;AAC1C,wBAAuB,2BAA2B;AAClD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,mBAAmB;AACzC,wBAAuB,0BAA0B;AACjD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,oBAAoB;AAC1C,wBAAuB,2BAA2B;AAClD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,mBAAmB;AACzC,wBAAuB,0BAA0B;AACjD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,oBAAoB;AAC1C,wBAAuB,2BAA2B;AAClD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,eAAe;AACrC,wBAAuB,sBAAsB;AAC7C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,yBAAyB;AAC/C,wBAAuB,gCAAgC;AACvD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,kBAAkB;AACxC,wBAAuB,yBAAyB;AAChD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,oBAAoB;AAC1C,wBAAuB,2BAA2B;AAClD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,gBAAgB;AACtC,wBAAuB,uBAAuB;AAC9C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,gBAAgB;AACtC,wBAAuB,uBAAuB;AAC9C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,gBAAgB;AACtC,wBAAuB,uBAAuB;AAC9C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,gBAAgB;AACtC,wBAAuB,uBAAuB;AAC9C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,kBAAkB;AACxC,wBAAuB,yBAAyB;AAChD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,mBAAmB;AACzC,wBAAuB,0BAA0B;AACjD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,gBAAgB;AACtC,wBAAuB,uBAAuB;AAC9C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,eAAe;AACrC,wBAAuB,sBAAsB;AAC7C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,qBAAqB;AAC3C,wBAAuB,4BAA4B;AACnD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,yBAAyB;AAC/C,wBAAuB,gCAAgC;AACvD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,oBAAoB;AAC1C,wBAAuB,2BAA2B;AAClD;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,uBAAsB,oBAAoB;AAC1C,wBAAuB,2BAA2B;AAClD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,oBAAoB;AAC1C,wBAAuB,2BAA2B;AAClD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,mBAAmB;AACzC,wBAAuB,0BAA0B;AACjD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,oBAAoB;AAC1C,wBAAuB,2BAA2B;AAClD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,kBAAkB;AACxC,wBAAuB,yBAAyB;AAChD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,gBAAgB;AACtC,wBAAuB,uBAAuB;AAC9C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,gBAAgB;AACtC,wBAAuB,uBAAuB;AAC9C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,eAAe;AACrC,wBAAuB,sBAAsB;AAC7C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,kBAAkB;AACxC,wBAAuB,yBAAyB;AAChD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,mBAAmB;AACzC,wBAAuB,0BAA0B;AACjD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,qBAAqB;AAC3C,wBAAuB,4BAA4B;AACnD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,gBAAgB;AACtC,wBAAuB,uBAAuB;AAC9C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,iBAAiB;AACvC,wBAAuB,wBAAwB;AAC/C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,iBAAiB;AACvC,wBAAuB,wBAAwB;AAC/C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,kBAAkB;AACxC,wBAAuB,yBAAyB;AAChD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,kBAAkB;AACxC,wBAAuB,yBAAyB;AAChD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,iBAAiB;AACvC,wBAAuB,wBAAwB;AAC/C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,kBAAkB;AACxC,wBAAuB,yBAAyB;AAChD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,qBAAqB;AAC3C,wBAAuB,4BAA4B;AACnD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,sBAAsB;AAC5C,wBAAuB,6BAA6B;AACpD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,mBAAmB;AACzC,wBAAuB,0BAA0B;AACjD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,oBAAoB;AAC1C,wBAAuB,2BAA2B;AAClD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,qBAAqB;AAC3C,wBAAuB,4BAA4B;AACnD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,uBAAuB;AAC7C,wBAAuB,8BAA8B;AACrD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,kBAAkB;AACxC,wBAAuB,yBAAyB;AAChD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,gBAAgB;AACtC,wBAAuB,uBAAuB;AAC9C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,2BAA0B,gBAAgB;AAC1C;;AAEA;;AAEA;;AAEA;AACA,cAAa,OAAO;AACpB,cAAa,eAAe;AAC5B,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,eAAc,EAAE;AAChB,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,oC;;;;;;;AC1kBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa;AACb;AACA;AACA;AACA;;AAEA;;AAEA,0C;;;;;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa;AACb;AACA;AACA;AACA;;AAEA;;AAEA,sC;;;;;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa;AACb;AACA;AACA;AACA;;AAEA;;AAEA,yC;;;;;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,mC;;;;;;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,8B;;;;;;ACtGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa;AACb;AACA;AACA;AACA;;AAEA;;AAEA,qC;;;;;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa;AACb;AACA;AACA;AACA;;AAEA;;AAEA,sC;;;;;;AC7CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa;AACb;AACA;AACA;AACA;;AAEA;;AAEA,sC;;;;;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,uC;;;;;;AC9HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;;AAEH;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;;AAEH;AACA;AACA,sEAAqE,aAAa;AAClF;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB;AACvB,wBAAuB;AACvB,qBAAoB;AACpB,qBAAoB;AACpB,qBAAoB;AACpB,2BAA0B;AAC1B;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;;AAEA,mC;;;;;;AC5OA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB,yBAAyB;AAC1C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;AACL,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA,kBAAiB,yBAAyB;AAC1C;AACA,2BAA0B;;AAE1B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;;AAEA,kBAAiB,yBAAyB;AAC1C;AACA,2BAA0B;AAC1B;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAwB;;AAExB;AACA;AACA;AACA;AACA,oBAAmB,yBAAyB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,2C;;;;;;ACtMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,iC;;;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA,oC;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,2B;;;;;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,wD;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,iC;;;;;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,YAAW,aAAa;AACxB,aAAY,OAAO;AACnB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,aAAa;AACxB,aAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,G;;;;;;;AClFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,8C;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAc,MAAM;AACpB;AACA;AACA;AACA,IAAG;;AAEH;AACA,eAAc,OAAO;AACrB;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,kD;;;;;;ACtFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,wB;;;;;;;ACzEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,EAAC;;AAED,oC;;;;;;;AChLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,aAAa;AACxB,YAAW,EAAE;AACb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,aAAa;AACxB,YAAW,EAAE;AACb,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gGAA+F;AAC/F;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,UAAU;AACrB,YAAW,EAAE;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8IAA6I;AAC7I;AACA,QAAO;AACP;AACA;AACA,uIAAsI;AACtI;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,aAAa;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAqB,sBAAsB;AAC3C;AACA;AACA;;AAEA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,UAAS;AACT;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA,oBAAmB,sBAAsB;AACzC;AACA;AACA;AACA;AACA;;AAEA;;AAEA,wC;;;;;;;ACxRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,QAAQ;AACnB,YAAW,SAAS;AACpB,YAAW,EAAE;AACb,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,4B;;;;;;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,QAAQ;AACnB,aAAY,eAAe;AAC3B;AACA;AACA;AACA;AACA;AACA;;AAEA,4B;;;;;;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,EAAE;AACb,YAAW,SAAS;AACpB,aAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,6B;;;;;;;AC/CA;;AAEA;;;;;;;ACFA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,gBAAe,QAAQ,uCAAuC;AAC9D;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,qEAAoE;AACpE,0EAAyE;;AAEzE;AACA;AACA;AACA;AACA;;AAEA,2BAA0B;;AAE1B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,gBAAe,QAAQ,uCAAuC;AAC9D;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,gBAAe;AACf;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,gBAAe,QAAQ,kDAAkD;AACzE;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,UAAS;AACT;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA,gBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,gBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,gBAAe,OAAO;AACtB;;AAEA;AACA;AACA;AACA,gBAAe,OAAO;AACtB;;AAEA;AACA;AACA;AACA,gBAAe,OAAO;AACtB;;AAEA;AACA;AACA;AACA,gBAAe,OAAO;AACtB;;AAEA;AACA;AACA;AACA,gBAAe,OAAO;AACtB;;AAEA;AACA;AACA;AACA,gBAAe,OAAO;AACtB;;AAEA;AACA;AACA;AACA,gBAAe,OAAO;AACtB;;AAEA;AACA;AACA;AACA,gBAAe,OAAO;AACtB;;AAEA;AACA;AACA;AACA,gBAAe,OAAO;AACtB;;AAEA;AACA;AACA;AACA,gBAAe,OAAO;AACtB;;AAEA;AACA;AACA;AACA,gBAAe,OAAO;AACtB;;AAEA;AACA;AACA;AACA,gBAAe,OAAO;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,sBAAqB,SAAS;AAC9B;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB;;AAEA;AACA;AACA;AACA,cAAa,OAAO;AACpB;;AAEA;AACA;AACA;AACA,cAAa,OAAO;AACpB;;AAEA;AACA;AACA;AACA,cAAa,OAAO;AACpB;;AAEA;AACA;AACA;AACA,cAAa,OAAO;AACpB;;AAEA;AACA;AACA;AACA,cAAa,OAAO;AACpB;;AAEA;AACA;AACA;AACA,cAAa,OAAO;AACpB;;AAEA;AACA;AACA;AACA,cAAa,OAAO;AACpB;;AAEA;AACA;AACA;AACA,cAAa,OAAO;AACpB;;AAEA;AACA;AACA;AACA,cAAa,OAAO;AACpB;;AAEA;AACA;AACA;AACA,cAAa,OAAO;AACpB;;AAEA;AACA;AACA;AACA,cAAa,OAAO;AACpB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB;;AAEA;AACA;AACA,cAAa,OAAO;AACpB;AACA;;AAEA;AACA;AACA;AACA,cAAa,OAAO;AACpB;;AAEA;AACA;AACA;AACA,cAAa,OAAO;AACpB;;AAEA;AACA;AACA;AACA,cAAa,OAAO;AACpB;;AAEA;AACA;AACA;AACA,cAAa,OAAO;AACpB;;AAEA;AACA;AACA;AACA,cAAa,OAAO;AACpB;;AAEA;AACA;AACA;AACA,cAAa,OAAO;AACpB;;AAEA;AACA;AACA;AACA,cAAa,OAAO;AACpB;;AAEA;AACA;AACA;AACA,cAAa,OAAO;AACpB;;AAEA;AACA;AACA;AACA,cAAa,OAAO;AACpB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,gBAAe;AACf;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA,6CAA4C;AAC5C,gBAAe,OAAO;AACtB;AACA;AACA;AACA,IAAG;;AAEH;AACA,4EAA2E;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA,4EAA2E;AAC3E;AACA;AACA;AACA,gBAAe,OAAO;AACtB;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,eAAc,OAAO;AACrB;AACA;AACA,+BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,gBAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,cAAa,eAAe;AAC5B,gBAAe,QAAQ,qCAAqC;AAC5D;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,I;;;;;;AC9yCA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,sCAAqC,SAAS;AAC9C;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAmB,6BAA6B;AAChD;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,G;;;;;;AClIA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,G;;;;;;AC3HA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,G;;;;;;ACZA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAU,OAAO;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,4BAA2B;AAC3B,sCAAqC,KAAK;AAC1C;AACA;AACA;AACA;AACA;AACA,sCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAgE,KAAK;AACrE;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,4BAA2B,KAAK,KAAK;AACrC;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAiB,YAAY;AAC7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAY;AACZ;AACA;AACA;AACA;AACA,aAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA6B,KAAK;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kBAAiB,UAAU;AAC3B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,cAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAa,kBAAkB;AAC/B,gBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,SAAS;AACxB;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,cAAa,OAAO;AACpB,gBAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB,2BAA2B;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX,wBAAuB,aAAa;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,gBAAe;AACf;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,cAAa,qBAAqB;AAClC,cAAa,OAAO;AACpB,gBAAe;AACf;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,cAAa,qBAAqB;AAClC,cAAa,qBAAqB;AAClC,cAAa,OAAO;AACpB,gBAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,cAAa,qBAAqB;AAClC,cAAa,OAAO;AACpB,gBAAe;AACf;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;;AAEA;;AAEA,qB;;;;;;ACxzBA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAqB,KAAK,EAAE,KAAK;AACjC,G;;;;;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,sBAAqB,WAAW;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;;;;;;;;;;;;;;;;gCC3DsB,GAAQ;;;;;;;;;;;;;;;;;;;uCCAP,GAAc;;;;;;;;;;;;;;;;;;;kCCAJ,CAAO;;;;sCACpB,GAAY;;;;wCACd,GAAgB;;;;2CACX,GAAmB;;;;6CAClB,GAAqB;;;;sCAChB,GAAc;;AAE3C,UAAS,IAAI,GAAG,EACf;;AAED,UAAS,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE;AAC/B,OAAI,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC;EACzB;;AAED,KAAM,MAAM,GAAG,mBAAM,WAAW,CAAC;;;AAC/B,YAAS,EAAE;AACT,cAAS,EAAE,iBAAU,MAAM;AAC3B,WAAM,EAAE,iBAAU,MAAM;AACxB,UAAK,EAAE,iBAAU,MAAM;AACvB,aAAQ,EAAE,iBAAU,IAAI;AACxB,eAAU,EAAE,iBAAU,IAAI;AAC1B,iBAAY,EAAE,iBAAU,MAAM;AAC9B,SAAI,EAAE,iBAAU,IAAI;AACpB,gBAAW,EAAE,iBAAU,IAAI;AAC3B,UAAK,EAAE,iBAAU,MAAM;AACvB,cAAS,EAAE,iBAAU,GAAG;AACxB,mBAAc,EAAE,iBAAU,MAAM;AAChC,sBAAiB,EAAE,iBAAU,IAAI;AACjC,gBAAW,EAAE,iBAAU,MAAM;AAC7B,cAAS,EAAE,iBAAU,GAAG;AACxB,aAAQ,EAAE,iBAAU,IAAI;AACxB,UAAK,EAAE,iBAAU,MAAM;AACvB,cAAS,EAAE,iBAAU,MAAM;AAC3B,eAAU,EAAE,iBAAU,IAAI;AAC1B,kBAAa,EAAE,iBAAU,IAAI;AAC7B,oBAAe,EAAE,iBAAU,IAAI;AAC/B,oBAAe,EAAE,iBAAU,IAAI;AAC/B,wBAAmB,EAAE,iBAAU,IAAI;AACnC,aAAQ,EAAE,iBAAU,IAAI;AACxB,WAAM,EAAE,iBAAU,IAAI;AACtB,YAAO,EAAE,iBAAU,IAAI;IACxB;;AAED,SAAM,EAAE,+BAAa;;AAErB,kBAAe,6BAAG;AAChB,YAAO;AACL,gBAAS,EAAE,gBAAgB;AAC3B,kBAAW,EAAE,KAAK;AAClB,YAAK,EAAE,EAAE;AACT,gBAAS,EAAE,EAAE;AACb,YAAK,EAAE,EAAE;AACT,iBAAU,EAAE,IAAI;AAChB,eAAQ,EAAE,IAAI;AACd,iBAAU,EAAE,IAAI;AAChB,oBAAa,EAAE,IAAI;AACnB,sBAAe,EAAE,IAAI;AACrB,sBAAe,EAAE,IAAI;AACrB,0BAAmB,EAAE,KAAK;AAC1B,gBAAS,EAAE,YAAY;AACvB,eAAQ,EAAE,IAAI;AACd,aAAM,EAAE,IAAI;AACZ,cAAO,EAAE,IAAI;MACd,CAAC;IACH;;AAED,kBAAe,6BAAG;AAChB,SAAI,CAAC,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;kBAC0B,IAAI,CAAC,KAAK;SAAlF,WAAW,UAAX,WAAW;SAAE,YAAY,UAAZ,YAAY;8BAAE,IAAI;SAAJ,IAAI,+BAAG,WAAW;+BAAE,KAAK;SAAL,KAAK,gCAAG,YAAY;;AAC3E,YAAO;AACL,WAAI,EAAJ,IAAI;AACJ,YAAK,EAAL,KAAK;MACN,CAAC;IACH;;AAED,4BAAyB,qCAAC,SAAS,EAAE;SAC3B,KAAK,GAAW,SAAS,CAAzB,KAAK;SAAE,IAAI,GAAK,SAAS,CAAlB,IAAI;;AACnB,SAAI,OAAO,IAAI,SAAS,EAAE;AACxB,WAAI,CAAC,QAAQ,CAAC;AACZ,cAAK,EAAL,KAAK;QACN,CAAC,CAAC;MACJ;AACD,SAAI,IAAI,KAAK,SAAS,EAAE;AACtB,WAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAJ,IAAI,EAAE,CAAC,CAAC;MACzB;IACF;;AAED,gBAAa,yBAAC,KAAK,EAAE;AACnB,SAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACtB;;AAED,eAAY,0BAAG;AACb,SAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACpB,SAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACrB;;AAED,kBAAe,2BAAC,IAAI,EAAE;AACpB,SAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACpB;;AAED,QAAK,mBAAG;AACN,SAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACpB,SAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IAC1B;;AAED,YAAS,qBAAC,CAAC,EAAE;AACX,SAAI,CAAC,CAAC,OAAO,KAAK,EAAE,EAAE;AACpB,WAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;MACpB;IACF;;AAED,WAAQ,oBAAC,KAAK,EAAE;AACd,SAAI,EAAE,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE;AAC5B,WAAI,CAAC,QAAQ,CAAC;AACZ,cAAK,EAAL,KAAK;QACN,CAAC,CAAC;MACJ;AACD,SAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5B;;AAED,eAAY,0BAAG;AACb,SAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;AACvC,SAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AACjC,SAAI,SAAS,EAAE;AACb,WAAI,SAAS,KAAK,IAAI,CAAC,aAAa,EAAE;AACpC,gBAAO,IAAI,CAAC,eAAe,CAAC;QAC7B;AACD,WAAI,CAAC,eAAe,GAAG,6BAAa,SAAS,EAAE,MAAM,CAAC,CAAC;AACvD,WAAI,CAAC,aAAa,GAAG,SAAS,CAAC;AAC/B,cAAO,IAAI,CAAC,eAAe,CAAC;MAC7B;AACD,SAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;AAC1B,WAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE;AAChC,aAAI,CAAC,sBAAsB,GAAG,6BAAa,OAAO,EAAE,MAAM,CAAC,CAAC;QAC7D;AACD,cAAO,IAAI,CAAC,sBAAsB,CAAC;MACpC;AACD,SAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;AACxB,WAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;AAC9B,aAAI,CAAC,oBAAoB,GAAG,6BAAa,OAAO,EAAE,MAAM,CAAC,CAAC;QAC3D;AACD,cAAO,IAAI,CAAC,oBAAoB,CAAC;MAClC;AACD,SAAI,CAAC,IAAI,CAAC,eAAe,EAAE;AACzB,WAAI,CAAC,eAAe,GAAG,6BAAa,UAAU,EAAE,MAAM,CAAC,CAAC;MACzD;AACD,YAAO,IAAI,CAAC,eAAe,CAAC;IAC7B;;AAED,kBAAe,6BAAG;mBAKZ,IAAI,CAAC,KAAK;SAHZ,SAAS,WAAT,SAAS;SAAE,YAAY,WAAZ,YAAY;SAAE,MAAM,WAAN,MAAM;SAAE,WAAW,WAAX,WAAW;SAAE,aAAa,WAAb,aAAa;SAC3D,eAAe,WAAf,eAAe;SAAE,eAAe,WAAf,eAAe;SAAE,mBAAmB,WAAnB,mBAAmB;SACrD,UAAU,WAAV,UAAU;SAAE,QAAQ,WAAR,QAAQ;SAAE,UAAU,WAAV,UAAU;;AAElC,YACE;AACE,gBAAS,EAAK,SAAS,WAAS;AAChC,UAAG,EAAE,IAAI,CAAC,YAAa;AACvB,YAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAM;AACxB,eAAQ,EAAE,IAAI,CAAC,aAAc;AAC7B,8BAAuB,EAAE,MAAM,CAAC,QAAS;AACzC,cAAO,EAAE,IAAI,CAAC,YAAa;AAC3B,mBAAY,EAAE,YAAa;AAC3B,eAAQ,EAAE,QAAS;AACnB,YAAK,EAAE,IAAI,CAAC,KAAM;AAClB,iBAAU,EAAE,UAAW;AACvB,aAAM,EAAE,MAAO;AACf,iBAAU,EAAE,UAAW;AACvB,gBAAS,EAAE,IAAI,CAAC,YAAY,EAAG;AAC/B,kBAAW,EAAE,WAAY;AACzB,oBAAa,EAAE,aAAc;AAC7B,sBAAe,EAAE,eAAgB;AACjC,sBAAe,EAAE,eAAgB;AACjC,0BAAmB,EAAE,mBAAoB;OACzC,CACF;IACH;;AAED,UAAO,mBAAC,IAAI,EAAE,QAAQ,EAAE;mBACM,IAAI,CAAC,KAAK;SAA9B,MAAM,WAAN,MAAM;SAAE,OAAO,WAAP,OAAO;;AACvB,SAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,EAAE;AAC5B,WAAI,CAAC,QAAQ,CAAC;AACZ,aAAI,EAAJ,IAAI;QACL,EAAE,QAAQ,CAAC,CAAC;AACb,WAAM,MAAK,GAAG;AACZ,aAAI,EAAJ,IAAI;QACL,CAAC;AACF,WAAI,IAAI,EAAE;AACR,eAAM,CAAC,MAAK,CAAC,CAAC;QACf,MAAM;AACL,gBAAO,CAAC,MAAK,CAAC,CAAC;QAChB;MACF;IACF;;AAED,SAAM,oBAAG;mBACmI,IAAI,CAAC,KAAK;SAA5I,SAAS,WAAT,SAAS;SAAE,WAAW,WAAX,WAAW;SAAE,SAAS,WAAT,SAAS;SAAE,KAAK,WAAL,KAAK;SAAE,QAAQ,WAAR,QAAQ;SAAE,cAAc,WAAd,cAAc;SAAE,KAAK,WAAL,KAAK;SAAE,SAAS,WAAT,SAAS;SAAE,QAAQ,WAAR,QAAQ;SAAE,UAAU,WAAV,UAAU;SAAE,iBAAiB,WAAjB,iBAAiB;kBAC7G,IAAI,CAAC,KAAK;SAA1B,IAAI,UAAJ,IAAI;SAAE,KAAK,UAAL,KAAK;;AACnB,SAAI,cAAc,aAAC;AACnB,SAAI,CAAC,QAAQ,IAAI,CAAC,UAAU,EAAE;AAC5B,qBAAc,GAAM,SAAS,kBAAe,CAAC;MAC9C;AACD,YACE;;;AACE,kBAAS,EAAK,SAAS,WAAS;AAChC,uBAAc,EAAE,cAAe;AAC/B,cAAK,EAAE,IAAI,CAAC,eAAe,EAAG;AAC9B,mBAAU,EAAE,KAAM;AAClB,0BAAiB,6BAAa;AAC9B,uBAAc,EAAE,SAAU;AAC1B,eAAM,EAAE,QAAQ,GAAG,EAAE,GAAG,CAAC,OAAO,CAAE;AAClC,2BAAkB;AAClB,0BAAiB,EAAE,iBAAkB;AACrC,4BAAmB,EAAE,cAAe;AACpC,qBAAY,EAAE,IAAK;AACnB,6BAAoB,EAAE,IAAI,CAAC,eAAgB;;OAE3C;;WAAM,SAAS,EAAK,SAAS,SAAI,SAAY,EAAC,KAAK,EAAE,KAAM;SACzD;AACE,oBAAS,EAAK,SAAS,WAAS;AAChC,cAAG,EAAC,QAAQ,EAAC,IAAI,EAAC,MAAM,EAAC,WAAW,EAAE,WAAY;AAClD,mBAAQ;AACR,oBAAS,EAAE,IAAI,CAAC,SAAU;AAC1B,mBAAQ,EAAE,QAAS,EAAC,KAAK,EAAE,KAAK,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAG;WAC5E;SACF,2CAAM,SAAS,EAAK,SAAS,UAAQ,GAAE;QAClC;MACC,CACV;IACH;EACF,CAAC,CAAC;;sBAEY,MAAM;;;;;;;ACzOrB;;AAEA,2C;;;;;;ACFA;;AAEA;AACA;AACA,EAAC;;AAED,oDAAmD,gBAAgB,sBAAsB,OAAO,2BAA2B,0BAA0B,yDAAyD,2BAA2B,EAAE,EAAE,EAAE,eAAe;;AAE9P,uCAAsC,uCAAuC,kBAAkB;;AAE/F;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAoB;AACpB;AACA,qBAAoB;AACpB;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,aAAY;AACZ,IAAG;;AAEH;AACA,+BAA8B;AAC9B;AACA,MAAK;AACL,IAAG;;AAEH;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;;AAEP;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,oDAAmD;AACnD;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;AACL;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;;AAED;AACA,qC;;;;;;AC1VA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,G;;;;;;AClBA;;AAEA;AACA;AACA;AACA,G;;;;;;ACLA;;AAEA;AACA;;AAEA,sI;;;;;;;ACJA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB,YAAW,OAAO;AAClB,cAAa,SAAS;AACtB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa;AACb;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;;;;;;;AClEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,iBAAgB;;AAEhB;AACA;;AAEA,kBAAiB,sBAAsB;AACvC;AACA;;AAEA;;AAEA;AACA;AACA,KAAI;AACJ;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;AACA;AACA,EAAC;;;;;;;AC/CD;;AAEA;AACA;;AAEA,yI;;;;;;ACLA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,0B;;;;;;ACvgBA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAgC,qBAAqB;AACrD;AACA,OAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oD;;;;;;AClCA;;AAEA;;AAEA,+B;;;;;;ACJA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,oBAAmB,SAAS;AAC5B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,G;;;;;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,EAAE;AACf;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,QAAQ;AACrB;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC3OA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,4DAA2D;AAC3D;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa,EAAE;AACf;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,QAAQ;AACrB;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACxIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,EAAE;AACf;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,QAAQ;AACrB;AACA;AACA,8BAA6B,kBAAkB,EAAE;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACzGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,4DAA2D;AAC3D;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa,EAAE;AACf;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA,0BAAyB,kBAAkB,EAAE;AAC7C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,QAAQ;AACrB;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACnLA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;;AAEA;AACA;AACA;AACA,oBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEA,wC;;;;;;ACrBA;;AAEA;AACA;AACA,EAAC;AACD;;AAEA,uCAAsC,uCAAuC,kBAAkB;;AAE/F;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA,qC;;;;;;ACzBA;;AAEA;AACA;AACA,EAAC;AACD;;AAEA,uCAAsC,uCAAuC,kBAAkB;;AAE/F;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,qC;;;;;;ACpCA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,EAAC;;AAED,uCAAsC,uCAAuC,kBAAkB;;AAE/F;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA,EAAC;AACD;AACA;AACA,EAAC;AACD;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oCAAmC,cAAc;AACjD;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,sDAAqD;AACrD;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA,EAAC;;AAED;AACA,qC;;;;;;ACrRA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,EAAC;AACD;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA,qC;;;;;;AC9DA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,iBAAgB,sBAAsB;AACtC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mBAAkB,oBAAoB;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;ACtCA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,G;;;;;;ACZA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,G;;;;;;ACVA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,G;;;;;;ACXA;;AAEA;AACA;AACA,EAAC;;AAED,uCAAsC,uCAAuC,kBAAkB;;AAE/F;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,qDAAoD;AACpD;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,oCAAmC;AACnC;AACA;AACA,cAAa;AACb;AACA;AACA;AACA,6BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,+BAA8B;AAC9B;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA,kCAAiC;AACjC;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,2BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA,qC;;;;;;AC1JA;AACA;;AAEA;AACA;AACA,EAAC;;AAED,uCAAsC,uCAAuC,kBAAkB;;AAE/F;;AAEA;;AAEA;AACA,qC;;;;;;ACdA;;AAEA;AACA;AACA,EAAC;;AAED,uCAAsC,uCAAuC,kBAAkB;;AAE/F;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,QAAO;AACP,qCAAoC;AACpC;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA,qC;;;;;;ACvJA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,EAAC;;AAED,uCAAsC,uCAAuC,kBAAkB;;AAE/F;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qC;;;;;;ACrMA;;AAEA;AACA;AACA,EAAC;AACD;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA,IAAG;AACH;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kBAAiB,gBAAgB;AACjC;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa,kBAAkB;AAC/B;AACA;AACA,kBAAiB,kBAAkB;AACnC;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA,UAAS,OAAO;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAe;;AAEf;AACA;AACA,kEAAiE,aAAa;AAC9E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,wCAAuC;AACvC,MAAK;AACL;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;;AAEA,uEAAsE,eAAe;AACrF;AACA;;AAEA,oBAAmB,iBAAiB;AACpC;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA,qC;;;;;;AC5eA;;AAEA;AACA;AACA,EAAC;;AAED,uCAAsC,uCAAuC,kBAAkB;;AAE/F;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,4BAA2B,cAAc;AACzC,4BAA2B,cAAc,mBAAmB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oCAAmC,2BAA2B;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qC;;;;;;ACpDA;;AAEA;AACA;AACA,EAAC;;AAED,uCAAsC,uCAAuC,kBAAkB;;AAE/F;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qC;;;;;;AC3EA;;AAEA;AACA;AACA,EAAC;;AAED,uCAAsC,uCAAuC,kBAAkB;;AAE/F;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,qC;;;;;;ACtDA;;AAEA;AACA;AACA,EAAC;;AAED,uCAAsC,uCAAuC,kBAAkB;;AAE/F;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qC;;;;;;ACnCA;;AAEA;AACA;AACA,EAAC;;AAED,uCAAsC,uCAAuC,kBAAkB;;AAE/F;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,qC;;;;;;ACnCA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,qC;;;;;;ACvCA;;AAEA;AACA;AACA,EAAC;AACD;;AAEA;AACA;AACA;AACA;AACA;;AAEA,qC;;;;;;ACbA;AACA;;AAEA,2C;;;;;;ACHA;;AAEA;AACA;AACA,EAAC;;AAED,uCAAsC,uCAAuC,kBAAkB;;AAE/F,4CAA2C,kBAAkB,kCAAkC,qEAAqE,EAAE,EAAE,OAAO,kBAAkB,EAAE,YAAY;;AAE/M;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,oBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,MAAK;AACL,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mGAAkG;AAClG,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAoD;AACpD;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA,qC;;;;;;AC1TA;;AAEA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;;AAEA,uCAAsC,uCAAuC,kBAAkB;;AAE/F;;AAEA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA,E;;;;;;AChHA;;AAEA;AACA;AACA,EAAC;;AAED,uCAAsC,uCAAuC,kBAAkB;;AAE/F;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,EAAC;;AAED;AACA,qC;;;;;;ACjGA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAiB,qBAAqB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;;AAEA,+B;;;;;;ACxJA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;;AAEH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA,mC;;;;;;AClFA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,G;;;;;;ACzBA;;AAEA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA,qC;;;;;;AC3BA;;AAEA;AACA;AACA,EAAC;;AAED,uCAAsC,uCAAuC,kBAAkB;;AAE/F;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,6BAA4B;AAC5B;AACA;AACA;AACA,EAAC;;AAED;AACA,qC;;;;;;ACxCA;;AAEA;AACA;AACA,EAAC;AACD;AACA;;AAEA,uCAAsC,uCAAuC,kBAAkB;;AAE/F;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,2CAA0C;AAC1C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,E;;;;;;;;;;;;;;kCCjC+B,CAAO;;;;6CACd,GAAsB;;;;mCAC3B,GAAU;;;;qCACR,GAAY;;;;AAEjC,UAAS,IAAI,GAAG,EACf;;AAED,UAAS,eAAe,CAAC,MAAM,EAAE,eAAe,EAAE,mBAAmB,EAAE;AACrE,OAAM,GAAG,GAAG,EAAE,CAAC;AACf,QAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,EAAE,KAAK,EAAE,EAAE;AAC3C,SAAI,CAAC,eAAe,IAAI,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,EAAE;AAClF,UAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;MACjB;IACF;AACD,UAAO,GAAG,CAAC;EACZ;;AAED,KAAM,KAAK,GAAG,mBAAM,WAAW,CAAC;;;AAC9B,YAAS,EAAE;AACT,cAAS,EAAE,iBAAU,MAAM;AAC3B,UAAK,EAAE,iBAAU,MAAM;AACvB,WAAM,EAAE,iBAAU,MAAM;AACxB,gBAAW,EAAE,iBAAU,MAAM;AAC7B,4BAAuB,EAAE,iBAAU,MAAM;AACzC,cAAS,EAAE,iBAAU,MAAM;AAC3B,kBAAa,EAAE,iBAAU,IAAI;AAC7B,oBAAe,EAAE,iBAAU,IAAI;AAC/B,oBAAe,EAAE,iBAAU,IAAI;AAC/B,wBAAmB,EAAE,iBAAU,IAAI;AACnC,aAAQ,EAAE,iBAAU,IAAI;AACxB,UAAK,EAAE,iBAAU,IAAI;AACrB,eAAU,EAAE,iBAAU,IAAI;AAC1B,aAAQ,EAAE,iBAAU,IAAI;AACxB,eAAU,EAAE,iBAAU,IAAI;AAC1B,YAAO,EAAE,iBAAU,IAAI;IACxB;;AAED,SAAM,EAAE,+BAAa;;AAErB,kBAAe,6BAAG;AAChB,YAAO;AACL,gBAAS,EAAE,sBAAsB;AACjC,eAAQ,EAAE,IAAI;AACd,cAAO,EAAE,IAAI;MACd,CAAC;IACH;;AAED,kBAAe,6BAAG;AAChB,YAAO;AACL,YAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK;AACvB,qBAAc,EAAE,EAAE;MACnB,CAAC;IACH;;AAED,4BAAyB,qCAAC,SAAS,EAAE;AACnC,SAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;AAC9B,SAAI,KAAK,EAAE;AACT,WAAI,CAAC,QAAQ,CAAC;AACZ,cAAK,EAAL,KAAK;QACN,CAAC,CAAC;MACJ;IACF;;AAED,WAAQ,oBAAC,QAAQ,EAAE;AACjB,SAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;AACnC,SAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC/B;;AAED,UAAO,qBAAG;AACR,SAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IACtB;;AAED,6BAA0B,sCAAC,kBAAkB,EAAE;AAC7C,SAAI,CAAC,QAAQ,CAAC,EAAE,kBAAkB,EAAlB,kBAAkB,EAAE,CAAC,CAAC;IACvC;;AAED,SAAM,oBAAG;kBACgL,IAAI,CAAC,KAAK;SAAzL,MAAM,UAAN,MAAM;SAAE,SAAS,UAAT,SAAS;SAAE,WAAW,UAAX,WAAW;SAAE,aAAa,UAAb,aAAa;SAAE,eAAe,UAAf,eAAe;SAAE,eAAe,UAAf,eAAe;SAAE,mBAAmB,UAAnB,mBAAmB;SAAE,UAAU,UAAV,UAAU;SAAE,QAAQ,UAAR,QAAQ;SAAE,UAAU,UAAV,UAAU;SAAE,SAAS,UAAT,SAAS;SAAE,uBAAuB,UAAvB,uBAAuB;;AAClL,SAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;AAC/B,SAAM,mBAAmB,GAAG,aAAa,EAAE,CAAC;AAC5C,SAAM,qBAAqB,GAAG,eAAe,CAAC,KAAK,GAAG,KAAK,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,CAAC;AACnF,SAAM,qBAAqB,GAAG,eAAe,CAAC,KAAK,GAAG,KAAK,CAAC,YAAY,EAAE,GAAG,IAAI,EAAE,KAAK,GAAG,KAAK,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,CAAC;AACtH,SAAM,WAAW,GAAG,eAAe,CAAC,EAAE,EAAE,mBAAmB,EAAE,mBAAmB,CAAC,CAAC;AAClF,SAAM,aAAa,GAAG,eAAe,CAAC,EAAE,EAAE,qBAAqB,EAAE,mBAAmB,CAAC,CAAC;AACtF,SAAM,aAAa,GAAG,eAAe,CAAC,EAAE,EAAE,qBAAqB,EAAE,mBAAmB,CAAC,CAAC;;AAEtF,YACE;;SAAK,SAAS,EAAK,SAAS,WAAS;OACnC;AACE,kBAAS,EAAE,SAAU;AACrB,gCAAuB,EAAE,uBAAwB;AACjD,eAAM,EAAE,MAAO;AACf,cAAK,EAAE,KAAM;AACb,2BAAkB,EAAE,IAAI,CAAC,KAAK,CAAC,kBAAmB;AAClD,cAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAM;AACxB,kBAAS,EAAE,SAAU;AACrB,oBAAW,EAAE,WAAY;AACzB,oBAAW,EAAE,WAAY;AACzB,sBAAa,EAAE,aAAc;AAC7B,sBAAa,EAAE,aAAc;AAC7B,sBAAa,EAAE,aAAc;AAC7B,wBAAe,EAAE,eAAgB;AACjC,wBAAe,EAAE,eAAgB;AACjC,iBAAQ,EAAE,IAAI,CAAC,QAAS;AACxB,gBAAO,EAAE,IAAI,CAAC,OAAQ;AACtB,mBAAU,EAAE,UAAW;SACvB;OACF;AACE,kBAAS,EAAE,SAAU;AACrB,cAAK,EAAE,KAAM;AACb,gCAAuB,EAAE,uBAAwB;AACjD,kBAAS,EAAE,SAAU;AACrB,iBAAQ,EAAE,IAAI,CAAC,QAAS;AACxB,iBAAQ,EAAE,QAAS;AACnB,mBAAU,EAAE,UAAW;AACvB,oBAAW,EAAE,WAAY;AACzB,sBAAa,EAAE,aAAc;AAC7B,sBAAa,EAAE,aAAc;AAC7B,sBAAa,EAAE,aAAc;AAC7B,wBAAe,EAAE,eAAgB;AACjC,wBAAe,EAAE,eAAgB;AACjC,mCAA0B,EAAE,IAAI,CAAC,0BAA2B;SAC5D;MACE,CACN;IACH;EACF,CAAC,CAAC;;sBAEY,KAAK;;;;;;;;;;;;;;;kCCjII,CAAO;;wCACd,GAAiB;;;;sBAEnB;AACb,YAAS,EAAE;AACT,cAAS,EAAE,iBAAU,MAAM;AAC3B,WAAM,EAAE,iBAAU,MAAM;IACzB;;AAED,kBAAe,6BAAG;AAChB,YAAO;AACL,aAAM,0BAAM;MACb,CAAC;IACH;EACF;;;;;;;;;;;;;;;kECdgB,GAA4C;;;;4DACpC,GAAqC;;;;sBAE/C;AACb,QAAK,EAAE,OAAO;AACd,SAAM,oDAAM;AACZ,WAAQ,8CAAc;EACvB;;;;;;;;;;;;;;;kCCPgC,CAAO;;;;0CACZ,GAAmB;;;;AAE/C,KAAM,MAAM,GAAG,mBAAM,WAAW,CAAC;;;AAC/B,YAAS,EAAE;AACT,cAAS,EAAE,iBAAU,MAAM;AAC3B,cAAS,EAAE,iBAAU,MAAM;AAC3B,4BAAuB,EAAE,iBAAU,MAAM;AACzC,WAAM,EAAE,iBAAU,MAAM;AACxB,iBAAY,EAAE,iBAAU,IAAI;AAC5B,gBAAW,EAAE,iBAAU,MAAM;AAC7B,UAAK,EAAE,iBAAU,MAAM;AACvB,gBAAW,EAAE,iBAAU,KAAK;AAC5B,kBAAa,EAAE,iBAAU,KAAK;AAC9B,kBAAa,EAAE,iBAAU,KAAK;AAC9B,kBAAa,EAAE,iBAAU,IAAI;AAC7B,oBAAe,EAAE,iBAAU,IAAI;AAC/B,oBAAe,EAAE,iBAAU,IAAI;AAC/B,aAAQ,EAAE,iBAAU,IAAI;AACxB,YAAO,EAAE,iBAAU,IAAI;AACvB,UAAK,EAAE,iBAAU,IAAI;AACrB,eAAU,EAAE,iBAAU,IAAI;AAC1B,uBAAkB,EAAE,iBAAU,MAAM;IACrC;;AAED,kBAAe,6BAAG;AAChB,SAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;AAC/B,YAAO;AACL,UAAG,EAAE,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE;AACtD,cAAO,EAAE,KAAK;MACf,CAAC;IACH;;AAED,oBAAiB,+BAAG;AAClB,SAAI,CAAC,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAC9C;;AAED,4BAAyB,qCAAC,SAAS,EAAE;AACnC,SAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;AAC9B,SAAI,CAAC,QAAQ,CAAC;AACZ,UAAG,EAAE,KAAK,IAAI,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE;AACrD,cAAO,EAAE,KAAK;MACf,CAAC,CAAC;IACJ;;AAED,qBAAkB,gCAAG;AACnB,SAAI,CAAC,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAC9C;;AAED,uBAAoB,kCAAG;AACrB,iBAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1B;;AAED,gBAAa,yBAAC,KAAK,EAAE;AACnB,SAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;AAC/B,SAAI,CAAC,QAAQ,CAAC;AACZ,UAAG,EAAH,GAAG;MACJ,CAAC,CAAC;AACH,SAAI,KAAK,GAAG,IAAI,CAAC;kBACgJ,IAAI,CAAC,KAAK;SAAnK,SAAS,UAAT,SAAS;SAAE,uBAAuB,UAAvB,uBAAuB;SAAE,WAAW,UAAX,WAAW;SAAE,aAAa,UAAb,aAAa;SAAE,aAAa,UAAb,aAAa;SAAE,aAAa,UAAb,aAAa;SAAE,eAAe,UAAf,eAAe;SAAE,eAAe,UAAf,eAAe;SAAE,QAAQ,UAAR,QAAQ;SAAE,UAAU,UAAV,UAAU;;AAE5J,SAAI,GAAG,EAAE;AACP,WAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;AACvC,WAAI;AACF,cAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE;AAC3B,iBAAM,EAAE,uBAAuB;AAC/B,oBAAS,EAAE,IAAI;UAChB,CAAC,CAAC;QACJ,CAAC,OAAO,EAAE,EAAE;AACX,aAAI,CAAC,QAAQ,CAAC;AACZ,kBAAO,EAAE,IAAI;UACd,CAAC,CAAC;AACH,gBAAO;QACR;;AAED,WAAI,KAAK,EAAE;;AAET,aACE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,IAC7C,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,IAC7C,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,EAC7C;AACA,eAAI,CAAC,QAAQ,CAAC;AACZ,oBAAO,EAAE,IAAI;YACd,CAAC,CAAC;AACH,kBAAO;UACR;;;AAGD,aAAM,mBAAmB,GAAG,aAAa,EAAE,CAAC;AAC5C,aAAM,qBAAqB,GAAG,eAAe,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;AACpE,aAAM,qBAAqB,GAAG,eAAe,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;AACxF,aACG,mBAAmB,IAAI,mBAAmB,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,IAC7E,qBAAqB,IAAI,qBAAqB,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,IAAI,CAAE,IAChF,qBAAqB,IAAI,qBAAqB,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,IAAI,CAAE,EACjF;AACA,eAAI,CAAC,QAAQ,CAAC;AACZ,oBAAO,EAAE,IAAI;YACd,CAAC,CAAC;AACH,kBAAO;UACR;;AAED,aAAI,aAAa,IAAI,KAAK,EAAE;AAC1B,eACE,aAAa,CAAC,YAAY,EAAE,KAAK,KAAK,CAAC,YAAY,EAAE,IACrD,aAAa,CAAC,UAAU,EAAE,KAAK,KAAK,CAAC,UAAU,EAAE,IACjD,aAAa,CAAC,UAAU,EAAE,KAAK,KAAK,CAAC,UAAU,EAAE,EACjD;;AAEA,iBAAM,YAAY,GAAG,aAAa,CAAC,KAAK,EAAE,CAAC;AAC3C,yBAAY,CAAC,YAAY,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;AAChD,yBAAY,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;AAC5C,yBAAY,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;AAC5C,qBAAQ,CAAC,YAAY,CAAC,CAAC;YACxB;UACF,MAAM,IAAI,aAAa,KAAK,KAAK,EAAE;AAClC,mBAAQ,CAAC,KAAK,CAAC,CAAC;UACjB;QACF,MAAM;AACL,aAAI,CAAC,QAAQ,CAAC;AACZ,kBAAO,EAAE,IAAI;UACd,CAAC,CAAC;AACH,gBAAO;QACR;MACF,MAAM,IAAI,UAAU,EAAE;AACrB,eAAQ,CAAC,IAAI,CAAC,CAAC;MAChB,MAAM;AACL,WAAI,CAAC,QAAQ,CAAC;AACZ,gBAAO,EAAE,IAAI;QACd,CAAC,CAAC;AACH,cAAO;MACR;;AAED,SAAI,CAAC,QAAQ,CAAC;AACZ,cAAO,EAAE,KAAK;MACf,CAAC,CAAC;IACJ;;AAED,YAAS,qBAAC,CAAC,EAAE;AACX,SAAI,CAAC,CAAC,OAAO,KAAK,EAAE,EAAE;AACpB,WAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;MACpB;IACF;;AAED,UAAO,qBAAG;AACR,SAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;AAC3B,SAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IACtB;;AAED,iBAAc,4BAAG;mBAC2B,IAAI,CAAC,KAAK;SAA5C,MAAM,WAAN,MAAM;SAAE,SAAS,WAAT,SAAS;SAAE,UAAU,WAAV,UAAU;;AACrC,SAAI,CAAC,UAAU,EAAE;AACf,cAAO,IAAI,CAAC;MACb;AACD,YAAO,wCAAG,SAAS,EAAK,SAAS,eAAa,EAAC,IAAI,EAAC,QAAQ,EAAC,KAAK,EAAE,MAAM,CAAC,KAAM,EAAC,WAAW,EAAE,IAAI,CAAC,OAAQ,GAAE,CAAC;IAChH;;AAED,WAAQ,sBAAG;mBAC0B,IAAI,CAAC,KAAK;SAArC,SAAS,WAAT,SAAS;SAAE,WAAW,WAAX,WAAW;kBACL,IAAI,CAAC,KAAK;SAA3B,OAAO,UAAP,OAAO;SAAE,GAAG,UAAH,GAAG;;AACpB,SAAM,YAAY,GAAG,OAAO,GAAM,SAAS,sBAAmB,EAAE,CAAC;AACjE,YAAQ;AACN,gBAAS,EAAK,SAAS,gBAAW,YAAe;AACjD,UAAG,EAAC,OAAO;AACX,gBAAS,EAAE,IAAI,CAAC,SAAU;AAC1B,YAAK,EAAE,GAAI;AACX,kBAAW,EAAE,WAAY,EAAC,QAAQ,EAAE,IAAI,CAAC,aAAc;OACvD,CAAE;IACL;;AAED,cAAW,yBAAG;AACZ,SAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;AACzB,SAAI,IAAI,CAAC,KAAK,CAAC,kBAAkB,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AAC1D,WAAI,mBAAmB,GAAG,CAAC,CAAC;AAC5B,WAAI,iBAAiB,GAAG,CAAC,CAAC;AAC1B,WAAI,IAAI,CAAC,KAAK,CAAC,kBAAkB,KAAK,MAAM,EAAE;AAC5C,4BAAmB,GAAG,CAAC,CAAC;AACxB,0BAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACxD,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,kBAAkB,KAAK,QAAQ,EAAE;AACrD,4BAAmB,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC7D,0BAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAC5D,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,kBAAkB,KAAK,QAAQ,EAAE;AACrD,4BAAmB,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACjE,0BAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;QAClD;AACD,WAAI,iBAAiB,GAAG,mBAAmB,KAAK,CAAC,EAAE;AACjD,yCAAgB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;QAC1E;MACF;IACF;;AAED,SAAM,oBAAG;SACC,SAAS,GAAK,IAAI,CAAC,KAAK,CAAxB,SAAS;;AACjB,YACE;;SAAK,SAAS,EAAK,SAAS,gBAAc;OACvC,IAAI,CAAC,QAAQ,EAAE;OACf,IAAI,CAAC,cAAc,EAAE;MAClB,CACN;IACH;EACF,CAAC,CAAC;;sBAEY,MAAM;;;;;;;;;;;;sBC3MG,eAAe;;AAAxB,UAAS,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE;AACzD,OAAI,KAAK,CAAC,eAAe,EAAE;AACzB,SAAM,QAAQ,GAAG,KAAK,CAAC,eAAe,EAAE,CAAC;AACzC,aAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACxB,aAAQ,CAAC,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;AACvC,aAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;AACnC,aAAQ,CAAC,MAAM,EAAE,CAAC;AAClB,UAAK,CAAC,KAAK,EAAE,CAAC;IACf,MAAM,IAAI,KAAK,CAAC,iBAAiB,EAAE;AAClC,UAAK,CAAC,KAAK,EAAE,CAAC;AACd,UAAK,CAAC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACrC,MAAM,IAAI,OAAO,KAAK,CAAC,cAAc,KAAK,WAAW,EAAE;AACtD,UAAK,CAAC,cAAc,GAAG,KAAK,CAAC;AAC7B,UAAK,CAAC,YAAY,GAAG,GAAG,CAAC;AACzB,UAAK,CAAC,KAAK,EAAE,CAAC;IACf;EACF;;;;;;;;;;;;;;;;kCChB8B,CAAO;;;;mCACnB,GAAU;;;;8CACC,GAAoB;;;;AAElD,KAAM,YAAY,GAAG,SAAf,YAAY,CAAI,MAAM,EAAE,eAAe,EAAK;AAChD,OAAI,KAAK,QAAM,MAAQ,CAAC;AACxB,OAAI,MAAM,GAAG,EAAE,EAAE;AACf,UAAK,SAAO,MAAQ,CAAC;IACtB;;AAED,OAAI,QAAQ,GAAG,KAAK,CAAC;AACrB,OAAI,eAAe,IAAI,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;AAC3D,aAAQ,GAAG,IAAI,CAAC;IACjB;;AAED,UAAO;AACL,UAAK,EAAL,KAAK;AACL,aAAQ,EAAR,QAAQ;IACT,CAAC;EACH,CAAC;;AAEF,KAAM,QAAQ,GAAG,mBAAM,WAAW,CAAC;;;AACjC,YAAS,EAAE;AACT,cAAS,EAAE,iBAAU,MAAM;AAC3B,cAAS,EAAE,iBAAU,MAAM;AAC3B,UAAK,EAAE,iBAAU,MAAM;AACvB,aAAQ,EAAE,iBAAU,IAAI;AACxB,aAAQ,EAAE,iBAAU,IAAI;AACxB,4BAAuB,EAAE,iBAAU,MAAM;AACzC,eAAU,EAAE,iBAAU,IAAI;AAC1B,gBAAW,EAAE,iBAAU,KAAK;AAC5B,kBAAa,EAAE,iBAAU,KAAK;AAC9B,kBAAa,EAAE,iBAAU,KAAK;AAC9B,kBAAa,EAAE,iBAAU,IAAI;AAC7B,oBAAe,EAAE,iBAAU,IAAI;AAC/B,oBAAe,EAAE,iBAAU,IAAI;AAC/B,+BAA0B,EAAE,iBAAU,IAAI;IAC3C;;AAED,eAAY,wBAAC,IAAI,EAAE,SAAS,EAAE;SACpB,QAAQ,GAAK,IAAI,CAAC,KAAK,CAAvB,QAAQ;;AAChB,SAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;AAC7B,SAAI,KAAK,EAAE;AACT,YAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;MACvB,MAAM;AACL,YAAK,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;MAC/B;AACD,SAAI,IAAI,KAAK,MAAM,EAAE;AACnB,YAAK,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;MAC/B,MAAM,IAAI,IAAI,KAAK,QAAQ,EAAE;AAC5B,YAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;MAC7B,MAAM;AACL,YAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;MAC7B;AACD,aAAQ,CAAC,KAAK,CAAC,CAAC;IACjB;;AAED,qBAAkB,8BAAC,KAAK,EAAE;AACxB,SAAI,CAAC,KAAK,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC;IAC9C;;AAED,gBAAa,yBAAC,IAAI,EAAE;kBAC0C,IAAI,CAAC,KAAK;SAA9D,SAAS,UAAT,SAAS;SAAE,WAAW,UAAX,WAAW;SAAE,aAAa,UAAb,aAAa;SAAE,QAAQ,UAAR,QAAQ;;AACvD,SAAI,CAAC,QAAQ,EAAE;AACb,cAAO,IAAI,CAAC;MACb;AACD,SAAM,eAAe,GAAG,aAAa,EAAE,CAAC;;AAExC,YACE;AACE,gBAAS,EAAE,SAAU;AACrB,cAAO,EAAE,WAAW,CAAC,GAAG,CAAC,gBAAM;gBAAI,YAAY,CAAC,MAAM,EAAE,eAAe,CAAC;QAAA,CAAE;AAC1E,oBAAa,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAE;AACzC,WAAI,EAAC,MAAM;AACX,eAAQ,EAAE,IAAI,CAAC,YAAa;AAC5B,mBAAY,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAE;OACzD,CACF;IACH;;AAED,kBAAe,2BAAC,MAAM,EAAE;mBACgC,IAAI,CAAC,KAAK;SAAxD,SAAS,WAAT,SAAS;SAAE,aAAa,WAAb,aAAa;SAAE,eAAe,WAAf,eAAe;;AACjD,SAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;AAChD,SAAM,eAAe,GAAG,eAAe,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;;AAE9D,YACE;AACE,gBAAS,EAAE,SAAU;AACrB,cAAO,EAAE,aAAa,CAAC,GAAG,CAAC,gBAAM;gBAAI,YAAY,CAAC,MAAM,EAAE,eAAe,CAAC;QAAA,CAAE;AAC5E,oBAAa,EAAE,aAAa,CAAC,OAAO,CAAC,MAAM,CAAE;AAC7C,WAAI,EAAC,QAAQ;AACb,eAAQ,EAAE,IAAI,CAAC,YAAa;AAC5B,mBAAY,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAE;OAC3D,CACF;IACH;;AAED,kBAAe,2BAAC,MAAM,EAAE;mBAC4C,IAAI,CAAC,KAAK;SAApE,SAAS,WAAT,SAAS;SAAE,aAAa,WAAb,aAAa;SAAE,eAAe,WAAf,eAAe;SAAE,UAAU,WAAV,UAAU;;AAC7D,SAAI,CAAC,UAAU,EAAE;AACf,cAAO,IAAI,CAAC;MACb;AACD,SAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;AAChD,SAAM,eAAe,GAAG,eAAe,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;;AAElF,YACE;AACE,gBAAS,EAAE,SAAU;AACrB,cAAO,EAAE,aAAa,CAAC,GAAG,CAAC,gBAAM;gBAAI,YAAY,CAAC,MAAM,EAAE,eAAe,CAAC;QAAA,CAAE;AAC5E,oBAAa,EAAE,aAAa,CAAC,OAAO,CAAC,MAAM,CAAE;AAC7C,WAAI,EAAC,QAAQ;AACb,eAAQ,EAAE,IAAI,CAAC,YAAa;AAC5B,mBAAY,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAE;OAC3D,CACF;IACH;;AAED,SAAM,oBAAG;AACP,SAAI,IAAI,CAAC,OAAO,EAAE;AAChB,cAAO,IAAI,CAAC,OAAO,CAAC;MACrB;AACD,SAAM,KAAK,GAAG,mCAAsB,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;AACxE,UAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AAC1B,SAAI,CAAC,OAAO,GAAG,KAAK,CAAC;AACrB,YAAO,KAAK,CAAC;IACd;;AAED,SAAM,oBAAG;SACC,SAAS,GAAK,IAAI,CAAC,KAAK,CAAxB,SAAS;;AACjB,SAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;AAChD,YACE;;SAAK,SAAS,EAAK,SAAS,cAAY;OACrC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;OACxC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;OACxC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;MACrC,CACN;IACH;EACF,CAAC,CAAC;;sBAEY,QAAQ;;;;;;;;;;;;;;;;;kCC5IQ,CAAO;;;;qCACjB,GAAW;;;;wCACT,GAAY;;;;AAEnC,KAAM,QAAQ,GAAG,SAAX,QAAQ,CAAI,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAK;AAC1C,OAAM,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,IACxD,SAAS,4BAA4B,GAAG;AACtC,YAAO,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACrC,CAAC;;AAEJ,OAAI,QAAQ,IAAI,CAAC,EAAE;AACjB,YAAO,CAAC,SAAS,GAAG,EAAE,CAAC;AACvB,YAAO;IACR;AACD,OAAM,UAAU,GAAG,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC;AAC1C,OAAM,OAAO,GAAG,UAAU,GAAG,QAAQ,GAAG,EAAE,CAAC;;AAE3C,wBAAqB,CAAC,YAAM;AAC1B,YAAO,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC;AAChD,SAAI,OAAO,CAAC,SAAS,KAAK,EAAE,EAAE,OAAO;AACrC,aAAQ,CAAC,OAAO,EAAE,EAAE,EAAE,QAAQ,GAAG,EAAE,CAAC,CAAC;IACtC,CAAC,CAAC;EACJ,CAAC;;AAEF,KAAM,MAAM,GAAG,mBAAM,WAAW,CAAC;;;AAC/B,YAAS,EAAE;AACT,cAAS,EAAE,iBAAU,MAAM;AAC3B,YAAO,EAAE,iBAAU,KAAK;AACxB,4BAAuB,EAAE,iBAAU,MAAM;AACzC,kBAAa,EAAE,iBAAU,MAAM;AAC/B,SAAI,EAAE,iBAAU,MAAM;AACtB,aAAQ,EAAE,iBAAU,IAAI;AACxB,iBAAY,EAAE,iBAAU,IAAI;IAC7B;;AAED,oBAAiB,+BAAG;;AAElB,SAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAC1B;;AAED,qBAAkB,8BAAC,SAAS,EAAE;;AAE5B,SAAI,SAAS,CAAC,aAAa,KAAK,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE;AACxD,WAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;MAC5B;IACF;;AAED,WAAQ,oBAAC,KAAK,EAAE;kBACa,IAAI,CAAC,KAAK;SAA7B,QAAQ,UAAR,QAAQ;SAAE,IAAI,UAAJ,IAAI;;AACtB,aAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACvB;;AAED,aAAU,wBAAG;;;mBACmC,IAAI,CAAC,KAAK;SAAhD,OAAO,WAAP,OAAO;SAAE,aAAa,WAAb,aAAa;SAAE,SAAS,WAAT,SAAS;;AACzC,YAAO,OAAO,CAAC,GAAG,CAAC,UAAC,IAAI,EAAE,KAAK,EAAK;;;AAClC,WAAM,GAAG,GAAG,6EACN,SAAS,8BAA4B,aAAa,KAAK,KAAK,gCAC5D,SAAS,8BAA4B,IAAI,CAAC,QAAQ,gBACtD,CAAC;AACH,WAAI,OAAO,GAAG,IAAI,CAAC;AACnB,WAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,gBAAO,GAAG,MAAK,QAAQ,CAAC,IAAI,QAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjD;AACD,cAAO;;WAAI,SAAS,EAAE,GAAI,EAAC,GAAG,EAAE,KAAM,EAAC,OAAO,EAAE,OAAQ,EAAC,QAAQ,EAAE,IAAI,CAAC,QAAS;SAAE,IAAI,CAAC,KAAK;QAAM,CAAC;MACrG,CAAC,CAAC;IACJ;;AAED,mBAAgB,4BAAC,QAAQ,EAAE;;AAEzB,SAAM,MAAM,GAAG,sBAAS,WAAW,CAAC,IAAI,CAAC,CAAC;AAC1C,SAAM,IAAI,GAAG,sBAAS,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAClD,SAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;AACrC,SAAI,KAAK,GAAG,CAAC,EAAE;AACb,YAAK,GAAG,CAAC,CAAC;MACX;AACD,SAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACvC,SAAM,EAAE,GAAG,SAAS,CAAC,SAAS,CAAC;AAC/B,aAAQ,CAAC,MAAM,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;IAChC;;AAED,SAAM,oBAAG;AACP,SAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AACnC,cAAO,IAAI,CAAC;MACb;;SAEO,SAAS,GAAK,IAAI,CAAC,KAAK,CAAxB,SAAS;;AAEjB,YACE;;SAAK,SAAS,EAAK,SAAS,YAAU;AACjC,qBAAY,EAAE,IAAI,CAAC,KAAK,CAAC,YAAa;OACzC;;WAAI,GAAG,EAAC,MAAM;SAAE,IAAI,CAAC,UAAU,EAAE;QAAM;MACnC,CACN;IACH;EACF,CAAC,CAAC;;sBAEY,MAAM;;;;;;;;;;;;AChGrB,KAAM,kBAAkB,GAAG;AACzB,UAAO,EAAE,CAAC;AACV,UAAO,EAAE,CAAC;EACX,CAAC;;AAEF,KAAM,YAAY,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;AAE5B,KAAM,UAAU,GAAG;AACjB,aAAU,EAAE;AACV,WAAM,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;AACpB,aAAQ,EAAE,kBAAkB;AAC5B,WAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACf,iBAAY,EAAZ,YAAY;IACb;AACD,cAAW,EAAE;AACX,WAAM,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;AACpB,aAAQ,EAAE,kBAAkB;AAC5B,WAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACf,iBAAY,EAAZ,YAAY;IACb;AACD,WAAQ,EAAE;AACR,WAAM,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;AACpB,aAAQ,EAAE,kBAAkB;AAC5B,WAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AACd,iBAAY,EAAZ,YAAY;IACb;AACD,UAAO,EAAE;AACP,WAAM,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;AACpB,aAAQ,EAAE,kBAAkB;AAC5B,WAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AACd,iBAAY,EAAZ,YAAY;IACb;EACF,CAAC;;sBAEa,UAAU;;;;;;;;;;;;;;;;oDClCE,GAA2B;;;;AAE/C,UAAS,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE;AAC3C,OAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AAC9B,YAAO,yCAAmB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAClD;AACD,UAAO,MAAM,CAAC;;;;;;;;;;;;;;;kECNC,GAA4C;;;;4DACpC,GAAqC;;;;sBAE/C;AACb,QAAK,EAAE,IAAI;AACX,SAAM,oDAAM;AACZ,WAAQ,8CAAc;EACvB;;;;;;;ACPD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAqB,KAAK,EAAE,KAAK;AACjC,G;;;;;;ACbA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,G","file":"common.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tvar parentJsonpFunction = window[\"webpackJsonp\"];\n \twindow[\"webpackJsonp\"] = function webpackJsonpCallback(chunkIds, moreModules) {\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, callbacks = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(installedChunks[chunkId])\n \t\t\t\tcallbacks.push.apply(callbacks, installedChunks[chunkId]);\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules);\n \t\twhile(callbacks.length)\n \t\t\tcallbacks.shift().call(null, __webpack_require__);\n \t\tif(moreModules[0]) {\n \t\t\tinstalledModules[0] = 0;\n \t\t\treturn __webpack_require__(0);\n \t\t}\n \t};\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// \"0\" means \"already loaded\"\n \t// Array means \"loading\", array contains callbacks\n \tvar installedChunks = {\n \t\t4:0\n \t};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId, callback) {\n \t\t// \"0\" is the signal for \"already loaded\"\n \t\tif(installedChunks[chunkId] === 0)\n \t\t\treturn callback.call(null, __webpack_require__);\n\n \t\t// an array means \"currently loading\".\n \t\tif(installedChunks[chunkId] !== undefined) {\n \t\t\tinstalledChunks[chunkId].push(callback);\n \t\t} else {\n \t\t\t// start chunk loading\n \t\t\tinstalledChunks[chunkId] = [callback];\n \t\t\tvar head = document.getElementsByTagName('head')[0];\n \t\t\tvar script = document.createElement('script');\n \t\t\tscript.type = 'text/javascript';\n \t\t\tscript.charset = 'utf-8';\n \t\t\tscript.async = true;\n\n \t\t\tscript.src = __webpack_require__.p + \"\" + chunkId + \".\" + ({\"0\":\"disabled\",\"1\":\"hidden\",\"2\":\"pick-time\",\"3\":\"value-and-defaultValue\"}[chunkId]||chunkId) + \".js\";\n \t\t\thead.appendChild(script);\n \t\t}\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap b92ccce943cebbd77676\n **/","// removed by extract-text-webpack-plugin\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./assets/index.less\n ** module id = 2\n ** module chunks = 4\n **/","'use strict';\n\nmodule.exports = require('./lib/React');\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/react.js\n ** module id = 3\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule React\n */\n\n'use strict';\n\nvar ReactDOM = require('./ReactDOM');\nvar ReactDOMServer = require('./ReactDOMServer');\nvar ReactIsomorphic = require('./ReactIsomorphic');\n\nvar assign = require('./Object.assign');\nvar deprecated = require('./deprecated');\n\n// `version` will be added here by ReactIsomorphic.\nvar React = {};\n\nassign(React, ReactIsomorphic);\n\nassign(React, {\n  // ReactDOM\n  findDOMNode: deprecated('findDOMNode', 'ReactDOM', 'react-dom', ReactDOM, ReactDOM.findDOMNode),\n  render: deprecated('render', 'ReactDOM', 'react-dom', ReactDOM, ReactDOM.render),\n  unmountComponentAtNode: deprecated('unmountComponentAtNode', 'ReactDOM', 'react-dom', ReactDOM, ReactDOM.unmountComponentAtNode),\n\n  // ReactDOMServer\n  renderToString: deprecated('renderToString', 'ReactDOMServer', 'react-dom/server', ReactDOMServer, ReactDOMServer.renderToString),\n  renderToStaticMarkup: deprecated('renderToStaticMarkup', 'ReactDOMServer', 'react-dom/server', ReactDOMServer, ReactDOMServer.renderToStaticMarkup)\n});\n\nReact.__SECRET_DOM_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = ReactDOM;\nReact.__SECRET_DOM_SERVER_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = ReactDOMServer;\n\nmodule.exports = React;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/React.js\n ** module id = 4\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOM\n */\n\n/* globals __REACT_DEVTOOLS_GLOBAL_HOOK__*/\n\n'use strict';\n\nvar ReactCurrentOwner = require('./ReactCurrentOwner');\nvar ReactDOMTextComponent = require('./ReactDOMTextComponent');\nvar ReactDefaultInjection = require('./ReactDefaultInjection');\nvar ReactInstanceHandles = require('./ReactInstanceHandles');\nvar ReactMount = require('./ReactMount');\nvar ReactPerf = require('./ReactPerf');\nvar ReactReconciler = require('./ReactReconciler');\nvar ReactUpdates = require('./ReactUpdates');\nvar ReactVersion = require('./ReactVersion');\n\nvar findDOMNode = require('./findDOMNode');\nvar renderSubtreeIntoContainer = require('./renderSubtreeIntoContainer');\nvar warning = require('fbjs/lib/warning');\n\nReactDefaultInjection.inject();\n\nvar render = ReactPerf.measure('React', 'render', ReactMount.render);\n\nvar React = {\n  findDOMNode: findDOMNode,\n  render: render,\n  unmountComponentAtNode: ReactMount.unmountComponentAtNode,\n  version: ReactVersion,\n\n  /* eslint-disable camelcase */\n  unstable_batchedUpdates: ReactUpdates.batchedUpdates,\n  unstable_renderSubtreeIntoContainer: renderSubtreeIntoContainer\n};\n\n// Inject the runtime into a devtools global hook regardless of browser.\n// Allows for debugging when the hook is injected on the page.\n/* eslint-enable camelcase */\nif (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' && typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.inject === 'function') {\n  __REACT_DEVTOOLS_GLOBAL_HOOK__.inject({\n    CurrentOwner: ReactCurrentOwner,\n    InstanceHandles: ReactInstanceHandles,\n    Mount: ReactMount,\n    Reconciler: ReactReconciler,\n    TextComponent: ReactDOMTextComponent\n  });\n}\n\nif (process.env.NODE_ENV !== 'production') {\n  var ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\n  if (ExecutionEnvironment.canUseDOM && window.top === window.self) {\n\n    // First check if devtools is not installed\n    if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined') {\n      // If we're in Chrome or Firefox, provide a download link if not installed.\n      if (navigator.userAgent.indexOf('Chrome') > -1 && navigator.userAgent.indexOf('Edge') === -1 || navigator.userAgent.indexOf('Firefox') > -1) {\n        console.debug('Download the React DevTools for a better development experience: ' + 'https://fb.me/react-devtools');\n      }\n    }\n\n    // If we're in IE8, check to see if we are in compatibility mode and provide\n    // information on preventing compatibility mode\n    var ieCompatibilityMode = document.documentMode && document.documentMode < 8;\n\n    process.env.NODE_ENV !== 'production' ? warning(!ieCompatibilityMode, 'Internet Explorer is running in compatibility mode; please add the ' + 'following tag to your HTML to prevent this from happening: ' + '<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" />') : undefined;\n\n    var expectedFeatures = [\n    // shims\n    Array.isArray, Array.prototype.every, Array.prototype.forEach, Array.prototype.indexOf, Array.prototype.map, Date.now, Function.prototype.bind, Object.keys, String.prototype.split, String.prototype.trim,\n\n    // shams\n    Object.create, Object.freeze];\n\n    for (var i = 0; i < expectedFeatures.length; i++) {\n      if (!expectedFeatures[i]) {\n        console.error('One or more ES5 shim/shams expected by React are not available: ' + 'https://fb.me/react-warning-polyfills');\n        break;\n      }\n    }\n  }\n}\n\nmodule.exports = React;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOM.js\n ** module id = 5\n ** module chunks = 4\n **/","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = setTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        setTimeout(drainQueue, 0);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/process/browser.js\n ** module id = 6\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactCurrentOwner\n */\n\n'use strict';\n\n/**\n * Keeps track of the current owner.\n *\n * The current owner is the component who should own any components that are\n * currently being constructed.\n */\nvar ReactCurrentOwner = {\n\n  /**\n   * @internal\n   * @type {ReactComponent}\n   */\n  current: null\n\n};\n\nmodule.exports = ReactCurrentOwner;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactCurrentOwner.js\n ** module id = 7\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMTextComponent\n * @typechecks static-only\n */\n\n'use strict';\n\nvar DOMChildrenOperations = require('./DOMChildrenOperations');\nvar DOMPropertyOperations = require('./DOMPropertyOperations');\nvar ReactComponentBrowserEnvironment = require('./ReactComponentBrowserEnvironment');\nvar ReactMount = require('./ReactMount');\n\nvar assign = require('./Object.assign');\nvar escapeTextContentForBrowser = require('./escapeTextContentForBrowser');\nvar setTextContent = require('./setTextContent');\nvar validateDOMNesting = require('./validateDOMNesting');\n\n/**\n * Text nodes violate a couple assumptions that React makes about components:\n *\n *  - When mounting text into the DOM, adjacent text nodes are merged.\n *  - Text nodes cannot be assigned a React root ID.\n *\n * This component is used to wrap strings in elements so that they can undergo\n * the same reconciliation that is applied to elements.\n *\n * TODO: Investigate representing React components in the DOM with text nodes.\n *\n * @class ReactDOMTextComponent\n * @extends ReactComponent\n * @internal\n */\nvar ReactDOMTextComponent = function (props) {\n  // This constructor and its argument is currently used by mocks.\n};\n\nassign(ReactDOMTextComponent.prototype, {\n\n  /**\n   * @param {ReactText} text\n   * @internal\n   */\n  construct: function (text) {\n    // TODO: This is really a ReactText (ReactNode), not a ReactElement\n    this._currentElement = text;\n    this._stringText = '' + text;\n\n    // Properties\n    this._rootNodeID = null;\n    this._mountIndex = 0;\n  },\n\n  /**\n   * Creates the markup for this text node. This node is not intended to have\n   * any features besides containing text content.\n   *\n   * @param {string} rootID DOM ID of the root node.\n   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\n   * @return {string} Markup for this text node.\n   * @internal\n   */\n  mountComponent: function (rootID, transaction, context) {\n    if (process.env.NODE_ENV !== 'production') {\n      if (context[validateDOMNesting.ancestorInfoContextKey]) {\n        validateDOMNesting('span', null, context[validateDOMNesting.ancestorInfoContextKey]);\n      }\n    }\n\n    this._rootNodeID = rootID;\n    if (transaction.useCreateElement) {\n      var ownerDocument = context[ReactMount.ownerDocumentContextKey];\n      var el = ownerDocument.createElement('span');\n      DOMPropertyOperations.setAttributeForID(el, rootID);\n      // Populate node cache\n      ReactMount.getID(el);\n      setTextContent(el, this._stringText);\n      return el;\n    } else {\n      var escapedText = escapeTextContentForBrowser(this._stringText);\n\n      if (transaction.renderToStaticMarkup) {\n        // Normally we'd wrap this in a `span` for the reasons stated above, but\n        // since this is a situation where React won't take over (static pages),\n        // we can simply return the text as it is.\n        return escapedText;\n      }\n\n      return '<span ' + DOMPropertyOperations.createMarkupForID(rootID) + '>' + escapedText + '</span>';\n    }\n  },\n\n  /**\n   * Updates this component by updating the text content.\n   *\n   * @param {ReactText} nextText The next text content\n   * @param {ReactReconcileTransaction} transaction\n   * @internal\n   */\n  receiveComponent: function (nextText, transaction) {\n    if (nextText !== this._currentElement) {\n      this._currentElement = nextText;\n      var nextStringText = '' + nextText;\n      if (nextStringText !== this._stringText) {\n        // TODO: Save this as pending props and use performUpdateIfNecessary\n        // and/or updateComponent to do the actual update for consistency with\n        // other component types?\n        this._stringText = nextStringText;\n        var node = ReactMount.getNode(this._rootNodeID);\n        DOMChildrenOperations.updateTextContent(node, nextStringText);\n      }\n    }\n  },\n\n  unmountComponent: function () {\n    ReactComponentBrowserEnvironment.unmountIDFromEnvironment(this._rootNodeID);\n  }\n\n});\n\nmodule.exports = ReactDOMTextComponent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMTextComponent.js\n ** module id = 8\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule DOMChildrenOperations\n * @typechecks static-only\n */\n\n'use strict';\n\nvar Danger = require('./Danger');\nvar ReactMultiChildUpdateTypes = require('./ReactMultiChildUpdateTypes');\nvar ReactPerf = require('./ReactPerf');\n\nvar setInnerHTML = require('./setInnerHTML');\nvar setTextContent = require('./setTextContent');\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * Inserts `childNode` as a child of `parentNode` at the `index`.\n *\n * @param {DOMElement} parentNode Parent node in which to insert.\n * @param {DOMElement} childNode Child node to insert.\n * @param {number} index Index at which to insert the child.\n * @internal\n */\nfunction insertChildAt(parentNode, childNode, index) {\n  // By exploiting arrays returning `undefined` for an undefined index, we can\n  // rely exclusively on `insertBefore(node, null)` instead of also using\n  // `appendChild(node)`. However, using `undefined` is not allowed by all\n  // browsers so we must replace it with `null`.\n\n  // fix render order error in safari\n  // IE8 will throw error when index out of list size.\n  var beforeChild = index >= parentNode.childNodes.length ? null : parentNode.childNodes.item(index);\n\n  parentNode.insertBefore(childNode, beforeChild);\n}\n\n/**\n * Operations for updating with DOM children.\n */\nvar DOMChildrenOperations = {\n\n  dangerouslyReplaceNodeWithMarkup: Danger.dangerouslyReplaceNodeWithMarkup,\n\n  updateTextContent: setTextContent,\n\n  /**\n   * Updates a component's children by processing a series of updates. The\n   * update configurations are each expected to have a `parentNode` property.\n   *\n   * @param {array<object>} updates List of update configurations.\n   * @param {array<string>} markupList List of markup strings.\n   * @internal\n   */\n  processUpdates: function (updates, markupList) {\n    var update;\n    // Mapping from parent IDs to initial child orderings.\n    var initialChildren = null;\n    // List of children that will be moved or removed.\n    var updatedChildren = null;\n\n    for (var i = 0; i < updates.length; i++) {\n      update = updates[i];\n      if (update.type === ReactMultiChildUpdateTypes.MOVE_EXISTING || update.type === ReactMultiChildUpdateTypes.REMOVE_NODE) {\n        var updatedIndex = update.fromIndex;\n        var updatedChild = update.parentNode.childNodes[updatedIndex];\n        var parentID = update.parentID;\n\n        !updatedChild ? process.env.NODE_ENV !== 'production' ? invariant(false, 'processUpdates(): Unable to find child %s of element. This ' + 'probably means the DOM was unexpectedly mutated (e.g., by the ' + 'browser), usually due to forgetting a <tbody> when using tables, ' + 'nesting tags like <form>, <p>, or <a>, or using non-SVG elements ' + 'in an <svg> parent. Try inspecting the child nodes of the element ' + 'with React ID `%s`.', updatedIndex, parentID) : invariant(false) : undefined;\n\n        initialChildren = initialChildren || {};\n        initialChildren[parentID] = initialChildren[parentID] || [];\n        initialChildren[parentID][updatedIndex] = updatedChild;\n\n        updatedChildren = updatedChildren || [];\n        updatedChildren.push(updatedChild);\n      }\n    }\n\n    var renderedMarkup;\n    // markupList is either a list of markup or just a list of elements\n    if (markupList.length && typeof markupList[0] === 'string') {\n      renderedMarkup = Danger.dangerouslyRenderMarkup(markupList);\n    } else {\n      renderedMarkup = markupList;\n    }\n\n    // Remove updated children first so that `toIndex` is consistent.\n    if (updatedChildren) {\n      for (var j = 0; j < updatedChildren.length; j++) {\n        updatedChildren[j].parentNode.removeChild(updatedChildren[j]);\n      }\n    }\n\n    for (var k = 0; k < updates.length; k++) {\n      update = updates[k];\n      switch (update.type) {\n        case ReactMultiChildUpdateTypes.INSERT_MARKUP:\n          insertChildAt(update.parentNode, renderedMarkup[update.markupIndex], update.toIndex);\n          break;\n        case ReactMultiChildUpdateTypes.MOVE_EXISTING:\n          insertChildAt(update.parentNode, initialChildren[update.parentID][update.fromIndex], update.toIndex);\n          break;\n        case ReactMultiChildUpdateTypes.SET_MARKUP:\n          setInnerHTML(update.parentNode, update.content);\n          break;\n        case ReactMultiChildUpdateTypes.TEXT_CONTENT:\n          setTextContent(update.parentNode, update.content);\n          break;\n        case ReactMultiChildUpdateTypes.REMOVE_NODE:\n          // Already removed by the for-loop above.\n          break;\n      }\n    }\n  }\n\n};\n\nReactPerf.measureMethods(DOMChildrenOperations, 'DOMChildrenOperations', {\n  updateTextContent: 'updateTextContent'\n});\n\nmodule.exports = DOMChildrenOperations;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/DOMChildrenOperations.js\n ** module id = 9\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule Danger\n * @typechecks static-only\n */\n\n'use strict';\n\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\n\nvar createNodesFromMarkup = require('fbjs/lib/createNodesFromMarkup');\nvar emptyFunction = require('fbjs/lib/emptyFunction');\nvar getMarkupWrap = require('fbjs/lib/getMarkupWrap');\nvar invariant = require('fbjs/lib/invariant');\n\nvar OPEN_TAG_NAME_EXP = /^(<[^ \\/>]+)/;\nvar RESULT_INDEX_ATTR = 'data-danger-index';\n\n/**\n * Extracts the `nodeName` from a string of markup.\n *\n * NOTE: Extracting the `nodeName` does not require a regular expression match\n * because we make assumptions about React-generated markup (i.e. there are no\n * spaces surrounding the opening tag and there is at least one attribute).\n *\n * @param {string} markup String of markup.\n * @return {string} Node name of the supplied markup.\n * @see http://jsperf.com/extract-nodename\n */\nfunction getNodeName(markup) {\n  return markup.substring(1, markup.indexOf(' '));\n}\n\nvar Danger = {\n\n  /**\n   * Renders markup into an array of nodes. The markup is expected to render\n   * into a list of root nodes. Also, the length of `resultList` and\n   * `markupList` should be the same.\n   *\n   * @param {array<string>} markupList List of markup strings to render.\n   * @return {array<DOMElement>} List of rendered nodes.\n   * @internal\n   */\n  dangerouslyRenderMarkup: function (markupList) {\n    !ExecutionEnvironment.canUseDOM ? process.env.NODE_ENV !== 'production' ? invariant(false, 'dangerouslyRenderMarkup(...): Cannot render markup in a worker ' + 'thread. Make sure `window` and `document` are available globally ' + 'before requiring React when unit testing or use ' + 'ReactDOMServer.renderToString for server rendering.') : invariant(false) : undefined;\n    var nodeName;\n    var markupByNodeName = {};\n    // Group markup by `nodeName` if a wrap is necessary, else by '*'.\n    for (var i = 0; i < markupList.length; i++) {\n      !markupList[i] ? process.env.NODE_ENV !== 'production' ? invariant(false, 'dangerouslyRenderMarkup(...): Missing markup.') : invariant(false) : undefined;\n      nodeName = getNodeName(markupList[i]);\n      nodeName = getMarkupWrap(nodeName) ? nodeName : '*';\n      markupByNodeName[nodeName] = markupByNodeName[nodeName] || [];\n      markupByNodeName[nodeName][i] = markupList[i];\n    }\n    var resultList = [];\n    var resultListAssignmentCount = 0;\n    for (nodeName in markupByNodeName) {\n      if (!markupByNodeName.hasOwnProperty(nodeName)) {\n        continue;\n      }\n      var markupListByNodeName = markupByNodeName[nodeName];\n\n      // This for-in loop skips the holes of the sparse array. The order of\n      // iteration should follow the order of assignment, which happens to match\n      // numerical index order, but we don't rely on that.\n      var resultIndex;\n      for (resultIndex in markupListByNodeName) {\n        if (markupListByNodeName.hasOwnProperty(resultIndex)) {\n          var markup = markupListByNodeName[resultIndex];\n\n          // Push the requested markup with an additional RESULT_INDEX_ATTR\n          // attribute.  If the markup does not start with a < character, it\n          // will be discarded below (with an appropriate console.error).\n          markupListByNodeName[resultIndex] = markup.replace(OPEN_TAG_NAME_EXP,\n          // This index will be parsed back out below.\n          '$1 ' + RESULT_INDEX_ATTR + '=\"' + resultIndex + '\" ');\n        }\n      }\n\n      // Render each group of markup with similar wrapping `nodeName`.\n      var renderNodes = createNodesFromMarkup(markupListByNodeName.join(''), emptyFunction // Do nothing special with <script> tags.\n      );\n\n      for (var j = 0; j < renderNodes.length; ++j) {\n        var renderNode = renderNodes[j];\n        if (renderNode.hasAttribute && renderNode.hasAttribute(RESULT_INDEX_ATTR)) {\n\n          resultIndex = +renderNode.getAttribute(RESULT_INDEX_ATTR);\n          renderNode.removeAttribute(RESULT_INDEX_ATTR);\n\n          !!resultList.hasOwnProperty(resultIndex) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Danger: Assigning to an already-occupied result index.') : invariant(false) : undefined;\n\n          resultList[resultIndex] = renderNode;\n\n          // This should match resultList.length and markupList.length when\n          // we're done.\n          resultListAssignmentCount += 1;\n        } else if (process.env.NODE_ENV !== 'production') {\n          console.error('Danger: Discarding unexpected node:', renderNode);\n        }\n      }\n    }\n\n    // Although resultList was populated out of order, it should now be a dense\n    // array.\n    !(resultListAssignmentCount === resultList.length) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Danger: Did not assign to every index of resultList.') : invariant(false) : undefined;\n\n    !(resultList.length === markupList.length) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Danger: Expected markup to render %s nodes, but rendered %s.', markupList.length, resultList.length) : invariant(false) : undefined;\n\n    return resultList;\n  },\n\n  /**\n   * Replaces a node with a string of markup at its current position within its\n   * parent. The markup must render into a single root node.\n   *\n   * @param {DOMElement} oldChild Child node to replace.\n   * @param {string} markup Markup to render in place of the child node.\n   * @internal\n   */\n  dangerouslyReplaceNodeWithMarkup: function (oldChild, markup) {\n    !ExecutionEnvironment.canUseDOM ? process.env.NODE_ENV !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Cannot render markup in a ' + 'worker thread. Make sure `window` and `document` are available ' + 'globally before requiring React when unit testing or use ' + 'ReactDOMServer.renderToString() for server rendering.') : invariant(false) : undefined;\n    !markup ? process.env.NODE_ENV !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Missing markup.') : invariant(false) : undefined;\n    !(oldChild.tagName.toLowerCase() !== 'html') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Cannot replace markup of the ' + '<html> node. This is because browser quirks make this unreliable ' + 'and/or slow. If you want to render to the root you must use ' + 'server rendering. See ReactDOMServer.renderToString().') : invariant(false) : undefined;\n\n    var newChild;\n    if (typeof markup === 'string') {\n      newChild = createNodesFromMarkup(markup, emptyFunction)[0];\n    } else {\n      newChild = markup;\n    }\n    oldChild.parentNode.replaceChild(newChild, oldChild);\n  }\n\n};\n\nmodule.exports = Danger;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/Danger.js\n ** module id = 10\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ExecutionEnvironment\n */\n\n'use strict';\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n\n/**\n * Simple, lightweight module assisting with the detection and context of\n * Worker. Helps avoid circular dependencies and allows code to reason about\n * whether or not they are in a Worker, even if they never include the main\n * `ReactWorker` dependency.\n */\nvar ExecutionEnvironment = {\n\n  canUseDOM: canUseDOM,\n\n  canUseWorkers: typeof Worker !== 'undefined',\n\n  canUseEventListeners: canUseDOM && !!(window.addEventListener || window.attachEvent),\n\n  canUseViewport: canUseDOM && !!window.screen,\n\n  isInWorker: !canUseDOM // For now, this is true - might change in the future.\n\n};\n\nmodule.exports = ExecutionEnvironment;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/fbjs/lib/ExecutionEnvironment.js\n ** module id = 11\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule createNodesFromMarkup\n * @typechecks\n */\n\n/*eslint-disable fb-www/unsafe-html*/\n\n'use strict';\n\nvar ExecutionEnvironment = require('./ExecutionEnvironment');\n\nvar createArrayFromMixed = require('./createArrayFromMixed');\nvar getMarkupWrap = require('./getMarkupWrap');\nvar invariant = require('./invariant');\n\n/**\n * Dummy container used to render all markup.\n */\nvar dummyNode = ExecutionEnvironment.canUseDOM ? document.createElement('div') : null;\n\n/**\n * Pattern used by `getNodeName`.\n */\nvar nodeNamePattern = /^\\s*<(\\w+)/;\n\n/**\n * Extracts the `nodeName` of the first element in a string of markup.\n *\n * @param {string} markup String of markup.\n * @return {?string} Node name of the supplied markup.\n */\nfunction getNodeName(markup) {\n  var nodeNameMatch = markup.match(nodeNamePattern);\n  return nodeNameMatch && nodeNameMatch[1].toLowerCase();\n}\n\n/**\n * Creates an array containing the nodes rendered from the supplied markup. The\n * optionally supplied `handleScript` function will be invoked once for each\n * <script> element that is rendered. If no `handleScript` function is supplied,\n * an exception is thrown if any <script> elements are rendered.\n *\n * @param {string} markup A string of valid HTML markup.\n * @param {?function} handleScript Invoked once for each rendered <script>.\n * @return {array<DOMElement|DOMTextNode>} An array of rendered nodes.\n */\nfunction createNodesFromMarkup(markup, handleScript) {\n  var node = dummyNode;\n  !!!dummyNode ? process.env.NODE_ENV !== 'production' ? invariant(false, 'createNodesFromMarkup dummy not initialized') : invariant(false) : undefined;\n  var nodeName = getNodeName(markup);\n\n  var wrap = nodeName && getMarkupWrap(nodeName);\n  if (wrap) {\n    node.innerHTML = wrap[1] + markup + wrap[2];\n\n    var wrapDepth = wrap[0];\n    while (wrapDepth--) {\n      node = node.lastChild;\n    }\n  } else {\n    node.innerHTML = markup;\n  }\n\n  var scripts = node.getElementsByTagName('script');\n  if (scripts.length) {\n    !handleScript ? process.env.NODE_ENV !== 'production' ? invariant(false, 'createNodesFromMarkup(...): Unexpected <script> element rendered.') : invariant(false) : undefined;\n    createArrayFromMixed(scripts).forEach(handleScript);\n  }\n\n  var nodes = createArrayFromMixed(node.childNodes);\n  while (node.lastChild) {\n    node.removeChild(node.lastChild);\n  }\n  return nodes;\n}\n\nmodule.exports = createNodesFromMarkup;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/fbjs/lib/createNodesFromMarkup.js\n ** module id = 12\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule createArrayFromMixed\n * @typechecks\n */\n\n'use strict';\n\nvar toArray = require('./toArray');\n\n/**\n * Perform a heuristic test to determine if an object is \"array-like\".\n *\n *   A monk asked Joshu, a Zen master, \"Has a dog Buddha nature?\"\n *   Joshu replied: \"Mu.\"\n *\n * This function determines if its argument has \"array nature\": it returns\n * true if the argument is an actual array, an `arguments' object, or an\n * HTMLCollection (e.g. node.childNodes or node.getElementsByTagName()).\n *\n * It will return false for other array-like objects like Filelist.\n *\n * @param {*} obj\n * @return {boolean}\n */\nfunction hasArrayNature(obj) {\n  return(\n    // not null/false\n    !!obj && (\n    // arrays are objects, NodeLists are functions in Safari\n    typeof obj == 'object' || typeof obj == 'function') &&\n    // quacks like an array\n    'length' in obj &&\n    // not window\n    !('setInterval' in obj) &&\n    // no DOM node should be considered an array-like\n    // a 'select' element has 'length' and 'item' properties on IE8\n    typeof obj.nodeType != 'number' && (\n    // a real array\n    Array.isArray(obj) ||\n    // arguments\n    'callee' in obj ||\n    // HTMLCollection/NodeList\n    'item' in obj)\n  );\n}\n\n/**\n * Ensure that the argument is an array by wrapping it in an array if it is not.\n * Creates a copy of the argument if it is already an array.\n *\n * This is mostly useful idiomatically:\n *\n *   var createArrayFromMixed = require('createArrayFromMixed');\n *\n *   function takesOneOrMoreThings(things) {\n *     things = createArrayFromMixed(things);\n *     ...\n *   }\n *\n * This allows you to treat `things' as an array, but accept scalars in the API.\n *\n * If you need to convert an array-like object, like `arguments`, into an array\n * use toArray instead.\n *\n * @param {*} obj\n * @return {array}\n */\nfunction createArrayFromMixed(obj) {\n  if (!hasArrayNature(obj)) {\n    return [obj];\n  } else if (Array.isArray(obj)) {\n    return obj.slice();\n  } else {\n    return toArray(obj);\n  }\n}\n\nmodule.exports = createArrayFromMixed;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/fbjs/lib/createArrayFromMixed.js\n ** module id = 13\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule toArray\n * @typechecks\n */\n\n'use strict';\n\nvar invariant = require('./invariant');\n\n/**\n * Convert array-like objects to arrays.\n *\n * This API assumes the caller knows the contents of the data type. For less\n * well defined inputs use createArrayFromMixed.\n *\n * @param {object|function|filelist} obj\n * @return {array}\n */\nfunction toArray(obj) {\n  var length = obj.length;\n\n  // Some browse builtin objects can report typeof 'function' (e.g. NodeList in\n  // old versions of Safari).\n  !(!Array.isArray(obj) && (typeof obj === 'object' || typeof obj === 'function')) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'toArray: Array-like object expected') : invariant(false) : undefined;\n\n  !(typeof length === 'number') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'toArray: Object needs a length property') : invariant(false) : undefined;\n\n  !(length === 0 || length - 1 in obj) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'toArray: Object should have keys for indices') : invariant(false) : undefined;\n\n  // Old IE doesn't give collections access to hasOwnProperty. Assume inputs\n  // without method will throw during the slice call and skip straight to the\n  // fallback.\n  if (obj.hasOwnProperty) {\n    try {\n      return Array.prototype.slice.call(obj);\n    } catch (e) {\n      // IE < 9 does not support Array#slice on collections objects\n    }\n  }\n\n  // Fall back to copying key by key. This assumes all keys have a value,\n  // so will not preserve sparsely populated inputs.\n  var ret = Array(length);\n  for (var ii = 0; ii < length; ii++) {\n    ret[ii] = obj[ii];\n  }\n  return ret;\n}\n\nmodule.exports = toArray;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/fbjs/lib/toArray.js\n ** module id = 14\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule invariant\n */\n\n'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar invariant = function (condition, format, a, b, c, d, e, f) {\n  if (process.env.NODE_ENV !== 'production') {\n    if (format === undefined) {\n      throw new Error('invariant requires an error message argument');\n    }\n  }\n\n  if (!condition) {\n    var error;\n    if (format === undefined) {\n      error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\n    } else {\n      var args = [a, b, c, d, e, f];\n      var argIndex = 0;\n      error = new Error('Invariant Violation: ' + format.replace(/%s/g, function () {\n        return args[argIndex++];\n      }));\n    }\n\n    error.framesToPop = 1; // we don't care about invariant's own frame\n    throw error;\n  }\n};\n\nmodule.exports = invariant;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/fbjs/lib/invariant.js\n ** module id = 15\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getMarkupWrap\n */\n\n/*eslint-disable fb-www/unsafe-html */\n\n'use strict';\n\nvar ExecutionEnvironment = require('./ExecutionEnvironment');\n\nvar invariant = require('./invariant');\n\n/**\n * Dummy container used to detect which wraps are necessary.\n */\nvar dummyNode = ExecutionEnvironment.canUseDOM ? document.createElement('div') : null;\n\n/**\n * Some browsers cannot use `innerHTML` to render certain elements standalone,\n * so we wrap them, render the wrapped nodes, then extract the desired node.\n *\n * In IE8, certain elements cannot render alone, so wrap all elements ('*').\n */\n\nvar shouldWrap = {};\n\nvar selectWrap = [1, '<select multiple=\"true\">', '</select>'];\nvar tableWrap = [1, '<table>', '</table>'];\nvar trWrap = [3, '<table><tbody><tr>', '</tr></tbody></table>'];\n\nvar svgWrap = [1, '<svg xmlns=\"http://www.w3.org/2000/svg\">', '</svg>'];\n\nvar markupWrap = {\n  '*': [1, '?<div>', '</div>'],\n\n  'area': [1, '<map>', '</map>'],\n  'col': [2, '<table><tbody></tbody><colgroup>', '</colgroup></table>'],\n  'legend': [1, '<fieldset>', '</fieldset>'],\n  'param': [1, '<object>', '</object>'],\n  'tr': [2, '<table><tbody>', '</tbody></table>'],\n\n  'optgroup': selectWrap,\n  'option': selectWrap,\n\n  'caption': tableWrap,\n  'colgroup': tableWrap,\n  'tbody': tableWrap,\n  'tfoot': tableWrap,\n  'thead': tableWrap,\n\n  'td': trWrap,\n  'th': trWrap\n};\n\n// Initialize the SVG elements since we know they'll always need to be wrapped\n// consistently. If they are created inside a <div> they will be initialized in\n// the wrong namespace (and will not display).\nvar svgElements = ['circle', 'clipPath', 'defs', 'ellipse', 'g', 'image', 'line', 'linearGradient', 'mask', 'path', 'pattern', 'polygon', 'polyline', 'radialGradient', 'rect', 'stop', 'text', 'tspan'];\nsvgElements.forEach(function (nodeName) {\n  markupWrap[nodeName] = svgWrap;\n  shouldWrap[nodeName] = true;\n});\n\n/**\n * Gets the markup wrap configuration for the supplied `nodeName`.\n *\n * NOTE: This lazily detects which wraps are necessary for the current browser.\n *\n * @param {string} nodeName Lowercase `nodeName`.\n * @return {?array} Markup wrap configuration, if applicable.\n */\nfunction getMarkupWrap(nodeName) {\n  !!!dummyNode ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Markup wrapping node not initialized') : invariant(false) : undefined;\n  if (!markupWrap.hasOwnProperty(nodeName)) {\n    nodeName = '*';\n  }\n  if (!shouldWrap.hasOwnProperty(nodeName)) {\n    if (nodeName === '*') {\n      dummyNode.innerHTML = '<link />';\n    } else {\n      dummyNode.innerHTML = '<' + nodeName + '></' + nodeName + '>';\n    }\n    shouldWrap[nodeName] = !dummyNode.firstChild;\n  }\n  return shouldWrap[nodeName] ? markupWrap[nodeName] : null;\n}\n\nmodule.exports = getMarkupWrap;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/fbjs/lib/getMarkupWrap.js\n ** module id = 16\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule emptyFunction\n */\n\n\"use strict\";\n\nfunction makeEmptyFunction(arg) {\n  return function () {\n    return arg;\n  };\n}\n\n/**\n * This function accepts and discards inputs; it has no side effects. This is\n * primarily useful idiomatically for overridable function endpoints which\n * always need to be callable, since JS lacks a null-call idiom ala Cocoa.\n */\nfunction emptyFunction() {}\n\nemptyFunction.thatReturns = makeEmptyFunction;\nemptyFunction.thatReturnsFalse = makeEmptyFunction(false);\nemptyFunction.thatReturnsTrue = makeEmptyFunction(true);\nemptyFunction.thatReturnsNull = makeEmptyFunction(null);\nemptyFunction.thatReturnsThis = function () {\n  return this;\n};\nemptyFunction.thatReturnsArgument = function (arg) {\n  return arg;\n};\n\nmodule.exports = emptyFunction;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/fbjs/lib/emptyFunction.js\n ** module id = 17\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactMultiChildUpdateTypes\n */\n\n'use strict';\n\nvar keyMirror = require('fbjs/lib/keyMirror');\n\n/**\n * When a component's children are updated, a series of update configuration\n * objects are created in order to batch and serialize the required changes.\n *\n * Enumerates all the possible types of update configurations.\n *\n * @internal\n */\nvar ReactMultiChildUpdateTypes = keyMirror({\n  INSERT_MARKUP: null,\n  MOVE_EXISTING: null,\n  REMOVE_NODE: null,\n  SET_MARKUP: null,\n  TEXT_CONTENT: null\n});\n\nmodule.exports = ReactMultiChildUpdateTypes;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactMultiChildUpdateTypes.js\n ** module id = 18\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule keyMirror\n * @typechecks static-only\n */\n\n'use strict';\n\nvar invariant = require('./invariant');\n\n/**\n * Constructs an enumeration with keys equal to their value.\n *\n * For example:\n *\n *   var COLORS = keyMirror({blue: null, red: null});\n *   var myColor = COLORS.blue;\n *   var isColorValid = !!COLORS[myColor];\n *\n * The last line could not be performed if the values of the generated enum were\n * not equal to their keys.\n *\n *   Input:  {key1: val1, key2: val2}\n *   Output: {key1: key1, key2: key2}\n *\n * @param {object} obj\n * @return {object}\n */\nvar keyMirror = function (obj) {\n  var ret = {};\n  var key;\n  !(obj instanceof Object && !Array.isArray(obj)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'keyMirror(...): Argument must be an object.') : invariant(false) : undefined;\n  for (key in obj) {\n    if (!obj.hasOwnProperty(key)) {\n      continue;\n    }\n    ret[key] = key;\n  }\n  return ret;\n};\n\nmodule.exports = keyMirror;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/fbjs/lib/keyMirror.js\n ** module id = 19\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactPerf\n * @typechecks static-only\n */\n\n'use strict';\n\n/**\n * ReactPerf is a general AOP system designed to measure performance. This\n * module only has the hooks: see ReactDefaultPerf for the analysis tool.\n */\nvar ReactPerf = {\n  /**\n   * Boolean to enable/disable measurement. Set to false by default to prevent\n   * accidental logging and perf loss.\n   */\n  enableMeasure: false,\n\n  /**\n   * Holds onto the measure function in use. By default, don't measure\n   * anything, but we'll override this if we inject a measure function.\n   */\n  storedMeasure: _noMeasure,\n\n  /**\n   * @param {object} object\n   * @param {string} objectName\n   * @param {object<string>} methodNames\n   */\n  measureMethods: function (object, objectName, methodNames) {\n    if (process.env.NODE_ENV !== 'production') {\n      for (var key in methodNames) {\n        if (!methodNames.hasOwnProperty(key)) {\n          continue;\n        }\n        object[key] = ReactPerf.measure(objectName, methodNames[key], object[key]);\n      }\n    }\n  },\n\n  /**\n   * Use this to wrap methods you want to measure. Zero overhead in production.\n   *\n   * @param {string} objName\n   * @param {string} fnName\n   * @param {function} func\n   * @return {function}\n   */\n  measure: function (objName, fnName, func) {\n    if (process.env.NODE_ENV !== 'production') {\n      var measuredFunc = null;\n      var wrapper = function () {\n        if (ReactPerf.enableMeasure) {\n          if (!measuredFunc) {\n            measuredFunc = ReactPerf.storedMeasure(objName, fnName, func);\n          }\n          return measuredFunc.apply(this, arguments);\n        }\n        return func.apply(this, arguments);\n      };\n      wrapper.displayName = objName + '_' + fnName;\n      return wrapper;\n    }\n    return func;\n  },\n\n  injection: {\n    /**\n     * @param {function} measure\n     */\n    injectMeasure: function (measure) {\n      ReactPerf.storedMeasure = measure;\n    }\n  }\n};\n\n/**\n * Simply passes through the measured function, without measuring it.\n *\n * @param {string} objName\n * @param {string} fnName\n * @param {function} func\n * @return {function}\n */\nfunction _noMeasure(objName, fnName, func) {\n  return func;\n}\n\nmodule.exports = ReactPerf;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactPerf.js\n ** module id = 20\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule setInnerHTML\n */\n\n/* globals MSApp */\n\n'use strict';\n\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\n\nvar WHITESPACE_TEST = /^[ \\r\\n\\t\\f]/;\nvar NONVISIBLE_TEST = /<(!--|link|noscript|meta|script|style)[ \\r\\n\\t\\f\\/>]/;\n\n/**\n * Set the innerHTML property of a node, ensuring that whitespace is preserved\n * even in IE8.\n *\n * @param {DOMElement} node\n * @param {string} html\n * @internal\n */\nvar setInnerHTML = function (node, html) {\n  node.innerHTML = html;\n};\n\n// Win8 apps: Allow all html to be inserted\nif (typeof MSApp !== 'undefined' && MSApp.execUnsafeLocalFunction) {\n  setInnerHTML = function (node, html) {\n    MSApp.execUnsafeLocalFunction(function () {\n      node.innerHTML = html;\n    });\n  };\n}\n\nif (ExecutionEnvironment.canUseDOM) {\n  // IE8: When updating a just created node with innerHTML only leading\n  // whitespace is removed. When updating an existing node with innerHTML\n  // whitespace in root TextNodes is also collapsed.\n  // @see quirksmode.org/bugreports/archives/2004/11/innerhtml_and_t.html\n\n  // Feature detection; only IE8 is known to behave improperly like this.\n  var testElement = document.createElement('div');\n  testElement.innerHTML = ' ';\n  if (testElement.innerHTML === '') {\n    setInnerHTML = function (node, html) {\n      // Magic theory: IE8 supposedly differentiates between added and updated\n      // nodes when processing innerHTML, innerHTML on updated nodes suffers\n      // from worse whitespace behavior. Re-adding a node like this triggers\n      // the initial and more favorable whitespace behavior.\n      // TODO: What to do on a detached node?\n      if (node.parentNode) {\n        node.parentNode.replaceChild(node, node);\n      }\n\n      // We also implement a workaround for non-visible tags disappearing into\n      // thin air on IE8, this only happens if there is no visible text\n      // in-front of the non-visible tags. Piggyback on the whitespace fix\n      // and simply check if any non-visible tags appear in the source.\n      if (WHITESPACE_TEST.test(html) || html[0] === '<' && NONVISIBLE_TEST.test(html)) {\n        // Recover leading whitespace by temporarily prepending any character.\n        // \\uFEFF has the potential advantage of being zero-width/invisible.\n        // UglifyJS drops U+FEFF chars when parsing, so use String.fromCharCode\n        // in hopes that this is preserved even if \"\\uFEFF\" is transformed to\n        // the actual Unicode character (by Babel, for example).\n        // https://github.com/mishoo/UglifyJS2/blob/v2.4.20/lib/parse.js#L216\n        node.innerHTML = String.fromCharCode(0xFEFF) + html;\n\n        // deleteData leaves an empty `TextNode` which offsets the index of all\n        // children. Definitely want to avoid this.\n        var textNode = node.firstChild;\n        if (textNode.data.length === 1) {\n          node.removeChild(textNode);\n        } else {\n          textNode.deleteData(0, 1);\n        }\n      } else {\n        node.innerHTML = html;\n      }\n    };\n  }\n}\n\nmodule.exports = setInnerHTML;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/setInnerHTML.js\n ** module id = 21\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule setTextContent\n */\n\n'use strict';\n\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\nvar escapeTextContentForBrowser = require('./escapeTextContentForBrowser');\nvar setInnerHTML = require('./setInnerHTML');\n\n/**\n * Set the textContent property of a node, ensuring that whitespace is preserved\n * even in IE8. innerText is a poor substitute for textContent and, among many\n * issues, inserts <br> instead of the literal newline chars. innerHTML behaves\n * as it should.\n *\n * @param {DOMElement} node\n * @param {string} text\n * @internal\n */\nvar setTextContent = function (node, text) {\n  node.textContent = text;\n};\n\nif (ExecutionEnvironment.canUseDOM) {\n  if (!('textContent' in document.documentElement)) {\n    setTextContent = function (node, text) {\n      setInnerHTML(node, escapeTextContentForBrowser(text));\n    };\n  }\n}\n\nmodule.exports = setTextContent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/setTextContent.js\n ** module id = 22\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule escapeTextContentForBrowser\n */\n\n'use strict';\n\nvar ESCAPE_LOOKUP = {\n  '&': '&amp;',\n  '>': '&gt;',\n  '<': '&lt;',\n  '\"': '&quot;',\n  '\\'': '&#x27;'\n};\n\nvar ESCAPE_REGEX = /[&><\"']/g;\n\nfunction escaper(match) {\n  return ESCAPE_LOOKUP[match];\n}\n\n/**\n * Escapes text to prevent scripting attacks.\n *\n * @param {*} text Text value to escape.\n * @return {string} An escaped string.\n */\nfunction escapeTextContentForBrowser(text) {\n  return ('' + text).replace(ESCAPE_REGEX, escaper);\n}\n\nmodule.exports = escapeTextContentForBrowser;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/escapeTextContentForBrowser.js\n ** module id = 23\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule DOMPropertyOperations\n * @typechecks static-only\n */\n\n'use strict';\n\nvar DOMProperty = require('./DOMProperty');\nvar ReactPerf = require('./ReactPerf');\n\nvar quoteAttributeValueForBrowser = require('./quoteAttributeValueForBrowser');\nvar warning = require('fbjs/lib/warning');\n\n// Simplified subset\nvar VALID_ATTRIBUTE_NAME_REGEX = /^[a-zA-Z_][\\w\\.\\-]*$/;\nvar illegalAttributeNameCache = {};\nvar validatedAttributeNameCache = {};\n\nfunction isAttributeNameSafe(attributeName) {\n  if (validatedAttributeNameCache.hasOwnProperty(attributeName)) {\n    return true;\n  }\n  if (illegalAttributeNameCache.hasOwnProperty(attributeName)) {\n    return false;\n  }\n  if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName)) {\n    validatedAttributeNameCache[attributeName] = true;\n    return true;\n  }\n  illegalAttributeNameCache[attributeName] = true;\n  process.env.NODE_ENV !== 'production' ? warning(false, 'Invalid attribute name: `%s`', attributeName) : undefined;\n  return false;\n}\n\nfunction shouldIgnoreValue(propertyInfo, value) {\n  return value == null || propertyInfo.hasBooleanValue && !value || propertyInfo.hasNumericValue && isNaN(value) || propertyInfo.hasPositiveNumericValue && value < 1 || propertyInfo.hasOverloadedBooleanValue && value === false;\n}\n\nif (process.env.NODE_ENV !== 'production') {\n  var reactProps = {\n    children: true,\n    dangerouslySetInnerHTML: true,\n    key: true,\n    ref: true\n  };\n  var warnedProperties = {};\n\n  var warnUnknownProperty = function (name) {\n    if (reactProps.hasOwnProperty(name) && reactProps[name] || warnedProperties.hasOwnProperty(name) && warnedProperties[name]) {\n      return;\n    }\n\n    warnedProperties[name] = true;\n    var lowerCasedName = name.toLowerCase();\n\n    // data-* attributes should be lowercase; suggest the lowercase version\n    var standardName = DOMProperty.isCustomAttribute(lowerCasedName) ? lowerCasedName : DOMProperty.getPossibleStandardName.hasOwnProperty(lowerCasedName) ? DOMProperty.getPossibleStandardName[lowerCasedName] : null;\n\n    // For now, only warn when we have a suggested correction. This prevents\n    // logging too much when using transferPropsTo.\n    process.env.NODE_ENV !== 'production' ? warning(standardName == null, 'Unknown DOM property %s. Did you mean %s?', name, standardName) : undefined;\n  };\n}\n\n/**\n * Operations for dealing with DOM properties.\n */\nvar DOMPropertyOperations = {\n\n  /**\n   * Creates markup for the ID property.\n   *\n   * @param {string} id Unescaped ID.\n   * @return {string} Markup string.\n   */\n  createMarkupForID: function (id) {\n    return DOMProperty.ID_ATTRIBUTE_NAME + '=' + quoteAttributeValueForBrowser(id);\n  },\n\n  setAttributeForID: function (node, id) {\n    node.setAttribute(DOMProperty.ID_ATTRIBUTE_NAME, id);\n  },\n\n  /**\n   * Creates markup for a property.\n   *\n   * @param {string} name\n   * @param {*} value\n   * @return {?string} Markup string, or null if the property was invalid.\n   */\n  createMarkupForProperty: function (name, value) {\n    var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null;\n    if (propertyInfo) {\n      if (shouldIgnoreValue(propertyInfo, value)) {\n        return '';\n      }\n      var attributeName = propertyInfo.attributeName;\n      if (propertyInfo.hasBooleanValue || propertyInfo.hasOverloadedBooleanValue && value === true) {\n        return attributeName + '=\"\"';\n      }\n      return attributeName + '=' + quoteAttributeValueForBrowser(value);\n    } else if (DOMProperty.isCustomAttribute(name)) {\n      if (value == null) {\n        return '';\n      }\n      return name + '=' + quoteAttributeValueForBrowser(value);\n    } else if (process.env.NODE_ENV !== 'production') {\n      warnUnknownProperty(name);\n    }\n    return null;\n  },\n\n  /**\n   * Creates markup for a custom property.\n   *\n   * @param {string} name\n   * @param {*} value\n   * @return {string} Markup string, or empty string if the property was invalid.\n   */\n  createMarkupForCustomAttribute: function (name, value) {\n    if (!isAttributeNameSafe(name) || value == null) {\n      return '';\n    }\n    return name + '=' + quoteAttributeValueForBrowser(value);\n  },\n\n  /**\n   * Sets the value for a property on a node.\n   *\n   * @param {DOMElement} node\n   * @param {string} name\n   * @param {*} value\n   */\n  setValueForProperty: function (node, name, value) {\n    var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null;\n    if (propertyInfo) {\n      var mutationMethod = propertyInfo.mutationMethod;\n      if (mutationMethod) {\n        mutationMethod(node, value);\n      } else if (shouldIgnoreValue(propertyInfo, value)) {\n        this.deleteValueForProperty(node, name);\n      } else if (propertyInfo.mustUseAttribute) {\n        var attributeName = propertyInfo.attributeName;\n        var namespace = propertyInfo.attributeNamespace;\n        // `setAttribute` with objects becomes only `[object]` in IE8/9,\n        // ('' + value) makes it output the correct toString()-value.\n        if (namespace) {\n          node.setAttributeNS(namespace, attributeName, '' + value);\n        } else if (propertyInfo.hasBooleanValue || propertyInfo.hasOverloadedBooleanValue && value === true) {\n          node.setAttribute(attributeName, '');\n        } else {\n          node.setAttribute(attributeName, '' + value);\n        }\n      } else {\n        var propName = propertyInfo.propertyName;\n        // Must explicitly cast values for HAS_SIDE_EFFECTS-properties to the\n        // property type before comparing; only `value` does and is string.\n        if (!propertyInfo.hasSideEffects || '' + node[propName] !== '' + value) {\n          // Contrary to `setAttribute`, object properties are properly\n          // `toString`ed by IE8/9.\n          node[propName] = value;\n        }\n      }\n    } else if (DOMProperty.isCustomAttribute(name)) {\n      DOMPropertyOperations.setValueForAttribute(node, name, value);\n    } else if (process.env.NODE_ENV !== 'production') {\n      warnUnknownProperty(name);\n    }\n  },\n\n  setValueForAttribute: function (node, name, value) {\n    if (!isAttributeNameSafe(name)) {\n      return;\n    }\n    if (value == null) {\n      node.removeAttribute(name);\n    } else {\n      node.setAttribute(name, '' + value);\n    }\n  },\n\n  /**\n   * Deletes the value for a property on a node.\n   *\n   * @param {DOMElement} node\n   * @param {string} name\n   */\n  deleteValueForProperty: function (node, name) {\n    var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null;\n    if (propertyInfo) {\n      var mutationMethod = propertyInfo.mutationMethod;\n      if (mutationMethod) {\n        mutationMethod(node, undefined);\n      } else if (propertyInfo.mustUseAttribute) {\n        node.removeAttribute(propertyInfo.attributeName);\n      } else {\n        var propName = propertyInfo.propertyName;\n        var defaultValue = DOMProperty.getDefaultValueForProperty(node.nodeName, propName);\n        if (!propertyInfo.hasSideEffects || '' + node[propName] !== defaultValue) {\n          node[propName] = defaultValue;\n        }\n      }\n    } else if (DOMProperty.isCustomAttribute(name)) {\n      node.removeAttribute(name);\n    } else if (process.env.NODE_ENV !== 'production') {\n      warnUnknownProperty(name);\n    }\n  }\n\n};\n\nReactPerf.measureMethods(DOMPropertyOperations, 'DOMPropertyOperations', {\n  setValueForProperty: 'setValueForProperty',\n  setValueForAttribute: 'setValueForAttribute',\n  deleteValueForProperty: 'deleteValueForProperty'\n});\n\nmodule.exports = DOMPropertyOperations;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/DOMPropertyOperations.js\n ** module id = 24\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule DOMProperty\n * @typechecks static-only\n */\n\n'use strict';\n\nvar invariant = require('fbjs/lib/invariant');\n\nfunction checkMask(value, bitmask) {\n  return (value & bitmask) === bitmask;\n}\n\nvar DOMPropertyInjection = {\n  /**\n   * Mapping from normalized, camelcased property names to a configuration that\n   * specifies how the associated DOM property should be accessed or rendered.\n   */\n  MUST_USE_ATTRIBUTE: 0x1,\n  MUST_USE_PROPERTY: 0x2,\n  HAS_SIDE_EFFECTS: 0x4,\n  HAS_BOOLEAN_VALUE: 0x8,\n  HAS_NUMERIC_VALUE: 0x10,\n  HAS_POSITIVE_NUMERIC_VALUE: 0x20 | 0x10,\n  HAS_OVERLOADED_BOOLEAN_VALUE: 0x40,\n\n  /**\n   * Inject some specialized knowledge about the DOM. This takes a config object\n   * with the following properties:\n   *\n   * isCustomAttribute: function that given an attribute name will return true\n   * if it can be inserted into the DOM verbatim. Useful for data-* or aria-*\n   * attributes where it's impossible to enumerate all of the possible\n   * attribute names,\n   *\n   * Properties: object mapping DOM property name to one of the\n   * DOMPropertyInjection constants or null. If your attribute isn't in here,\n   * it won't get written to the DOM.\n   *\n   * DOMAttributeNames: object mapping React attribute name to the DOM\n   * attribute name. Attribute names not specified use the **lowercase**\n   * normalized name.\n   *\n   * DOMAttributeNamespaces: object mapping React attribute name to the DOM\n   * attribute namespace URL. (Attribute names not specified use no namespace.)\n   *\n   * DOMPropertyNames: similar to DOMAttributeNames but for DOM properties.\n   * Property names not specified use the normalized name.\n   *\n   * DOMMutationMethods: Properties that require special mutation methods. If\n   * `value` is undefined, the mutation method should unset the property.\n   *\n   * @param {object} domPropertyConfig the config as described above.\n   */\n  injectDOMPropertyConfig: function (domPropertyConfig) {\n    var Injection = DOMPropertyInjection;\n    var Properties = domPropertyConfig.Properties || {};\n    var DOMAttributeNamespaces = domPropertyConfig.DOMAttributeNamespaces || {};\n    var DOMAttributeNames = domPropertyConfig.DOMAttributeNames || {};\n    var DOMPropertyNames = domPropertyConfig.DOMPropertyNames || {};\n    var DOMMutationMethods = domPropertyConfig.DOMMutationMethods || {};\n\n    if (domPropertyConfig.isCustomAttribute) {\n      DOMProperty._isCustomAttributeFunctions.push(domPropertyConfig.isCustomAttribute);\n    }\n\n    for (var propName in Properties) {\n      !!DOMProperty.properties.hasOwnProperty(propName) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'injectDOMPropertyConfig(...): You\\'re trying to inject DOM property ' + '\\'%s\\' which has already been injected. You may be accidentally ' + 'injecting the same DOM property config twice, or you may be ' + 'injecting two configs that have conflicting property names.', propName) : invariant(false) : undefined;\n\n      var lowerCased = propName.toLowerCase();\n      var propConfig = Properties[propName];\n\n      var propertyInfo = {\n        attributeName: lowerCased,\n        attributeNamespace: null,\n        propertyName: propName,\n        mutationMethod: null,\n\n        mustUseAttribute: checkMask(propConfig, Injection.MUST_USE_ATTRIBUTE),\n        mustUseProperty: checkMask(propConfig, Injection.MUST_USE_PROPERTY),\n        hasSideEffects: checkMask(propConfig, Injection.HAS_SIDE_EFFECTS),\n        hasBooleanValue: checkMask(propConfig, Injection.HAS_BOOLEAN_VALUE),\n        hasNumericValue: checkMask(propConfig, Injection.HAS_NUMERIC_VALUE),\n        hasPositiveNumericValue: checkMask(propConfig, Injection.HAS_POSITIVE_NUMERIC_VALUE),\n        hasOverloadedBooleanValue: checkMask(propConfig, Injection.HAS_OVERLOADED_BOOLEAN_VALUE)\n      };\n\n      !(!propertyInfo.mustUseAttribute || !propertyInfo.mustUseProperty) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'DOMProperty: Cannot require using both attribute and property: %s', propName) : invariant(false) : undefined;\n      !(propertyInfo.mustUseProperty || !propertyInfo.hasSideEffects) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'DOMProperty: Properties that have side effects must use property: %s', propName) : invariant(false) : undefined;\n      !(propertyInfo.hasBooleanValue + propertyInfo.hasNumericValue + propertyInfo.hasOverloadedBooleanValue <= 1) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'DOMProperty: Value can be one of boolean, overloaded boolean, or ' + 'numeric value, but not a combination: %s', propName) : invariant(false) : undefined;\n\n      if (process.env.NODE_ENV !== 'production') {\n        DOMProperty.getPossibleStandardName[lowerCased] = propName;\n      }\n\n      if (DOMAttributeNames.hasOwnProperty(propName)) {\n        var attributeName = DOMAttributeNames[propName];\n        propertyInfo.attributeName = attributeName;\n        if (process.env.NODE_ENV !== 'production') {\n          DOMProperty.getPossibleStandardName[attributeName] = propName;\n        }\n      }\n\n      if (DOMAttributeNamespaces.hasOwnProperty(propName)) {\n        propertyInfo.attributeNamespace = DOMAttributeNamespaces[propName];\n      }\n\n      if (DOMPropertyNames.hasOwnProperty(propName)) {\n        propertyInfo.propertyName = DOMPropertyNames[propName];\n      }\n\n      if (DOMMutationMethods.hasOwnProperty(propName)) {\n        propertyInfo.mutationMethod = DOMMutationMethods[propName];\n      }\n\n      DOMProperty.properties[propName] = propertyInfo;\n    }\n  }\n};\nvar defaultValueCache = {};\n\n/**\n * DOMProperty exports lookup objects that can be used like functions:\n *\n *   > DOMProperty.isValid['id']\n *   true\n *   > DOMProperty.isValid['foobar']\n *   undefined\n *\n * Although this may be confusing, it performs better in general.\n *\n * @see http://jsperf.com/key-exists\n * @see http://jsperf.com/key-missing\n */\nvar DOMProperty = {\n\n  ID_ATTRIBUTE_NAME: 'data-reactid',\n\n  /**\n   * Map from property \"standard name\" to an object with info about how to set\n   * the property in the DOM. Each object contains:\n   *\n   * attributeName:\n   *   Used when rendering markup or with `*Attribute()`.\n   * attributeNamespace\n   * propertyName:\n   *   Used on DOM node instances. (This includes properties that mutate due to\n   *   external factors.)\n   * mutationMethod:\n   *   If non-null, used instead of the property or `setAttribute()` after\n   *   initial render.\n   * mustUseAttribute:\n   *   Whether the property must be accessed and mutated using `*Attribute()`.\n   *   (This includes anything that fails `<propName> in <element>`.)\n   * mustUseProperty:\n   *   Whether the property must be accessed and mutated as an object property.\n   * hasSideEffects:\n   *   Whether or not setting a value causes side effects such as triggering\n   *   resources to be loaded or text selection changes. If true, we read from\n   *   the DOM before updating to ensure that the value is only set if it has\n   *   changed.\n   * hasBooleanValue:\n   *   Whether the property should be removed when set to a falsey value.\n   * hasNumericValue:\n   *   Whether the property must be numeric or parse as a numeric and should be\n   *   removed when set to a falsey value.\n   * hasPositiveNumericValue:\n   *   Whether the property must be positive numeric or parse as a positive\n   *   numeric and should be removed when set to a falsey value.\n   * hasOverloadedBooleanValue:\n   *   Whether the property can be used as a flag as well as with a value.\n   *   Removed when strictly equal to false; present without a value when\n   *   strictly equal to true; present with a value otherwise.\n   */\n  properties: {},\n\n  /**\n   * Mapping from lowercase property names to the properly cased version, used\n   * to warn in the case of missing properties. Available only in __DEV__.\n   * @type {Object}\n   */\n  getPossibleStandardName: process.env.NODE_ENV !== 'production' ? {} : null,\n\n  /**\n   * All of the isCustomAttribute() functions that have been injected.\n   */\n  _isCustomAttributeFunctions: [],\n\n  /**\n   * Checks whether a property name is a custom attribute.\n   * @method\n   */\n  isCustomAttribute: function (attributeName) {\n    for (var i = 0; i < DOMProperty._isCustomAttributeFunctions.length; i++) {\n      var isCustomAttributeFn = DOMProperty._isCustomAttributeFunctions[i];\n      if (isCustomAttributeFn(attributeName)) {\n        return true;\n      }\n    }\n    return false;\n  },\n\n  /**\n   * Returns the default property value for a DOM property (i.e., not an\n   * attribute). Most default values are '' or false, but not all. Worse yet,\n   * some (in particular, `type`) vary depending on the type of element.\n   *\n   * TODO: Is it better to grab all the possible properties when creating an\n   * element to avoid having to create the same element twice?\n   */\n  getDefaultValueForProperty: function (nodeName, prop) {\n    var nodeDefaults = defaultValueCache[nodeName];\n    var testElement;\n    if (!nodeDefaults) {\n      defaultValueCache[nodeName] = nodeDefaults = {};\n    }\n    if (!(prop in nodeDefaults)) {\n      testElement = document.createElement(nodeName);\n      nodeDefaults[prop] = testElement[prop];\n    }\n    return nodeDefaults[prop];\n  },\n\n  injection: DOMPropertyInjection\n};\n\nmodule.exports = DOMProperty;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/DOMProperty.js\n ** module id = 25\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule quoteAttributeValueForBrowser\n */\n\n'use strict';\n\nvar escapeTextContentForBrowser = require('./escapeTextContentForBrowser');\n\n/**\n * Escapes attribute value to prevent scripting attacks.\n *\n * @param {*} value Value to escape.\n * @return {string} An escaped string.\n */\nfunction quoteAttributeValueForBrowser(value) {\n  return '\"' + escapeTextContentForBrowser(value) + '\"';\n}\n\nmodule.exports = quoteAttributeValueForBrowser;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/quoteAttributeValueForBrowser.js\n ** module id = 26\n ** module chunks = 4\n **/","/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule warning\n */\n\n'use strict';\n\nvar emptyFunction = require('./emptyFunction');\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar warning = emptyFunction;\n\nif (process.env.NODE_ENV !== 'production') {\n  warning = function (condition, format) {\n    for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n      args[_key - 2] = arguments[_key];\n    }\n\n    if (format === undefined) {\n      throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument');\n    }\n\n    if (format.indexOf('Failed Composite propType: ') === 0) {\n      return; // Ignore CompositeComponent proptype check.\n    }\n\n    if (!condition) {\n      var argIndex = 0;\n      var message = 'Warning: ' + format.replace(/%s/g, function () {\n        return args[argIndex++];\n      });\n      if (typeof console !== 'undefined') {\n        console.error(message);\n      }\n      try {\n        // --- Welcome to debugging React ---\n        // This error was thrown as a convenience so that you can use this stack\n        // to find the callsite that caused this warning to fire.\n        throw new Error(message);\n      } catch (x) {}\n    }\n  };\n}\n\nmodule.exports = warning;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/fbjs/lib/warning.js\n ** module id = 27\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactComponentBrowserEnvironment\n */\n\n'use strict';\n\nvar ReactDOMIDOperations = require('./ReactDOMIDOperations');\nvar ReactMount = require('./ReactMount');\n\n/**\n * Abstracts away all functionality of the reconciler that requires knowledge of\n * the browser context. TODO: These callers should be refactored to avoid the\n * need for this injection.\n */\nvar ReactComponentBrowserEnvironment = {\n\n  processChildrenUpdates: ReactDOMIDOperations.dangerouslyProcessChildrenUpdates,\n\n  replaceNodeWithMarkupByID: ReactDOMIDOperations.dangerouslyReplaceNodeWithMarkupByID,\n\n  /**\n   * If a particular environment requires that some resources be cleaned up,\n   * specify this in the injected Mixin. In the DOM, we would likely want to\n   * purge any cached node ID lookups.\n   *\n   * @private\n   */\n  unmountIDFromEnvironment: function (rootNodeID) {\n    ReactMount.purgeID(rootNodeID);\n  }\n\n};\n\nmodule.exports = ReactComponentBrowserEnvironment;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactComponentBrowserEnvironment.js\n ** module id = 28\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMIDOperations\n * @typechecks static-only\n */\n\n'use strict';\n\nvar DOMChildrenOperations = require('./DOMChildrenOperations');\nvar DOMPropertyOperations = require('./DOMPropertyOperations');\nvar ReactMount = require('./ReactMount');\nvar ReactPerf = require('./ReactPerf');\n\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * Errors for properties that should not be updated with `updatePropertyByID()`.\n *\n * @type {object}\n * @private\n */\nvar INVALID_PROPERTY_ERRORS = {\n  dangerouslySetInnerHTML: '`dangerouslySetInnerHTML` must be set using `updateInnerHTMLByID()`.',\n  style: '`style` must be set using `updateStylesByID()`.'\n};\n\n/**\n * Operations used to process updates to DOM nodes.\n */\nvar ReactDOMIDOperations = {\n\n  /**\n   * Updates a DOM node with new property values. This should only be used to\n   * update DOM properties in `DOMProperty`.\n   *\n   * @param {string} id ID of the node to update.\n   * @param {string} name A valid property name, see `DOMProperty`.\n   * @param {*} value New value of the property.\n   * @internal\n   */\n  updatePropertyByID: function (id, name, value) {\n    var node = ReactMount.getNode(id);\n    !!INVALID_PROPERTY_ERRORS.hasOwnProperty(name) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'updatePropertyByID(...): %s', INVALID_PROPERTY_ERRORS[name]) : invariant(false) : undefined;\n\n    // If we're updating to null or undefined, we should remove the property\n    // from the DOM node instead of inadvertantly setting to a string. This\n    // brings us in line with the same behavior we have on initial render.\n    if (value != null) {\n      DOMPropertyOperations.setValueForProperty(node, name, value);\n    } else {\n      DOMPropertyOperations.deleteValueForProperty(node, name);\n    }\n  },\n\n  /**\n   * Replaces a DOM node that exists in the document with markup.\n   *\n   * @param {string} id ID of child to be replaced.\n   * @param {string} markup Dangerous markup to inject in place of child.\n   * @internal\n   * @see {Danger.dangerouslyReplaceNodeWithMarkup}\n   */\n  dangerouslyReplaceNodeWithMarkupByID: function (id, markup) {\n    var node = ReactMount.getNode(id);\n    DOMChildrenOperations.dangerouslyReplaceNodeWithMarkup(node, markup);\n  },\n\n  /**\n   * Updates a component's children by processing a series of updates.\n   *\n   * @param {array<object>} updates List of update configurations.\n   * @param {array<string>} markup List of markup strings.\n   * @internal\n   */\n  dangerouslyProcessChildrenUpdates: function (updates, markup) {\n    for (var i = 0; i < updates.length; i++) {\n      updates[i].parentNode = ReactMount.getNode(updates[i].parentID);\n    }\n    DOMChildrenOperations.processUpdates(updates, markup);\n  }\n};\n\nReactPerf.measureMethods(ReactDOMIDOperations, 'ReactDOMIDOperations', {\n  dangerouslyReplaceNodeWithMarkupByID: 'dangerouslyReplaceNodeWithMarkupByID',\n  dangerouslyProcessChildrenUpdates: 'dangerouslyProcessChildrenUpdates'\n});\n\nmodule.exports = ReactDOMIDOperations;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMIDOperations.js\n ** module id = 29\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactMount\n */\n\n'use strict';\n\nvar DOMProperty = require('./DOMProperty');\nvar ReactBrowserEventEmitter = require('./ReactBrowserEventEmitter');\nvar ReactCurrentOwner = require('./ReactCurrentOwner');\nvar ReactDOMFeatureFlags = require('./ReactDOMFeatureFlags');\nvar ReactElement = require('./ReactElement');\nvar ReactEmptyComponentRegistry = require('./ReactEmptyComponentRegistry');\nvar ReactInstanceHandles = require('./ReactInstanceHandles');\nvar ReactInstanceMap = require('./ReactInstanceMap');\nvar ReactMarkupChecksum = require('./ReactMarkupChecksum');\nvar ReactPerf = require('./ReactPerf');\nvar ReactReconciler = require('./ReactReconciler');\nvar ReactUpdateQueue = require('./ReactUpdateQueue');\nvar ReactUpdates = require('./ReactUpdates');\n\nvar assign = require('./Object.assign');\nvar emptyObject = require('fbjs/lib/emptyObject');\nvar containsNode = require('fbjs/lib/containsNode');\nvar instantiateReactComponent = require('./instantiateReactComponent');\nvar invariant = require('fbjs/lib/invariant');\nvar setInnerHTML = require('./setInnerHTML');\nvar shouldUpdateReactComponent = require('./shouldUpdateReactComponent');\nvar validateDOMNesting = require('./validateDOMNesting');\nvar warning = require('fbjs/lib/warning');\n\nvar ATTR_NAME = DOMProperty.ID_ATTRIBUTE_NAME;\nvar nodeCache = {};\n\nvar ELEMENT_NODE_TYPE = 1;\nvar DOC_NODE_TYPE = 9;\nvar DOCUMENT_FRAGMENT_NODE_TYPE = 11;\n\nvar ownerDocumentContextKey = '__ReactMount_ownerDocument$' + Math.random().toString(36).slice(2);\n\n/** Mapping from reactRootID to React component instance. */\nvar instancesByReactRootID = {};\n\n/** Mapping from reactRootID to `container` nodes. */\nvar containersByReactRootID = {};\n\nif (process.env.NODE_ENV !== 'production') {\n  /** __DEV__-only mapping from reactRootID to root elements. */\n  var rootElementsByReactRootID = {};\n}\n\n// Used to store breadth-first search state in findComponentRoot.\nvar findComponentRootReusableArray = [];\n\n/**\n * Finds the index of the first character\n * that's not common between the two given strings.\n *\n * @return {number} the index of the character where the strings diverge\n */\nfunction firstDifferenceIndex(string1, string2) {\n  var minLen = Math.min(string1.length, string2.length);\n  for (var i = 0; i < minLen; i++) {\n    if (string1.charAt(i) !== string2.charAt(i)) {\n      return i;\n    }\n  }\n  return string1.length === string2.length ? -1 : minLen;\n}\n\n/**\n * @param {DOMElement|DOMDocument} container DOM element that may contain\n * a React component\n * @return {?*} DOM element that may have the reactRoot ID, or null.\n */\nfunction getReactRootElementInContainer(container) {\n  if (!container) {\n    return null;\n  }\n\n  if (container.nodeType === DOC_NODE_TYPE) {\n    return container.documentElement;\n  } else {\n    return container.firstChild;\n  }\n}\n\n/**\n * @param {DOMElement} container DOM element that may contain a React component.\n * @return {?string} A \"reactRoot\" ID, if a React component is rendered.\n */\nfunction getReactRootID(container) {\n  var rootElement = getReactRootElementInContainer(container);\n  return rootElement && ReactMount.getID(rootElement);\n}\n\n/**\n * Accessing node[ATTR_NAME] or calling getAttribute(ATTR_NAME) on a form\n * element can return its control whose name or ID equals ATTR_NAME. All\n * DOM nodes support `getAttributeNode` but this can also get called on\n * other objects so just return '' if we're given something other than a\n * DOM node (such as window).\n *\n * @param {?DOMElement|DOMWindow|DOMDocument|DOMTextNode} node DOM node.\n * @return {string} ID of the supplied `domNode`.\n */\nfunction getID(node) {\n  var id = internalGetID(node);\n  if (id) {\n    if (nodeCache.hasOwnProperty(id)) {\n      var cached = nodeCache[id];\n      if (cached !== node) {\n        !!isValid(cached, id) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactMount: Two valid but unequal nodes with the same `%s`: %s', ATTR_NAME, id) : invariant(false) : undefined;\n\n        nodeCache[id] = node;\n      }\n    } else {\n      nodeCache[id] = node;\n    }\n  }\n\n  return id;\n}\n\nfunction internalGetID(node) {\n  // If node is something like a window, document, or text node, none of\n  // which support attributes or a .getAttribute method, gracefully return\n  // the empty string, as if the attribute were missing.\n  return node && node.getAttribute && node.getAttribute(ATTR_NAME) || '';\n}\n\n/**\n * Sets the React-specific ID of the given node.\n *\n * @param {DOMElement} node The DOM node whose ID will be set.\n * @param {string} id The value of the ID attribute.\n */\nfunction setID(node, id) {\n  var oldID = internalGetID(node);\n  if (oldID !== id) {\n    delete nodeCache[oldID];\n  }\n  node.setAttribute(ATTR_NAME, id);\n  nodeCache[id] = node;\n}\n\n/**\n * Finds the node with the supplied React-generated DOM ID.\n *\n * @param {string} id A React-generated DOM ID.\n * @return {DOMElement} DOM node with the suppled `id`.\n * @internal\n */\nfunction getNode(id) {\n  if (!nodeCache.hasOwnProperty(id) || !isValid(nodeCache[id], id)) {\n    nodeCache[id] = ReactMount.findReactNodeByID(id);\n  }\n  return nodeCache[id];\n}\n\n/**\n * Finds the node with the supplied public React instance.\n *\n * @param {*} instance A public React instance.\n * @return {?DOMElement} DOM node with the suppled `id`.\n * @internal\n */\nfunction getNodeFromInstance(instance) {\n  var id = ReactInstanceMap.get(instance)._rootNodeID;\n  if (ReactEmptyComponentRegistry.isNullComponentID(id)) {\n    return null;\n  }\n  if (!nodeCache.hasOwnProperty(id) || !isValid(nodeCache[id], id)) {\n    nodeCache[id] = ReactMount.findReactNodeByID(id);\n  }\n  return nodeCache[id];\n}\n\n/**\n * A node is \"valid\" if it is contained by a currently mounted container.\n *\n * This means that the node does not have to be contained by a document in\n * order to be considered valid.\n *\n * @param {?DOMElement} node The candidate DOM node.\n * @param {string} id The expected ID of the node.\n * @return {boolean} Whether the node is contained by a mounted container.\n */\nfunction isValid(node, id) {\n  if (node) {\n    !(internalGetID(node) === id) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactMount: Unexpected modification of `%s`', ATTR_NAME) : invariant(false) : undefined;\n\n    var container = ReactMount.findReactContainerForID(id);\n    if (container && containsNode(container, node)) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\n/**\n * Causes the cache to forget about one React-specific ID.\n *\n * @param {string} id The ID to forget.\n */\nfunction purgeID(id) {\n  delete nodeCache[id];\n}\n\nvar deepestNodeSoFar = null;\nfunction findDeepestCachedAncestorImpl(ancestorID) {\n  var ancestor = nodeCache[ancestorID];\n  if (ancestor && isValid(ancestor, ancestorID)) {\n    deepestNodeSoFar = ancestor;\n  } else {\n    // This node isn't populated in the cache, so presumably none of its\n    // descendants are. Break out of the loop.\n    return false;\n  }\n}\n\n/**\n * Return the deepest cached node whose ID is a prefix of `targetID`.\n */\nfunction findDeepestCachedAncestor(targetID) {\n  deepestNodeSoFar = null;\n  ReactInstanceHandles.traverseAncestors(targetID, findDeepestCachedAncestorImpl);\n\n  var foundNode = deepestNodeSoFar;\n  deepestNodeSoFar = null;\n  return foundNode;\n}\n\n/**\n * Mounts this component and inserts it into the DOM.\n *\n * @param {ReactComponent} componentInstance The instance to mount.\n * @param {string} rootID DOM ID of the root node.\n * @param {DOMElement} container DOM element to mount into.\n * @param {ReactReconcileTransaction} transaction\n * @param {boolean} shouldReuseMarkup If true, do not insert markup\n */\nfunction mountComponentIntoNode(componentInstance, rootID, container, transaction, shouldReuseMarkup, context) {\n  if (ReactDOMFeatureFlags.useCreateElement) {\n    context = assign({}, context);\n    if (container.nodeType === DOC_NODE_TYPE) {\n      context[ownerDocumentContextKey] = container;\n    } else {\n      context[ownerDocumentContextKey] = container.ownerDocument;\n    }\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    if (context === emptyObject) {\n      context = {};\n    }\n    var tag = container.nodeName.toLowerCase();\n    context[validateDOMNesting.ancestorInfoContextKey] = validateDOMNesting.updatedAncestorInfo(null, tag, null);\n  }\n  var markup = ReactReconciler.mountComponent(componentInstance, rootID, transaction, context);\n  componentInstance._renderedComponent._topLevelWrapper = componentInstance;\n  ReactMount._mountImageIntoNode(markup, container, shouldReuseMarkup, transaction);\n}\n\n/**\n * Batched mount.\n *\n * @param {ReactComponent} componentInstance The instance to mount.\n * @param {string} rootID DOM ID of the root node.\n * @param {DOMElement} container DOM element to mount into.\n * @param {boolean} shouldReuseMarkup If true, do not insert markup\n */\nfunction batchedMountComponentIntoNode(componentInstance, rootID, container, shouldReuseMarkup, context) {\n  var transaction = ReactUpdates.ReactReconcileTransaction.getPooled(\n  /* forceHTML */shouldReuseMarkup);\n  transaction.perform(mountComponentIntoNode, null, componentInstance, rootID, container, transaction, shouldReuseMarkup, context);\n  ReactUpdates.ReactReconcileTransaction.release(transaction);\n}\n\n/**\n * Unmounts a component and removes it from the DOM.\n *\n * @param {ReactComponent} instance React component instance.\n * @param {DOMElement} container DOM element to unmount from.\n * @final\n * @internal\n * @see {ReactMount.unmountComponentAtNode}\n */\nfunction unmountComponentFromNode(instance, container) {\n  ReactReconciler.unmountComponent(instance);\n\n  if (container.nodeType === DOC_NODE_TYPE) {\n    container = container.documentElement;\n  }\n\n  // http://jsperf.com/emptying-a-node\n  while (container.lastChild) {\n    container.removeChild(container.lastChild);\n  }\n}\n\n/**\n * True if the supplied DOM node has a direct React-rendered child that is\n * not a React root element. Useful for warning in `render`,\n * `unmountComponentAtNode`, etc.\n *\n * @param {?DOMElement} node The candidate DOM node.\n * @return {boolean} True if the DOM element contains a direct child that was\n * rendered by React but is not a root element.\n * @internal\n */\nfunction hasNonRootReactChild(node) {\n  var reactRootID = getReactRootID(node);\n  return reactRootID ? reactRootID !== ReactInstanceHandles.getReactRootIDFromNodeID(reactRootID) : false;\n}\n\n/**\n * Returns the first (deepest) ancestor of a node which is rendered by this copy\n * of React.\n */\nfunction findFirstReactDOMImpl(node) {\n  // This node might be from another React instance, so we make sure not to\n  // examine the node cache here\n  for (; node && node.parentNode !== node; node = node.parentNode) {\n    if (node.nodeType !== 1) {\n      // Not a DOMElement, therefore not a React component\n      continue;\n    }\n    var nodeID = internalGetID(node);\n    if (!nodeID) {\n      continue;\n    }\n    var reactRootID = ReactInstanceHandles.getReactRootIDFromNodeID(nodeID);\n\n    // If containersByReactRootID contains the container we find by crawling up\n    // the tree, we know that this instance of React rendered the node.\n    // nb. isValid's strategy (with containsNode) does not work because render\n    // trees may be nested and we don't want a false positive in that case.\n    var current = node;\n    var lastID;\n    do {\n      lastID = internalGetID(current);\n      current = current.parentNode;\n      if (current == null) {\n        // The passed-in node has been detached from the container it was\n        // originally rendered into.\n        return null;\n      }\n    } while (lastID !== reactRootID);\n\n    if (current === containersByReactRootID[reactRootID]) {\n      return node;\n    }\n  }\n  return null;\n}\n\n/**\n * Temporary (?) hack so that we can store all top-level pending updates on\n * composites instead of having to worry about different types of components\n * here.\n */\nvar TopLevelWrapper = function () {};\nTopLevelWrapper.prototype.isReactComponent = {};\nif (process.env.NODE_ENV !== 'production') {\n  TopLevelWrapper.displayName = 'TopLevelWrapper';\n}\nTopLevelWrapper.prototype.render = function () {\n  // this.props is actually a ReactElement\n  return this.props;\n};\n\n/**\n * Mounting is the process of initializing a React component by creating its\n * representative DOM elements and inserting them into a supplied `container`.\n * Any prior content inside `container` is destroyed in the process.\n *\n *   ReactMount.render(\n *     component,\n *     document.getElementById('container')\n *   );\n *\n *   <div id=\"container\">                   <-- Supplied `container`.\n *     <div data-reactid=\".3\">              <-- Rendered reactRoot of React\n *       // ...                                 component.\n *     </div>\n *   </div>\n *\n * Inside of `container`, the first element rendered is the \"reactRoot\".\n */\nvar ReactMount = {\n\n  TopLevelWrapper: TopLevelWrapper,\n\n  /** Exposed for debugging purposes **/\n  _instancesByReactRootID: instancesByReactRootID,\n\n  /**\n   * This is a hook provided to support rendering React components while\n   * ensuring that the apparent scroll position of its `container` does not\n   * change.\n   *\n   * @param {DOMElement} container The `container` being rendered into.\n   * @param {function} renderCallback This must be called once to do the render.\n   */\n  scrollMonitor: function (container, renderCallback) {\n    renderCallback();\n  },\n\n  /**\n   * Take a component that's already mounted into the DOM and replace its props\n   * @param {ReactComponent} prevComponent component instance already in the DOM\n   * @param {ReactElement} nextElement component instance to render\n   * @param {DOMElement} container container to render into\n   * @param {?function} callback function triggered on completion\n   */\n  _updateRootComponent: function (prevComponent, nextElement, container, callback) {\n    ReactMount.scrollMonitor(container, function () {\n      ReactUpdateQueue.enqueueElementInternal(prevComponent, nextElement);\n      if (callback) {\n        ReactUpdateQueue.enqueueCallbackInternal(prevComponent, callback);\n      }\n    });\n\n    if (process.env.NODE_ENV !== 'production') {\n      // Record the root element in case it later gets transplanted.\n      rootElementsByReactRootID[getReactRootID(container)] = getReactRootElementInContainer(container);\n    }\n\n    return prevComponent;\n  },\n\n  /**\n   * Register a component into the instance map and starts scroll value\n   * monitoring\n   * @param {ReactComponent} nextComponent component instance to render\n   * @param {DOMElement} container container to render into\n   * @return {string} reactRoot ID prefix\n   */\n  _registerComponent: function (nextComponent, container) {\n    !(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE || container.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE)) ? process.env.NODE_ENV !== 'production' ? invariant(false, '_registerComponent(...): Target container is not a DOM element.') : invariant(false) : undefined;\n\n    ReactBrowserEventEmitter.ensureScrollValueMonitoring();\n\n    var reactRootID = ReactMount.registerContainer(container);\n    instancesByReactRootID[reactRootID] = nextComponent;\n    return reactRootID;\n  },\n\n  /**\n   * Render a new component into the DOM.\n   * @param {ReactElement} nextElement element to render\n   * @param {DOMElement} container container to render into\n   * @param {boolean} shouldReuseMarkup if we should skip the markup insertion\n   * @return {ReactComponent} nextComponent\n   */\n  _renderNewRootComponent: function (nextElement, container, shouldReuseMarkup, context) {\n    // Various parts of our code (such as ReactCompositeComponent's\n    // _renderValidatedComponent) assume that calls to render aren't nested;\n    // verify that that's the case.\n    process.env.NODE_ENV !== 'production' ? warning(ReactCurrentOwner.current == null, '_renderNewRootComponent(): Render methods should be a pure function ' + 'of props and state; triggering nested component updates from ' + 'render is not allowed. If necessary, trigger nested updates in ' + 'componentDidUpdate. Check the render method of %s.', ReactCurrentOwner.current && ReactCurrentOwner.current.getName() || 'ReactCompositeComponent') : undefined;\n\n    var componentInstance = instantiateReactComponent(nextElement, null);\n    var reactRootID = ReactMount._registerComponent(componentInstance, container);\n\n    // The initial render is synchronous but any updates that happen during\n    // rendering, in componentWillMount or componentDidMount, will be batched\n    // according to the current batching strategy.\n\n    ReactUpdates.batchedUpdates(batchedMountComponentIntoNode, componentInstance, reactRootID, container, shouldReuseMarkup, context);\n\n    if (process.env.NODE_ENV !== 'production') {\n      // Record the root element in case it later gets transplanted.\n      rootElementsByReactRootID[reactRootID] = getReactRootElementInContainer(container);\n    }\n\n    return componentInstance;\n  },\n\n  /**\n   * Renders a React component into the DOM in the supplied `container`.\n   *\n   * If the React component was previously rendered into `container`, this will\n   * perform an update on it and only mutate the DOM as necessary to reflect the\n   * latest React component.\n   *\n   * @param {ReactComponent} parentComponent The conceptual parent of this render tree.\n   * @param {ReactElement} nextElement Component element to render.\n   * @param {DOMElement} container DOM element to render into.\n   * @param {?function} callback function triggered on completion\n   * @return {ReactComponent} Component instance rendered in `container`.\n   */\n  renderSubtreeIntoContainer: function (parentComponent, nextElement, container, callback) {\n    !(parentComponent != null && parentComponent._reactInternalInstance != null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'parentComponent must be a valid React Component') : invariant(false) : undefined;\n    return ReactMount._renderSubtreeIntoContainer(parentComponent, nextElement, container, callback);\n  },\n\n  _renderSubtreeIntoContainer: function (parentComponent, nextElement, container, callback) {\n    !ReactElement.isValidElement(nextElement) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactDOM.render(): Invalid component element.%s', typeof nextElement === 'string' ? ' Instead of passing an element string, make sure to instantiate ' + 'it by passing it to React.createElement.' : typeof nextElement === 'function' ? ' Instead of passing a component class, make sure to instantiate ' + 'it by passing it to React.createElement.' :\n    // Check if it quacks like an element\n    nextElement != null && nextElement.props !== undefined ? ' This may be caused by unintentionally loading two independent ' + 'copies of React.' : '') : invariant(false) : undefined;\n\n    process.env.NODE_ENV !== 'production' ? warning(!container || !container.tagName || container.tagName.toUpperCase() !== 'BODY', 'render(): Rendering components directly into document.body is ' + 'discouraged, since its children are often manipulated by third-party ' + 'scripts and browser extensions. This may lead to subtle ' + 'reconciliation issues. Try rendering into a container element created ' + 'for your app.') : undefined;\n\n    var nextWrappedElement = new ReactElement(TopLevelWrapper, null, null, null, null, null, nextElement);\n\n    var prevComponent = instancesByReactRootID[getReactRootID(container)];\n\n    if (prevComponent) {\n      var prevWrappedElement = prevComponent._currentElement;\n      var prevElement = prevWrappedElement.props;\n      if (shouldUpdateReactComponent(prevElement, nextElement)) {\n        var publicInst = prevComponent._renderedComponent.getPublicInstance();\n        var updatedCallback = callback && function () {\n          callback.call(publicInst);\n        };\n        ReactMount._updateRootComponent(prevComponent, nextWrappedElement, container, updatedCallback);\n        return publicInst;\n      } else {\n        ReactMount.unmountComponentAtNode(container);\n      }\n    }\n\n    var reactRootElement = getReactRootElementInContainer(container);\n    var containerHasReactMarkup = reactRootElement && !!internalGetID(reactRootElement);\n    var containerHasNonRootReactChild = hasNonRootReactChild(container);\n\n    if (process.env.NODE_ENV !== 'production') {\n      process.env.NODE_ENV !== 'production' ? warning(!containerHasNonRootReactChild, 'render(...): Replacing React-rendered children with a new root ' + 'component. If you intended to update the children of this node, ' + 'you should instead have the existing children update their state ' + 'and render the new components instead of calling ReactDOM.render.') : undefined;\n\n      if (!containerHasReactMarkup || reactRootElement.nextSibling) {\n        var rootElementSibling = reactRootElement;\n        while (rootElementSibling) {\n          if (internalGetID(rootElementSibling)) {\n            process.env.NODE_ENV !== 'production' ? warning(false, 'render(): Target node has markup rendered by React, but there ' + 'are unrelated nodes as well. This is most commonly caused by ' + 'white-space inserted around server-rendered markup.') : undefined;\n            break;\n          }\n          rootElementSibling = rootElementSibling.nextSibling;\n        }\n      }\n    }\n\n    var shouldReuseMarkup = containerHasReactMarkup && !prevComponent && !containerHasNonRootReactChild;\n    var component = ReactMount._renderNewRootComponent(nextWrappedElement, container, shouldReuseMarkup, parentComponent != null ? parentComponent._reactInternalInstance._processChildContext(parentComponent._reactInternalInstance._context) : emptyObject)._renderedComponent.getPublicInstance();\n    if (callback) {\n      callback.call(component);\n    }\n    return component;\n  },\n\n  /**\n   * Renders a React component into the DOM in the supplied `container`.\n   *\n   * If the React component was previously rendered into `container`, this will\n   * perform an update on it and only mutate the DOM as necessary to reflect the\n   * latest React component.\n   *\n   * @param {ReactElement} nextElement Component element to render.\n   * @param {DOMElement} container DOM element to render into.\n   * @param {?function} callback function triggered on completion\n   * @return {ReactComponent} Component instance rendered in `container`.\n   */\n  render: function (nextElement, container, callback) {\n    return ReactMount._renderSubtreeIntoContainer(null, nextElement, container, callback);\n  },\n\n  /**\n   * Registers a container node into which React components will be rendered.\n   * This also creates the \"reactRoot\" ID that will be assigned to the element\n   * rendered within.\n   *\n   * @param {DOMElement} container DOM element to register as a container.\n   * @return {string} The \"reactRoot\" ID of elements rendered within.\n   */\n  registerContainer: function (container) {\n    var reactRootID = getReactRootID(container);\n    if (reactRootID) {\n      // If one exists, make sure it is a valid \"reactRoot\" ID.\n      reactRootID = ReactInstanceHandles.getReactRootIDFromNodeID(reactRootID);\n    }\n    if (!reactRootID) {\n      // No valid \"reactRoot\" ID found, create one.\n      reactRootID = ReactInstanceHandles.createReactRootID();\n    }\n    containersByReactRootID[reactRootID] = container;\n    return reactRootID;\n  },\n\n  /**\n   * Unmounts and destroys the React component rendered in the `container`.\n   *\n   * @param {DOMElement} container DOM element containing a React component.\n   * @return {boolean} True if a component was found in and unmounted from\n   *                   `container`\n   */\n  unmountComponentAtNode: function (container) {\n    // Various parts of our code (such as ReactCompositeComponent's\n    // _renderValidatedComponent) assume that calls to render aren't nested;\n    // verify that that's the case. (Strictly speaking, unmounting won't cause a\n    // render but we still don't expect to be in a render call here.)\n    process.env.NODE_ENV !== 'production' ? warning(ReactCurrentOwner.current == null, 'unmountComponentAtNode(): Render methods should be a pure function ' + 'of props and state; triggering nested component updates from render ' + 'is not allowed. If necessary, trigger nested updates in ' + 'componentDidUpdate. Check the render method of %s.', ReactCurrentOwner.current && ReactCurrentOwner.current.getName() || 'ReactCompositeComponent') : undefined;\n\n    !(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE || container.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'unmountComponentAtNode(...): Target container is not a DOM element.') : invariant(false) : undefined;\n\n    var reactRootID = getReactRootID(container);\n    var component = instancesByReactRootID[reactRootID];\n    if (!component) {\n      // Check if the node being unmounted was rendered by React, but isn't a\n      // root node.\n      var containerHasNonRootReactChild = hasNonRootReactChild(container);\n\n      // Check if the container itself is a React root node.\n      var containerID = internalGetID(container);\n      var isContainerReactRoot = containerID && containerID === ReactInstanceHandles.getReactRootIDFromNodeID(containerID);\n\n      if (process.env.NODE_ENV !== 'production') {\n        process.env.NODE_ENV !== 'production' ? warning(!containerHasNonRootReactChild, 'unmountComponentAtNode(): The node you\\'re attempting to unmount ' + 'was rendered by React and is not a top-level container. %s', isContainerReactRoot ? 'You may have accidentally passed in a React root node instead ' + 'of its container.' : 'Instead, have the parent component update its state and ' + 'rerender in order to remove this component.') : undefined;\n      }\n\n      return false;\n    }\n    ReactUpdates.batchedUpdates(unmountComponentFromNode, component, container);\n    delete instancesByReactRootID[reactRootID];\n    delete containersByReactRootID[reactRootID];\n    if (process.env.NODE_ENV !== 'production') {\n      delete rootElementsByReactRootID[reactRootID];\n    }\n    return true;\n  },\n\n  /**\n   * Finds the container DOM element that contains React component to which the\n   * supplied DOM `id` belongs.\n   *\n   * @param {string} id The ID of an element rendered by a React component.\n   * @return {?DOMElement} DOM element that contains the `id`.\n   */\n  findReactContainerForID: function (id) {\n    var reactRootID = ReactInstanceHandles.getReactRootIDFromNodeID(id);\n    var container = containersByReactRootID[reactRootID];\n\n    if (process.env.NODE_ENV !== 'production') {\n      var rootElement = rootElementsByReactRootID[reactRootID];\n      if (rootElement && rootElement.parentNode !== container) {\n        process.env.NODE_ENV !== 'production' ? warning(\n        // Call internalGetID here because getID calls isValid which calls\n        // findReactContainerForID (this function).\n        internalGetID(rootElement) === reactRootID, 'ReactMount: Root element ID differed from reactRootID.') : undefined;\n        var containerChild = container.firstChild;\n        if (containerChild && reactRootID === internalGetID(containerChild)) {\n          // If the container has a new child with the same ID as the old\n          // root element, then rootElementsByReactRootID[reactRootID] is\n          // just stale and needs to be updated. The case that deserves a\n          // warning is when the container is empty.\n          rootElementsByReactRootID[reactRootID] = containerChild;\n        } else {\n          process.env.NODE_ENV !== 'production' ? warning(false, 'ReactMount: Root element has been removed from its original ' + 'container. New container: %s', rootElement.parentNode) : undefined;\n        }\n      }\n    }\n\n    return container;\n  },\n\n  /**\n   * Finds an element rendered by React with the supplied ID.\n   *\n   * @param {string} id ID of a DOM node in the React component.\n   * @return {DOMElement} Root DOM node of the React component.\n   */\n  findReactNodeByID: function (id) {\n    var reactRoot = ReactMount.findReactContainerForID(id);\n    return ReactMount.findComponentRoot(reactRoot, id);\n  },\n\n  /**\n   * Traverses up the ancestors of the supplied node to find a node that is a\n   * DOM representation of a React component rendered by this copy of React.\n   *\n   * @param {*} node\n   * @return {?DOMEventTarget}\n   * @internal\n   */\n  getFirstReactDOM: function (node) {\n    return findFirstReactDOMImpl(node);\n  },\n\n  /**\n   * Finds a node with the supplied `targetID` inside of the supplied\n   * `ancestorNode`.  Exploits the ID naming scheme to perform the search\n   * quickly.\n   *\n   * @param {DOMEventTarget} ancestorNode Search from this root.\n   * @pararm {string} targetID ID of the DOM representation of the component.\n   * @return {DOMEventTarget} DOM node with the supplied `targetID`.\n   * @internal\n   */\n  findComponentRoot: function (ancestorNode, targetID) {\n    var firstChildren = findComponentRootReusableArray;\n    var childIndex = 0;\n\n    var deepestAncestor = findDeepestCachedAncestor(targetID) || ancestorNode;\n\n    if (process.env.NODE_ENV !== 'production') {\n      // This will throw on the next line; give an early warning\n      process.env.NODE_ENV !== 'production' ? warning(deepestAncestor != null, 'React can\\'t find the root component node for data-reactid value ' + '`%s`. If you\\'re seeing this message, it probably means that ' + 'you\\'ve loaded two copies of React on the page. At this time, only ' + 'a single copy of React can be loaded at a time.', targetID) : undefined;\n    }\n\n    firstChildren[0] = deepestAncestor.firstChild;\n    firstChildren.length = 1;\n\n    while (childIndex < firstChildren.length) {\n      var child = firstChildren[childIndex++];\n      var targetChild;\n\n      while (child) {\n        var childID = ReactMount.getID(child);\n        if (childID) {\n          // Even if we find the node we're looking for, we finish looping\n          // through its siblings to ensure they're cached so that we don't have\n          // to revisit this node again. Otherwise, we make n^2 calls to getID\n          // when visiting the many children of a single node in order.\n\n          if (targetID === childID) {\n            targetChild = child;\n          } else if (ReactInstanceHandles.isAncestorIDOf(childID, targetID)) {\n            // If we find a child whose ID is an ancestor of the given ID,\n            // then we can be sure that we only want to search the subtree\n            // rooted at this child, so we can throw out the rest of the\n            // search state.\n            firstChildren.length = childIndex = 0;\n            firstChildren.push(child.firstChild);\n          }\n        } else {\n          // If this child had no ID, then there's a chance that it was\n          // injected automatically by the browser, as when a `<table>`\n          // element sprouts an extra `<tbody>` child as a side effect of\n          // `.innerHTML` parsing. Optimistically continue down this\n          // branch, but not before examining the other siblings.\n          firstChildren.push(child.firstChild);\n        }\n\n        child = child.nextSibling;\n      }\n\n      if (targetChild) {\n        // Emptying firstChildren/findComponentRootReusableArray is\n        // not necessary for correctness, but it helps the GC reclaim\n        // any nodes that were left at the end of the search.\n        firstChildren.length = 0;\n\n        return targetChild;\n      }\n    }\n\n    firstChildren.length = 0;\n\n    !false ? process.env.NODE_ENV !== 'production' ? invariant(false, 'findComponentRoot(..., %s): Unable to find element. This probably ' + 'means the DOM was unexpectedly mutated (e.g., by the browser), ' + 'usually due to forgetting a <tbody> when using tables, nesting tags ' + 'like <form>, <p>, or <a>, or using non-SVG elements in an <svg> ' + 'parent. ' + 'Try inspecting the child nodes of the element with React ID `%s`.', targetID, ReactMount.getID(ancestorNode)) : invariant(false) : undefined;\n  },\n\n  _mountImageIntoNode: function (markup, container, shouldReuseMarkup, transaction) {\n    !(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE || container.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'mountComponentIntoNode(...): Target container is not valid.') : invariant(false) : undefined;\n\n    if (shouldReuseMarkup) {\n      var rootElement = getReactRootElementInContainer(container);\n      if (ReactMarkupChecksum.canReuseMarkup(markup, rootElement)) {\n        return;\n      } else {\n        var checksum = rootElement.getAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME);\n        rootElement.removeAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME);\n\n        var rootMarkup = rootElement.outerHTML;\n        rootElement.setAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME, checksum);\n\n        var normalizedMarkup = markup;\n        if (process.env.NODE_ENV !== 'production') {\n          // because rootMarkup is retrieved from the DOM, various normalizations\n          // will have occurred which will not be present in `markup`. Here,\n          // insert markup into a <div> or <iframe> depending on the container\n          // type to perform the same normalizations before comparing.\n          var normalizer;\n          if (container.nodeType === ELEMENT_NODE_TYPE) {\n            normalizer = document.createElement('div');\n            normalizer.innerHTML = markup;\n            normalizedMarkup = normalizer.innerHTML;\n          } else {\n            normalizer = document.createElement('iframe');\n            document.body.appendChild(normalizer);\n            normalizer.contentDocument.write(markup);\n            normalizedMarkup = normalizer.contentDocument.documentElement.outerHTML;\n            document.body.removeChild(normalizer);\n          }\n        }\n\n        var diffIndex = firstDifferenceIndex(normalizedMarkup, rootMarkup);\n        var difference = ' (client) ' + normalizedMarkup.substring(diffIndex - 20, diffIndex + 20) + '\\n (server) ' + rootMarkup.substring(diffIndex - 20, diffIndex + 20);\n\n        !(container.nodeType !== DOC_NODE_TYPE) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'You\\'re trying to render a component to the document using ' + 'server rendering but the checksum was invalid. This usually ' + 'means you rendered a different component type or props on ' + 'the client from the one on the server, or your render() ' + 'methods are impure. React cannot handle this case due to ' + 'cross-browser quirks by rendering at the document root. You ' + 'should look for environment dependent code in your components ' + 'and ensure the props are the same client and server side:\\n%s', difference) : invariant(false) : undefined;\n\n        if (process.env.NODE_ENV !== 'production') {\n          process.env.NODE_ENV !== 'production' ? warning(false, 'React attempted to reuse markup in a container but the ' + 'checksum was invalid. This generally means that you are ' + 'using server rendering and the markup generated on the ' + 'server was not what the client was expecting. React injected ' + 'new markup to compensate which works but you have lost many ' + 'of the benefits of server rendering. Instead, figure out ' + 'why the markup being generated is different on the client ' + 'or server:\\n%s', difference) : undefined;\n        }\n      }\n    }\n\n    !(container.nodeType !== DOC_NODE_TYPE) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'You\\'re trying to render a component to the document but ' + 'you didn\\'t use server rendering. We can\\'t do this ' + 'without using server rendering due to cross-browser quirks. ' + 'See ReactDOMServer.renderToString() for server rendering.') : invariant(false) : undefined;\n\n    if (transaction.useCreateElement) {\n      while (container.lastChild) {\n        container.removeChild(container.lastChild);\n      }\n      container.appendChild(markup);\n    } else {\n      setInnerHTML(container, markup);\n    }\n  },\n\n  ownerDocumentContextKey: ownerDocumentContextKey,\n\n  /**\n   * React ID utilities.\n   */\n\n  getReactRootID: getReactRootID,\n\n  getID: getID,\n\n  setID: setID,\n\n  getNode: getNode,\n\n  getNodeFromInstance: getNodeFromInstance,\n\n  isValid: isValid,\n\n  purgeID: purgeID\n};\n\nReactPerf.measureMethods(ReactMount, 'ReactMount', {\n  _renderNewRootComponent: '_renderNewRootComponent',\n  _mountImageIntoNode: '_mountImageIntoNode'\n});\n\nmodule.exports = ReactMount;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactMount.js\n ** module id = 30\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactBrowserEventEmitter\n * @typechecks static-only\n */\n\n'use strict';\n\nvar EventConstants = require('./EventConstants');\nvar EventPluginHub = require('./EventPluginHub');\nvar EventPluginRegistry = require('./EventPluginRegistry');\nvar ReactEventEmitterMixin = require('./ReactEventEmitterMixin');\nvar ReactPerf = require('./ReactPerf');\nvar ViewportMetrics = require('./ViewportMetrics');\n\nvar assign = require('./Object.assign');\nvar isEventSupported = require('./isEventSupported');\n\n/**\n * Summary of `ReactBrowserEventEmitter` event handling:\n *\n *  - Top-level delegation is used to trap most native browser events. This\n *    may only occur in the main thread and is the responsibility of\n *    ReactEventListener, which is injected and can therefore support pluggable\n *    event sources. This is the only work that occurs in the main thread.\n *\n *  - We normalize and de-duplicate events to account for browser quirks. This\n *    may be done in the worker thread.\n *\n *  - Forward these native events (with the associated top-level type used to\n *    trap it) to `EventPluginHub`, which in turn will ask plugins if they want\n *    to extract any synthetic events.\n *\n *  - The `EventPluginHub` will then process each event by annotating them with\n *    \"dispatches\", a sequence of listeners and IDs that care about that event.\n *\n *  - The `EventPluginHub` then dispatches the events.\n *\n * Overview of React and the event system:\n *\n * +------------+    .\n * |    DOM     |    .\n * +------------+    .\n *       |           .\n *       v           .\n * +------------+    .\n * | ReactEvent |    .\n * |  Listener  |    .\n * +------------+    .                         +-----------+\n *       |           .               +--------+|SimpleEvent|\n *       |           .               |         |Plugin     |\n * +-----|------+    .               v         +-----------+\n * |     |      |    .    +--------------+                    +------------+\n * |     +-----------.--->|EventPluginHub|                    |    Event   |\n * |            |    .    |              |     +-----------+  | Propagators|\n * | ReactEvent |    .    |              |     |TapEvent   |  |------------|\n * |  Emitter   |    .    |              |<---+|Plugin     |  |other plugin|\n * |            |    .    |              |     +-----------+  |  utilities |\n * |     +-----------.--->|              |                    +------------+\n * |     |      |    .    +--------------+\n * +-----|------+    .                ^        +-----------+\n *       |           .                |        |Enter/Leave|\n *       +           .                +-------+|Plugin     |\n * +-------------+   .                         +-----------+\n * | application |   .\n * |-------------|   .\n * |             |   .\n * |             |   .\n * +-------------+   .\n *                   .\n *    React Core     .  General Purpose Event Plugin System\n */\n\nvar alreadyListeningTo = {};\nvar isMonitoringScrollValue = false;\nvar reactTopListenersCounter = 0;\n\n// For events like 'submit' which don't consistently bubble (which we trap at a\n// lower node than `document`), binding at `document` would cause duplicate\n// events so we don't include them here\nvar topEventMapping = {\n  topAbort: 'abort',\n  topBlur: 'blur',\n  topCanPlay: 'canplay',\n  topCanPlayThrough: 'canplaythrough',\n  topChange: 'change',\n  topClick: 'click',\n  topCompositionEnd: 'compositionend',\n  topCompositionStart: 'compositionstart',\n  topCompositionUpdate: 'compositionupdate',\n  topContextMenu: 'contextmenu',\n  topCopy: 'copy',\n  topCut: 'cut',\n  topDoubleClick: 'dblclick',\n  topDrag: 'drag',\n  topDragEnd: 'dragend',\n  topDragEnter: 'dragenter',\n  topDragExit: 'dragexit',\n  topDragLeave: 'dragleave',\n  topDragOver: 'dragover',\n  topDragStart: 'dragstart',\n  topDrop: 'drop',\n  topDurationChange: 'durationchange',\n  topEmptied: 'emptied',\n  topEncrypted: 'encrypted',\n  topEnded: 'ended',\n  topError: 'error',\n  topFocus: 'focus',\n  topInput: 'input',\n  topKeyDown: 'keydown',\n  topKeyPress: 'keypress',\n  topKeyUp: 'keyup',\n  topLoadedData: 'loadeddata',\n  topLoadedMetadata: 'loadedmetadata',\n  topLoadStart: 'loadstart',\n  topMouseDown: 'mousedown',\n  topMouseMove: 'mousemove',\n  topMouseOut: 'mouseout',\n  topMouseOver: 'mouseover',\n  topMouseUp: 'mouseup',\n  topPaste: 'paste',\n  topPause: 'pause',\n  topPlay: 'play',\n  topPlaying: 'playing',\n  topProgress: 'progress',\n  topRateChange: 'ratechange',\n  topScroll: 'scroll',\n  topSeeked: 'seeked',\n  topSeeking: 'seeking',\n  topSelectionChange: 'selectionchange',\n  topStalled: 'stalled',\n  topSuspend: 'suspend',\n  topTextInput: 'textInput',\n  topTimeUpdate: 'timeupdate',\n  topTouchCancel: 'touchcancel',\n  topTouchEnd: 'touchend',\n  topTouchMove: 'touchmove',\n  topTouchStart: 'touchstart',\n  topVolumeChange: 'volumechange',\n  topWaiting: 'waiting',\n  topWheel: 'wheel'\n};\n\n/**\n * To ensure no conflicts with other potential React instances on the page\n */\nvar topListenersIDKey = '_reactListenersID' + String(Math.random()).slice(2);\n\nfunction getListeningForDocument(mountAt) {\n  // In IE8, `mountAt` is a host object and doesn't have `hasOwnProperty`\n  // directly.\n  if (!Object.prototype.hasOwnProperty.call(mountAt, topListenersIDKey)) {\n    mountAt[topListenersIDKey] = reactTopListenersCounter++;\n    alreadyListeningTo[mountAt[topListenersIDKey]] = {};\n  }\n  return alreadyListeningTo[mountAt[topListenersIDKey]];\n}\n\n/**\n * `ReactBrowserEventEmitter` is used to attach top-level event listeners. For\n * example:\n *\n *   ReactBrowserEventEmitter.putListener('myID', 'onClick', myFunction);\n *\n * This would allocate a \"registration\" of `('onClick', myFunction)` on 'myID'.\n *\n * @internal\n */\nvar ReactBrowserEventEmitter = assign({}, ReactEventEmitterMixin, {\n\n  /**\n   * Injectable event backend\n   */\n  ReactEventListener: null,\n\n  injection: {\n    /**\n     * @param {object} ReactEventListener\n     */\n    injectReactEventListener: function (ReactEventListener) {\n      ReactEventListener.setHandleTopLevel(ReactBrowserEventEmitter.handleTopLevel);\n      ReactBrowserEventEmitter.ReactEventListener = ReactEventListener;\n    }\n  },\n\n  /**\n   * Sets whether or not any created callbacks should be enabled.\n   *\n   * @param {boolean} enabled True if callbacks should be enabled.\n   */\n  setEnabled: function (enabled) {\n    if (ReactBrowserEventEmitter.ReactEventListener) {\n      ReactBrowserEventEmitter.ReactEventListener.setEnabled(enabled);\n    }\n  },\n\n  /**\n   * @return {boolean} True if callbacks are enabled.\n   */\n  isEnabled: function () {\n    return !!(ReactBrowserEventEmitter.ReactEventListener && ReactBrowserEventEmitter.ReactEventListener.isEnabled());\n  },\n\n  /**\n   * We listen for bubbled touch events on the document object.\n   *\n   * Firefox v8.01 (and possibly others) exhibited strange behavior when\n   * mounting `onmousemove` events at some node that was not the document\n   * element. The symptoms were that if your mouse is not moving over something\n   * contained within that mount point (for example on the background) the\n   * top-level listeners for `onmousemove` won't be called. However, if you\n   * register the `mousemove` on the document object, then it will of course\n   * catch all `mousemove`s. This along with iOS quirks, justifies restricting\n   * top-level listeners to the document object only, at least for these\n   * movement types of events and possibly all events.\n   *\n   * @see http://www.quirksmode.org/blog/archives/2010/09/click_event_del.html\n   *\n   * Also, `keyup`/`keypress`/`keydown` do not bubble to the window on IE, but\n   * they bubble to document.\n   *\n   * @param {string} registrationName Name of listener (e.g. `onClick`).\n   * @param {object} contentDocumentHandle Document which owns the container\n   */\n  listenTo: function (registrationName, contentDocumentHandle) {\n    var mountAt = contentDocumentHandle;\n    var isListening = getListeningForDocument(mountAt);\n    var dependencies = EventPluginRegistry.registrationNameDependencies[registrationName];\n\n    var topLevelTypes = EventConstants.topLevelTypes;\n    for (var i = 0; i < dependencies.length; i++) {\n      var dependency = dependencies[i];\n      if (!(isListening.hasOwnProperty(dependency) && isListening[dependency])) {\n        if (dependency === topLevelTypes.topWheel) {\n          if (isEventSupported('wheel')) {\n            ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topWheel, 'wheel', mountAt);\n          } else if (isEventSupported('mousewheel')) {\n            ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topWheel, 'mousewheel', mountAt);\n          } else {\n            // Firefox needs to capture a different mouse scroll event.\n            // @see http://www.quirksmode.org/dom/events/tests/scroll.html\n            ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topWheel, 'DOMMouseScroll', mountAt);\n          }\n        } else if (dependency === topLevelTypes.topScroll) {\n\n          if (isEventSupported('scroll', true)) {\n            ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelTypes.topScroll, 'scroll', mountAt);\n          } else {\n            ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topScroll, 'scroll', ReactBrowserEventEmitter.ReactEventListener.WINDOW_HANDLE);\n          }\n        } else if (dependency === topLevelTypes.topFocus || dependency === topLevelTypes.topBlur) {\n\n          if (isEventSupported('focus', true)) {\n            ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelTypes.topFocus, 'focus', mountAt);\n            ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelTypes.topBlur, 'blur', mountAt);\n          } else if (isEventSupported('focusin')) {\n            // IE has `focusin` and `focusout` events which bubble.\n            // @see http://www.quirksmode.org/blog/archives/2008/04/delegating_the.html\n            ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topFocus, 'focusin', mountAt);\n            ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topBlur, 'focusout', mountAt);\n          }\n\n          // to make sure blur and focus event listeners are only attached once\n          isListening[topLevelTypes.topBlur] = true;\n          isListening[topLevelTypes.topFocus] = true;\n        } else if (topEventMapping.hasOwnProperty(dependency)) {\n          ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(dependency, topEventMapping[dependency], mountAt);\n        }\n\n        isListening[dependency] = true;\n      }\n    }\n  },\n\n  trapBubbledEvent: function (topLevelType, handlerBaseName, handle) {\n    return ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelType, handlerBaseName, handle);\n  },\n\n  trapCapturedEvent: function (topLevelType, handlerBaseName, handle) {\n    return ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelType, handlerBaseName, handle);\n  },\n\n  /**\n   * Listens to window scroll and resize events. We cache scroll values so that\n   * application code can access them without triggering reflows.\n   *\n   * NOTE: Scroll events do not bubble.\n   *\n   * @see http://www.quirksmode.org/dom/events/scroll.html\n   */\n  ensureScrollValueMonitoring: function () {\n    if (!isMonitoringScrollValue) {\n      var refresh = ViewportMetrics.refreshScrollValues;\n      ReactBrowserEventEmitter.ReactEventListener.monitorScrollValue(refresh);\n      isMonitoringScrollValue = true;\n    }\n  },\n\n  eventNameDispatchConfigs: EventPluginHub.eventNameDispatchConfigs,\n\n  registrationNameModules: EventPluginHub.registrationNameModules,\n\n  putListener: EventPluginHub.putListener,\n\n  getListener: EventPluginHub.getListener,\n\n  deleteListener: EventPluginHub.deleteListener,\n\n  deleteAllListeners: EventPluginHub.deleteAllListeners\n\n});\n\nReactPerf.measureMethods(ReactBrowserEventEmitter, 'ReactBrowserEventEmitter', {\n  putListener: 'putListener',\n  deleteListener: 'deleteListener'\n});\n\nmodule.exports = ReactBrowserEventEmitter;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactBrowserEventEmitter.js\n ** module id = 31\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule EventConstants\n */\n\n'use strict';\n\nvar keyMirror = require('fbjs/lib/keyMirror');\n\nvar PropagationPhases = keyMirror({ bubbled: null, captured: null });\n\n/**\n * Types of raw signals from the browser caught at the top level.\n */\nvar topLevelTypes = keyMirror({\n  topAbort: null,\n  topBlur: null,\n  topCanPlay: null,\n  topCanPlayThrough: null,\n  topChange: null,\n  topClick: null,\n  topCompositionEnd: null,\n  topCompositionStart: null,\n  topCompositionUpdate: null,\n  topContextMenu: null,\n  topCopy: null,\n  topCut: null,\n  topDoubleClick: null,\n  topDrag: null,\n  topDragEnd: null,\n  topDragEnter: null,\n  topDragExit: null,\n  topDragLeave: null,\n  topDragOver: null,\n  topDragStart: null,\n  topDrop: null,\n  topDurationChange: null,\n  topEmptied: null,\n  topEncrypted: null,\n  topEnded: null,\n  topError: null,\n  topFocus: null,\n  topInput: null,\n  topKeyDown: null,\n  topKeyPress: null,\n  topKeyUp: null,\n  topLoad: null,\n  topLoadedData: null,\n  topLoadedMetadata: null,\n  topLoadStart: null,\n  topMouseDown: null,\n  topMouseMove: null,\n  topMouseOut: null,\n  topMouseOver: null,\n  topMouseUp: null,\n  topPaste: null,\n  topPause: null,\n  topPlay: null,\n  topPlaying: null,\n  topProgress: null,\n  topRateChange: null,\n  topReset: null,\n  topScroll: null,\n  topSeeked: null,\n  topSeeking: null,\n  topSelectionChange: null,\n  topStalled: null,\n  topSubmit: null,\n  topSuspend: null,\n  topTextInput: null,\n  topTimeUpdate: null,\n  topTouchCancel: null,\n  topTouchEnd: null,\n  topTouchMove: null,\n  topTouchStart: null,\n  topVolumeChange: null,\n  topWaiting: null,\n  topWheel: null\n});\n\nvar EventConstants = {\n  topLevelTypes: topLevelTypes,\n  PropagationPhases: PropagationPhases\n};\n\nmodule.exports = EventConstants;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/EventConstants.js\n ** module id = 32\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule EventPluginHub\n */\n\n'use strict';\n\nvar EventPluginRegistry = require('./EventPluginRegistry');\nvar EventPluginUtils = require('./EventPluginUtils');\nvar ReactErrorUtils = require('./ReactErrorUtils');\n\nvar accumulateInto = require('./accumulateInto');\nvar forEachAccumulated = require('./forEachAccumulated');\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\n/**\n * Internal store for event listeners\n */\nvar listenerBank = {};\n\n/**\n * Internal queue of events that have accumulated their dispatches and are\n * waiting to have their dispatches executed.\n */\nvar eventQueue = null;\n\n/**\n * Dispatches an event and releases it back into the pool, unless persistent.\n *\n * @param {?object} event Synthetic event to be dispatched.\n * @param {boolean} simulated If the event is simulated (changes exn behavior)\n * @private\n */\nvar executeDispatchesAndRelease = function (event, simulated) {\n  if (event) {\n    EventPluginUtils.executeDispatchesInOrder(event, simulated);\n\n    if (!event.isPersistent()) {\n      event.constructor.release(event);\n    }\n  }\n};\nvar executeDispatchesAndReleaseSimulated = function (e) {\n  return executeDispatchesAndRelease(e, true);\n};\nvar executeDispatchesAndReleaseTopLevel = function (e) {\n  return executeDispatchesAndRelease(e, false);\n};\n\n/**\n * - `InstanceHandle`: [required] Module that performs logical traversals of DOM\n *   hierarchy given ids of the logical DOM elements involved.\n */\nvar InstanceHandle = null;\n\nfunction validateInstanceHandle() {\n  var valid = InstanceHandle && InstanceHandle.traverseTwoPhase && InstanceHandle.traverseEnterLeave;\n  process.env.NODE_ENV !== 'production' ? warning(valid, 'InstanceHandle not injected before use!') : undefined;\n}\n\n/**\n * This is a unified interface for event plugins to be installed and configured.\n *\n * Event plugins can implement the following properties:\n *\n *   `extractEvents` {function(string, DOMEventTarget, string, object): *}\n *     Required. When a top-level event is fired, this method is expected to\n *     extract synthetic events that will in turn be queued and dispatched.\n *\n *   `eventTypes` {object}\n *     Optional, plugins that fire events must publish a mapping of registration\n *     names that are used to register listeners. Values of this mapping must\n *     be objects that contain `registrationName` or `phasedRegistrationNames`.\n *\n *   `executeDispatch` {function(object, function, string)}\n *     Optional, allows plugins to override how an event gets dispatched. By\n *     default, the listener is simply invoked.\n *\n * Each plugin that is injected into `EventsPluginHub` is immediately operable.\n *\n * @public\n */\nvar EventPluginHub = {\n\n  /**\n   * Methods for injecting dependencies.\n   */\n  injection: {\n\n    /**\n     * @param {object} InjectedMount\n     * @public\n     */\n    injectMount: EventPluginUtils.injection.injectMount,\n\n    /**\n     * @param {object} InjectedInstanceHandle\n     * @public\n     */\n    injectInstanceHandle: function (InjectedInstanceHandle) {\n      InstanceHandle = InjectedInstanceHandle;\n      if (process.env.NODE_ENV !== 'production') {\n        validateInstanceHandle();\n      }\n    },\n\n    getInstanceHandle: function () {\n      if (process.env.NODE_ENV !== 'production') {\n        validateInstanceHandle();\n      }\n      return InstanceHandle;\n    },\n\n    /**\n     * @param {array} InjectedEventPluginOrder\n     * @public\n     */\n    injectEventPluginOrder: EventPluginRegistry.injectEventPluginOrder,\n\n    /**\n     * @param {object} injectedNamesToPlugins Map from names to plugin modules.\n     */\n    injectEventPluginsByName: EventPluginRegistry.injectEventPluginsByName\n\n  },\n\n  eventNameDispatchConfigs: EventPluginRegistry.eventNameDispatchConfigs,\n\n  registrationNameModules: EventPluginRegistry.registrationNameModules,\n\n  /**\n   * Stores `listener` at `listenerBank[registrationName][id]`. Is idempotent.\n   *\n   * @param {string} id ID of the DOM element.\n   * @param {string} registrationName Name of listener (e.g. `onClick`).\n   * @param {?function} listener The callback to store.\n   */\n  putListener: function (id, registrationName, listener) {\n    !(typeof listener === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected %s listener to be a function, instead got type %s', registrationName, typeof listener) : invariant(false) : undefined;\n\n    var bankForRegistrationName = listenerBank[registrationName] || (listenerBank[registrationName] = {});\n    bankForRegistrationName[id] = listener;\n\n    var PluginModule = EventPluginRegistry.registrationNameModules[registrationName];\n    if (PluginModule && PluginModule.didPutListener) {\n      PluginModule.didPutListener(id, registrationName, listener);\n    }\n  },\n\n  /**\n   * @param {string} id ID of the DOM element.\n   * @param {string} registrationName Name of listener (e.g. `onClick`).\n   * @return {?function} The stored callback.\n   */\n  getListener: function (id, registrationName) {\n    var bankForRegistrationName = listenerBank[registrationName];\n    return bankForRegistrationName && bankForRegistrationName[id];\n  },\n\n  /**\n   * Deletes a listener from the registration bank.\n   *\n   * @param {string} id ID of the DOM element.\n   * @param {string} registrationName Name of listener (e.g. `onClick`).\n   */\n  deleteListener: function (id, registrationName) {\n    var PluginModule = EventPluginRegistry.registrationNameModules[registrationName];\n    if (PluginModule && PluginModule.willDeleteListener) {\n      PluginModule.willDeleteListener(id, registrationName);\n    }\n\n    var bankForRegistrationName = listenerBank[registrationName];\n    // TODO: This should never be null -- when is it?\n    if (bankForRegistrationName) {\n      delete bankForRegistrationName[id];\n    }\n  },\n\n  /**\n   * Deletes all listeners for the DOM element with the supplied ID.\n   *\n   * @param {string} id ID of the DOM element.\n   */\n  deleteAllListeners: function (id) {\n    for (var registrationName in listenerBank) {\n      if (!listenerBank[registrationName][id]) {\n        continue;\n      }\n\n      var PluginModule = EventPluginRegistry.registrationNameModules[registrationName];\n      if (PluginModule && PluginModule.willDeleteListener) {\n        PluginModule.willDeleteListener(id, registrationName);\n      }\n\n      delete listenerBank[registrationName][id];\n    }\n  },\n\n  /**\n   * Allows registered plugins an opportunity to extract events from top-level\n   * native browser events.\n   *\n   * @param {string} topLevelType Record from `EventConstants`.\n   * @param {DOMEventTarget} topLevelTarget The listening component root node.\n   * @param {string} topLevelTargetID ID of `topLevelTarget`.\n   * @param {object} nativeEvent Native browser event.\n   * @return {*} An accumulation of synthetic events.\n   * @internal\n   */\n  extractEvents: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) {\n    var events;\n    var plugins = EventPluginRegistry.plugins;\n    for (var i = 0; i < plugins.length; i++) {\n      // Not every plugin in the ordering may be loaded at runtime.\n      var possiblePlugin = plugins[i];\n      if (possiblePlugin) {\n        var extractedEvents = possiblePlugin.extractEvents(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget);\n        if (extractedEvents) {\n          events = accumulateInto(events, extractedEvents);\n        }\n      }\n    }\n    return events;\n  },\n\n  /**\n   * Enqueues a synthetic event that should be dispatched when\n   * `processEventQueue` is invoked.\n   *\n   * @param {*} events An accumulation of synthetic events.\n   * @internal\n   */\n  enqueueEvents: function (events) {\n    if (events) {\n      eventQueue = accumulateInto(eventQueue, events);\n    }\n  },\n\n  /**\n   * Dispatches all synthetic events on the event queue.\n   *\n   * @internal\n   */\n  processEventQueue: function (simulated) {\n    // Set `eventQueue` to null before processing it so that we can tell if more\n    // events get enqueued while processing.\n    var processingEventQueue = eventQueue;\n    eventQueue = null;\n    if (simulated) {\n      forEachAccumulated(processingEventQueue, executeDispatchesAndReleaseSimulated);\n    } else {\n      forEachAccumulated(processingEventQueue, executeDispatchesAndReleaseTopLevel);\n    }\n    !!eventQueue ? process.env.NODE_ENV !== 'production' ? invariant(false, 'processEventQueue(): Additional events were enqueued while processing ' + 'an event queue. Support for this has not yet been implemented.') : invariant(false) : undefined;\n    // This would be a good time to rethrow if any of the event handlers threw.\n    ReactErrorUtils.rethrowCaughtError();\n  },\n\n  /**\n   * These are needed for tests only. Do not use!\n   */\n  __purge: function () {\n    listenerBank = {};\n  },\n\n  __getListenerBank: function () {\n    return listenerBank;\n  }\n\n};\n\nmodule.exports = EventPluginHub;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/EventPluginHub.js\n ** module id = 33\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule EventPluginRegistry\n * @typechecks static-only\n */\n\n'use strict';\n\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * Injectable ordering of event plugins.\n */\nvar EventPluginOrder = null;\n\n/**\n * Injectable mapping from names to event plugin modules.\n */\nvar namesToPlugins = {};\n\n/**\n * Recomputes the plugin list using the injected plugins and plugin ordering.\n *\n * @private\n */\nfunction recomputePluginOrdering() {\n  if (!EventPluginOrder) {\n    // Wait until an `EventPluginOrder` is injected.\n    return;\n  }\n  for (var pluginName in namesToPlugins) {\n    var PluginModule = namesToPlugins[pluginName];\n    var pluginIndex = EventPluginOrder.indexOf(pluginName);\n    !(pluginIndex > -1) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject event plugins that do not exist in ' + 'the plugin ordering, `%s`.', pluginName) : invariant(false) : undefined;\n    if (EventPluginRegistry.plugins[pluginIndex]) {\n      continue;\n    }\n    !PluginModule.extractEvents ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Event plugins must implement an `extractEvents` ' + 'method, but `%s` does not.', pluginName) : invariant(false) : undefined;\n    EventPluginRegistry.plugins[pluginIndex] = PluginModule;\n    var publishedEvents = PluginModule.eventTypes;\n    for (var eventName in publishedEvents) {\n      !publishEventForPlugin(publishedEvents[eventName], PluginModule, eventName) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Failed to publish event `%s` for plugin `%s`.', eventName, pluginName) : invariant(false) : undefined;\n    }\n  }\n}\n\n/**\n * Publishes an event so that it can be dispatched by the supplied plugin.\n *\n * @param {object} dispatchConfig Dispatch configuration for the event.\n * @param {object} PluginModule Plugin publishing the event.\n * @return {boolean} True if the event was successfully published.\n * @private\n */\nfunction publishEventForPlugin(dispatchConfig, PluginModule, eventName) {\n  !!EventPluginRegistry.eventNameDispatchConfigs.hasOwnProperty(eventName) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginHub: More than one plugin attempted to publish the same ' + 'event name, `%s`.', eventName) : invariant(false) : undefined;\n  EventPluginRegistry.eventNameDispatchConfigs[eventName] = dispatchConfig;\n\n  var phasedRegistrationNames = dispatchConfig.phasedRegistrationNames;\n  if (phasedRegistrationNames) {\n    for (var phaseName in phasedRegistrationNames) {\n      if (phasedRegistrationNames.hasOwnProperty(phaseName)) {\n        var phasedRegistrationName = phasedRegistrationNames[phaseName];\n        publishRegistrationName(phasedRegistrationName, PluginModule, eventName);\n      }\n    }\n    return true;\n  } else if (dispatchConfig.registrationName) {\n    publishRegistrationName(dispatchConfig.registrationName, PluginModule, eventName);\n    return true;\n  }\n  return false;\n}\n\n/**\n * Publishes a registration name that is used to identify dispatched events and\n * can be used with `EventPluginHub.putListener` to register listeners.\n *\n * @param {string} registrationName Registration name to add.\n * @param {object} PluginModule Plugin publishing the event.\n * @private\n */\nfunction publishRegistrationName(registrationName, PluginModule, eventName) {\n  !!EventPluginRegistry.registrationNameModules[registrationName] ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginHub: More than one plugin attempted to publish the same ' + 'registration name, `%s`.', registrationName) : invariant(false) : undefined;\n  EventPluginRegistry.registrationNameModules[registrationName] = PluginModule;\n  EventPluginRegistry.registrationNameDependencies[registrationName] = PluginModule.eventTypes[eventName].dependencies;\n}\n\n/**\n * Registers plugins so that they can extract and dispatch events.\n *\n * @see {EventPluginHub}\n */\nvar EventPluginRegistry = {\n\n  /**\n   * Ordered list of injected plugins.\n   */\n  plugins: [],\n\n  /**\n   * Mapping from event name to dispatch config\n   */\n  eventNameDispatchConfigs: {},\n\n  /**\n   * Mapping from registration name to plugin module\n   */\n  registrationNameModules: {},\n\n  /**\n   * Mapping from registration name to event name\n   */\n  registrationNameDependencies: {},\n\n  /**\n   * Injects an ordering of plugins (by plugin name). This allows the ordering\n   * to be decoupled from injection of the actual plugins so that ordering is\n   * always deterministic regardless of packaging, on-the-fly injection, etc.\n   *\n   * @param {array} InjectedEventPluginOrder\n   * @internal\n   * @see {EventPluginHub.injection.injectEventPluginOrder}\n   */\n  injectEventPluginOrder: function (InjectedEventPluginOrder) {\n    !!EventPluginOrder ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject event plugin ordering more than ' + 'once. You are likely trying to load more than one copy of React.') : invariant(false) : undefined;\n    // Clone the ordering so it cannot be dynamically mutated.\n    EventPluginOrder = Array.prototype.slice.call(InjectedEventPluginOrder);\n    recomputePluginOrdering();\n  },\n\n  /**\n   * Injects plugins to be used by `EventPluginHub`. The plugin names must be\n   * in the ordering injected by `injectEventPluginOrder`.\n   *\n   * Plugins can be injected as part of page initialization or on-the-fly.\n   *\n   * @param {object} injectedNamesToPlugins Map from names to plugin modules.\n   * @internal\n   * @see {EventPluginHub.injection.injectEventPluginsByName}\n   */\n  injectEventPluginsByName: function (injectedNamesToPlugins) {\n    var isOrderingDirty = false;\n    for (var pluginName in injectedNamesToPlugins) {\n      if (!injectedNamesToPlugins.hasOwnProperty(pluginName)) {\n        continue;\n      }\n      var PluginModule = injectedNamesToPlugins[pluginName];\n      if (!namesToPlugins.hasOwnProperty(pluginName) || namesToPlugins[pluginName] !== PluginModule) {\n        !!namesToPlugins[pluginName] ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject two different event plugins ' + 'using the same name, `%s`.', pluginName) : invariant(false) : undefined;\n        namesToPlugins[pluginName] = PluginModule;\n        isOrderingDirty = true;\n      }\n    }\n    if (isOrderingDirty) {\n      recomputePluginOrdering();\n    }\n  },\n\n  /**\n   * Looks up the plugin for the supplied event.\n   *\n   * @param {object} event A synthetic event.\n   * @return {?object} The plugin that created the supplied event.\n   * @internal\n   */\n  getPluginModuleForEvent: function (event) {\n    var dispatchConfig = event.dispatchConfig;\n    if (dispatchConfig.registrationName) {\n      return EventPluginRegistry.registrationNameModules[dispatchConfig.registrationName] || null;\n    }\n    for (var phase in dispatchConfig.phasedRegistrationNames) {\n      if (!dispatchConfig.phasedRegistrationNames.hasOwnProperty(phase)) {\n        continue;\n      }\n      var PluginModule = EventPluginRegistry.registrationNameModules[dispatchConfig.phasedRegistrationNames[phase]];\n      if (PluginModule) {\n        return PluginModule;\n      }\n    }\n    return null;\n  },\n\n  /**\n   * Exposed for unit testing.\n   * @private\n   */\n  _resetEventPlugins: function () {\n    EventPluginOrder = null;\n    for (var pluginName in namesToPlugins) {\n      if (namesToPlugins.hasOwnProperty(pluginName)) {\n        delete namesToPlugins[pluginName];\n      }\n    }\n    EventPluginRegistry.plugins.length = 0;\n\n    var eventNameDispatchConfigs = EventPluginRegistry.eventNameDispatchConfigs;\n    for (var eventName in eventNameDispatchConfigs) {\n      if (eventNameDispatchConfigs.hasOwnProperty(eventName)) {\n        delete eventNameDispatchConfigs[eventName];\n      }\n    }\n\n    var registrationNameModules = EventPluginRegistry.registrationNameModules;\n    for (var registrationName in registrationNameModules) {\n      if (registrationNameModules.hasOwnProperty(registrationName)) {\n        delete registrationNameModules[registrationName];\n      }\n    }\n  }\n\n};\n\nmodule.exports = EventPluginRegistry;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/EventPluginRegistry.js\n ** module id = 34\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule EventPluginUtils\n */\n\n'use strict';\n\nvar EventConstants = require('./EventConstants');\nvar ReactErrorUtils = require('./ReactErrorUtils');\n\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\n/**\n * Injected dependencies:\n */\n\n/**\n * - `Mount`: [required] Module that can convert between React dom IDs and\n *   actual node references.\n */\nvar injection = {\n  Mount: null,\n  injectMount: function (InjectedMount) {\n    injection.Mount = InjectedMount;\n    if (process.env.NODE_ENV !== 'production') {\n      process.env.NODE_ENV !== 'production' ? warning(InjectedMount && InjectedMount.getNode && InjectedMount.getID, 'EventPluginUtils.injection.injectMount(...): Injected Mount ' + 'module is missing getNode or getID.') : undefined;\n    }\n  }\n};\n\nvar topLevelTypes = EventConstants.topLevelTypes;\n\nfunction isEndish(topLevelType) {\n  return topLevelType === topLevelTypes.topMouseUp || topLevelType === topLevelTypes.topTouchEnd || topLevelType === topLevelTypes.topTouchCancel;\n}\n\nfunction isMoveish(topLevelType) {\n  return topLevelType === topLevelTypes.topMouseMove || topLevelType === topLevelTypes.topTouchMove;\n}\nfunction isStartish(topLevelType) {\n  return topLevelType === topLevelTypes.topMouseDown || topLevelType === topLevelTypes.topTouchStart;\n}\n\nvar validateEventDispatches;\nif (process.env.NODE_ENV !== 'production') {\n  validateEventDispatches = function (event) {\n    var dispatchListeners = event._dispatchListeners;\n    var dispatchIDs = event._dispatchIDs;\n\n    var listenersIsArr = Array.isArray(dispatchListeners);\n    var idsIsArr = Array.isArray(dispatchIDs);\n    var IDsLen = idsIsArr ? dispatchIDs.length : dispatchIDs ? 1 : 0;\n    var listenersLen = listenersIsArr ? dispatchListeners.length : dispatchListeners ? 1 : 0;\n\n    process.env.NODE_ENV !== 'production' ? warning(idsIsArr === listenersIsArr && IDsLen === listenersLen, 'EventPluginUtils: Invalid `event`.') : undefined;\n  };\n}\n\n/**\n * Dispatch the event to the listener.\n * @param {SyntheticEvent} event SyntheticEvent to handle\n * @param {boolean} simulated If the event is simulated (changes exn behavior)\n * @param {function} listener Application-level callback\n * @param {string} domID DOM id to pass to the callback.\n */\nfunction executeDispatch(event, simulated, listener, domID) {\n  var type = event.type || 'unknown-event';\n  event.currentTarget = injection.Mount.getNode(domID);\n  if (simulated) {\n    ReactErrorUtils.invokeGuardedCallbackWithCatch(type, listener, event, domID);\n  } else {\n    ReactErrorUtils.invokeGuardedCallback(type, listener, event, domID);\n  }\n  event.currentTarget = null;\n}\n\n/**\n * Standard/simple iteration through an event's collected dispatches.\n */\nfunction executeDispatchesInOrder(event, simulated) {\n  var dispatchListeners = event._dispatchListeners;\n  var dispatchIDs = event._dispatchIDs;\n  if (process.env.NODE_ENV !== 'production') {\n    validateEventDispatches(event);\n  }\n  if (Array.isArray(dispatchListeners)) {\n    for (var i = 0; i < dispatchListeners.length; i++) {\n      if (event.isPropagationStopped()) {\n        break;\n      }\n      // Listeners and IDs are two parallel arrays that are always in sync.\n      executeDispatch(event, simulated, dispatchListeners[i], dispatchIDs[i]);\n    }\n  } else if (dispatchListeners) {\n    executeDispatch(event, simulated, dispatchListeners, dispatchIDs);\n  }\n  event._dispatchListeners = null;\n  event._dispatchIDs = null;\n}\n\n/**\n * Standard/simple iteration through an event's collected dispatches, but stops\n * at the first dispatch execution returning true, and returns that id.\n *\n * @return {?string} id of the first dispatch execution who's listener returns\n * true, or null if no listener returned true.\n */\nfunction executeDispatchesInOrderStopAtTrueImpl(event) {\n  var dispatchListeners = event._dispatchListeners;\n  var dispatchIDs = event._dispatchIDs;\n  if (process.env.NODE_ENV !== 'production') {\n    validateEventDispatches(event);\n  }\n  if (Array.isArray(dispatchListeners)) {\n    for (var i = 0; i < dispatchListeners.length; i++) {\n      if (event.isPropagationStopped()) {\n        break;\n      }\n      // Listeners and IDs are two parallel arrays that are always in sync.\n      if (dispatchListeners[i](event, dispatchIDs[i])) {\n        return dispatchIDs[i];\n      }\n    }\n  } else if (dispatchListeners) {\n    if (dispatchListeners(event, dispatchIDs)) {\n      return dispatchIDs;\n    }\n  }\n  return null;\n}\n\n/**\n * @see executeDispatchesInOrderStopAtTrueImpl\n */\nfunction executeDispatchesInOrderStopAtTrue(event) {\n  var ret = executeDispatchesInOrderStopAtTrueImpl(event);\n  event._dispatchIDs = null;\n  event._dispatchListeners = null;\n  return ret;\n}\n\n/**\n * Execution of a \"direct\" dispatch - there must be at most one dispatch\n * accumulated on the event or it is considered an error. It doesn't really make\n * sense for an event with multiple dispatches (bubbled) to keep track of the\n * return values at each dispatch execution, but it does tend to make sense when\n * dealing with \"direct\" dispatches.\n *\n * @return {*} The return value of executing the single dispatch.\n */\nfunction executeDirectDispatch(event) {\n  if (process.env.NODE_ENV !== 'production') {\n    validateEventDispatches(event);\n  }\n  var dispatchListener = event._dispatchListeners;\n  var dispatchID = event._dispatchIDs;\n  !!Array.isArray(dispatchListener) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'executeDirectDispatch(...): Invalid `event`.') : invariant(false) : undefined;\n  var res = dispatchListener ? dispatchListener(event, dispatchID) : null;\n  event._dispatchListeners = null;\n  event._dispatchIDs = null;\n  return res;\n}\n\n/**\n * @param {SyntheticEvent} event\n * @return {boolean} True iff number of dispatches accumulated is greater than 0.\n */\nfunction hasDispatches(event) {\n  return !!event._dispatchListeners;\n}\n\n/**\n * General utilities that are useful in creating custom Event Plugins.\n */\nvar EventPluginUtils = {\n  isEndish: isEndish,\n  isMoveish: isMoveish,\n  isStartish: isStartish,\n\n  executeDirectDispatch: executeDirectDispatch,\n  executeDispatchesInOrder: executeDispatchesInOrder,\n  executeDispatchesInOrderStopAtTrue: executeDispatchesInOrderStopAtTrue,\n  hasDispatches: hasDispatches,\n\n  getNode: function (id) {\n    return injection.Mount.getNode(id);\n  },\n  getID: function (node) {\n    return injection.Mount.getID(node);\n  },\n\n  injection: injection\n};\n\nmodule.exports = EventPluginUtils;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/EventPluginUtils.js\n ** module id = 35\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactErrorUtils\n * @typechecks\n */\n\n'use strict';\n\nvar caughtError = null;\n\n/**\n * Call a function while guarding against errors that happens within it.\n *\n * @param {?String} name of the guard to use for logging or debugging\n * @param {Function} func The function to invoke\n * @param {*} a First argument\n * @param {*} b Second argument\n */\nfunction invokeGuardedCallback(name, func, a, b) {\n  try {\n    return func(a, b);\n  } catch (x) {\n    if (caughtError === null) {\n      caughtError = x;\n    }\n    return undefined;\n  }\n}\n\nvar ReactErrorUtils = {\n  invokeGuardedCallback: invokeGuardedCallback,\n\n  /**\n   * Invoked by ReactTestUtils.Simulate so that any errors thrown by the event\n   * handler are sure to be rethrown by rethrowCaughtError.\n   */\n  invokeGuardedCallbackWithCatch: invokeGuardedCallback,\n\n  /**\n   * During execution of guarded functions we will capture the first error which\n   * we will rethrow to be handled by the top level error handler.\n   */\n  rethrowCaughtError: function () {\n    if (caughtError) {\n      var error = caughtError;\n      caughtError = null;\n      throw error;\n    }\n  }\n};\n\nif (process.env.NODE_ENV !== 'production') {\n  /**\n   * To help development we can get better devtools integration by simulating a\n   * real browser event.\n   */\n  if (typeof window !== 'undefined' && typeof window.dispatchEvent === 'function' && typeof document !== 'undefined' && typeof document.createEvent === 'function') {\n    var fakeNode = document.createElement('react');\n    ReactErrorUtils.invokeGuardedCallback = function (name, func, a, b) {\n      var boundFunc = func.bind(null, a, b);\n      var evtType = 'react-' + name;\n      fakeNode.addEventListener(evtType, boundFunc, false);\n      var evt = document.createEvent('Event');\n      evt.initEvent(evtType, false, false);\n      fakeNode.dispatchEvent(evt);\n      fakeNode.removeEventListener(evtType, boundFunc, false);\n    };\n  }\n}\n\nmodule.exports = ReactErrorUtils;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactErrorUtils.js\n ** module id = 36\n ** module chunks = 4\n **/","/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule accumulateInto\n */\n\n'use strict';\n\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n *\n * Accumulates items that must not be null or undefined into the first one. This\n * is used to conserve memory by avoiding array allocations, and thus sacrifices\n * API cleanness. Since `current` can be null before being passed in and not\n * null after this function, make sure to assign it back to `current`:\n *\n * `a = accumulateInto(a, b);`\n *\n * This API should be sparingly used. Try `accumulate` for something cleaner.\n *\n * @return {*|array<*>} An accumulation of items.\n */\n\nfunction accumulateInto(current, next) {\n  !(next != null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'accumulateInto(...): Accumulated items must not be null or undefined.') : invariant(false) : undefined;\n  if (current == null) {\n    return next;\n  }\n\n  // Both are not empty. Warning: Never call x.concat(y) when you are not\n  // certain that x is an Array (x could be a string with concat method).\n  var currentIsArray = Array.isArray(current);\n  var nextIsArray = Array.isArray(next);\n\n  if (currentIsArray && nextIsArray) {\n    current.push.apply(current, next);\n    return current;\n  }\n\n  if (currentIsArray) {\n    current.push(next);\n    return current;\n  }\n\n  if (nextIsArray) {\n    // A bit too dangerous to mutate `next`.\n    return [current].concat(next);\n  }\n\n  return [current, next];\n}\n\nmodule.exports = accumulateInto;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/accumulateInto.js\n ** module id = 37\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule forEachAccumulated\n */\n\n'use strict';\n\n/**\n * @param {array} arr an \"accumulation\" of items which is either an Array or\n * a single item. Useful when paired with the `accumulate` module. This is a\n * simple utility that allows us to reason about a collection of items, but\n * handling the case when there is exactly one item (and we do not need to\n * allocate an array).\n */\nvar forEachAccumulated = function (arr, cb, scope) {\n  if (Array.isArray(arr)) {\n    arr.forEach(cb, scope);\n  } else if (arr) {\n    cb.call(scope, arr);\n  }\n};\n\nmodule.exports = forEachAccumulated;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/forEachAccumulated.js\n ** module id = 38\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactEventEmitterMixin\n */\n\n'use strict';\n\nvar EventPluginHub = require('./EventPluginHub');\n\nfunction runEventQueueInBatch(events) {\n  EventPluginHub.enqueueEvents(events);\n  EventPluginHub.processEventQueue(false);\n}\n\nvar ReactEventEmitterMixin = {\n\n  /**\n   * Streams a fired top-level event to `EventPluginHub` where plugins have the\n   * opportunity to create `ReactEvent`s to be dispatched.\n   *\n   * @param {string} topLevelType Record from `EventConstants`.\n   * @param {object} topLevelTarget The listening component root node.\n   * @param {string} topLevelTargetID ID of `topLevelTarget`.\n   * @param {object} nativeEvent Native environment event.\n   */\n  handleTopLevel: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) {\n    var events = EventPluginHub.extractEvents(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget);\n    runEventQueueInBatch(events);\n  }\n};\n\nmodule.exports = ReactEventEmitterMixin;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactEventEmitterMixin.js\n ** module id = 39\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ViewportMetrics\n */\n\n'use strict';\n\nvar ViewportMetrics = {\n\n  currentScrollLeft: 0,\n\n  currentScrollTop: 0,\n\n  refreshScrollValues: function (scrollPosition) {\n    ViewportMetrics.currentScrollLeft = scrollPosition.x;\n    ViewportMetrics.currentScrollTop = scrollPosition.y;\n  }\n\n};\n\nmodule.exports = ViewportMetrics;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ViewportMetrics.js\n ** module id = 40\n ** module chunks = 4\n **/","/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule Object.assign\n */\n\n// https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.assign\n\n'use strict';\n\nfunction assign(target, sources) {\n  if (target == null) {\n    throw new TypeError('Object.assign target cannot be null or undefined');\n  }\n\n  var to = Object(target);\n  var hasOwnProperty = Object.prototype.hasOwnProperty;\n\n  for (var nextIndex = 1; nextIndex < arguments.length; nextIndex++) {\n    var nextSource = arguments[nextIndex];\n    if (nextSource == null) {\n      continue;\n    }\n\n    var from = Object(nextSource);\n\n    // We don't currently support accessors nor proxies. Therefore this\n    // copy cannot throw. If we ever supported this then we must handle\n    // exceptions and side-effects. We don't support symbols so they won't\n    // be transferred.\n\n    for (var key in from) {\n      if (hasOwnProperty.call(from, key)) {\n        to[key] = from[key];\n      }\n    }\n  }\n\n  return to;\n}\n\nmodule.exports = assign;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/Object.assign.js\n ** module id = 41\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule isEventSupported\n */\n\n'use strict';\n\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\n\nvar useHasFeature;\nif (ExecutionEnvironment.canUseDOM) {\n  useHasFeature = document.implementation && document.implementation.hasFeature &&\n  // always returns true in newer browsers as per the standard.\n  // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature\n  document.implementation.hasFeature('', '') !== true;\n}\n\n/**\n * Checks if an event is supported in the current execution environment.\n *\n * NOTE: This will not work correctly for non-generic events such as `change`,\n * `reset`, `load`, `error`, and `select`.\n *\n * Borrows from Modernizr.\n *\n * @param {string} eventNameSuffix Event name, e.g. \"click\".\n * @param {?boolean} capture Check if the capture phase is supported.\n * @return {boolean} True if the event is supported.\n * @internal\n * @license Modernizr 3.0.0pre (Custom Build) | MIT\n */\nfunction isEventSupported(eventNameSuffix, capture) {\n  if (!ExecutionEnvironment.canUseDOM || capture && !('addEventListener' in document)) {\n    return false;\n  }\n\n  var eventName = 'on' + eventNameSuffix;\n  var isSupported = (eventName in document);\n\n  if (!isSupported) {\n    var element = document.createElement('div');\n    element.setAttribute(eventName, 'return;');\n    isSupported = typeof element[eventName] === 'function';\n  }\n\n  if (!isSupported && useHasFeature && eventNameSuffix === 'wheel') {\n    // This is the only way to test support for the `wheel` event in IE9+.\n    isSupported = document.implementation.hasFeature('Events.wheel', '3.0');\n  }\n\n  return isSupported;\n}\n\nmodule.exports = isEventSupported;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/isEventSupported.js\n ** module id = 42\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMFeatureFlags\n */\n\n'use strict';\n\nvar ReactDOMFeatureFlags = {\n  useCreateElement: false\n};\n\nmodule.exports = ReactDOMFeatureFlags;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMFeatureFlags.js\n ** module id = 43\n ** module chunks = 4\n **/","/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactElement\n */\n\n'use strict';\n\nvar ReactCurrentOwner = require('./ReactCurrentOwner');\n\nvar assign = require('./Object.assign');\nvar canDefineProperty = require('./canDefineProperty');\n\n// The Symbol used to tag the ReactElement type. If there is no native Symbol\n// nor polyfill, then a plain number is used for performance.\nvar REACT_ELEMENT_TYPE = typeof Symbol === 'function' && Symbol['for'] && Symbol['for']('react.element') || 0xeac7;\n\nvar RESERVED_PROPS = {\n  key: true,\n  ref: true,\n  __self: true,\n  __source: true\n};\n\n/**\n * Base constructor for all React elements. This is only used to make this\n * work with a dynamic instanceof check. Nothing should live on this prototype.\n *\n * @param {*} type\n * @param {*} key\n * @param {string|object} ref\n * @param {*} self A *temporary* helper to detect places where `this` is\n * different from the `owner` when React.createElement is called, so that we\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\n * functions, and as long as `this` and owner are the same, there will be no\n * change in behavior.\n * @param {*} source An annotation object (added by a transpiler or otherwise)\n * indicating filename, line number, and/or other information.\n * @param {*} owner\n * @param {*} props\n * @internal\n */\nvar ReactElement = function (type, key, ref, self, source, owner, props) {\n  var element = {\n    // This tag allow us to uniquely identify this as a React Element\n    $$typeof: REACT_ELEMENT_TYPE,\n\n    // Built-in properties that belong on the element\n    type: type,\n    key: key,\n    ref: ref,\n    props: props,\n\n    // Record the component responsible for creating this element.\n    _owner: owner\n  };\n\n  if (process.env.NODE_ENV !== 'production') {\n    // The validation flag is currently mutative. We put it on\n    // an external backing store so that we can freeze the whole object.\n    // This can be replaced with a WeakMap once they are implemented in\n    // commonly used development environments.\n    element._store = {};\n\n    // To make comparing ReactElements easier for testing purposes, we make\n    // the validation flag non-enumerable (where possible, which should\n    // include every environment we run tests in), so the test framework\n    // ignores it.\n    if (canDefineProperty) {\n      Object.defineProperty(element._store, 'validated', {\n        configurable: false,\n        enumerable: false,\n        writable: true,\n        value: false\n      });\n      // self and source are DEV only properties.\n      Object.defineProperty(element, '_self', {\n        configurable: false,\n        enumerable: false,\n        writable: false,\n        value: self\n      });\n      // Two elements created in two different places should be considered\n      // equal for testing purposes and therefore we hide it from enumeration.\n      Object.defineProperty(element, '_source', {\n        configurable: false,\n        enumerable: false,\n        writable: false,\n        value: source\n      });\n    } else {\n      element._store.validated = false;\n      element._self = self;\n      element._source = source;\n    }\n    Object.freeze(element.props);\n    Object.freeze(element);\n  }\n\n  return element;\n};\n\nReactElement.createElement = function (type, config, children) {\n  var propName;\n\n  // Reserved names are extracted\n  var props = {};\n\n  var key = null;\n  var ref = null;\n  var self = null;\n  var source = null;\n\n  if (config != null) {\n    ref = config.ref === undefined ? null : config.ref;\n    key = config.key === undefined ? null : '' + config.key;\n    self = config.__self === undefined ? null : config.__self;\n    source = config.__source === undefined ? null : config.__source;\n    // Remaining properties are added to a new props object\n    for (propName in config) {\n      if (config.hasOwnProperty(propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n        props[propName] = config[propName];\n      }\n    }\n  }\n\n  // Children can be more than one argument, and those are transferred onto\n  // the newly allocated props object.\n  var childrenLength = arguments.length - 2;\n  if (childrenLength === 1) {\n    props.children = children;\n  } else if (childrenLength > 1) {\n    var childArray = Array(childrenLength);\n    for (var i = 0; i < childrenLength; i++) {\n      childArray[i] = arguments[i + 2];\n    }\n    props.children = childArray;\n  }\n\n  // Resolve default props\n  if (type && type.defaultProps) {\n    var defaultProps = type.defaultProps;\n    for (propName in defaultProps) {\n      if (typeof props[propName] === 'undefined') {\n        props[propName] = defaultProps[propName];\n      }\n    }\n  }\n\n  return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\n};\n\nReactElement.createFactory = function (type) {\n  var factory = ReactElement.createElement.bind(null, type);\n  // Expose the type on the factory and the prototype so that it can be\n  // easily accessed on elements. E.g. `<Foo />.type === Foo`.\n  // This should not be named `constructor` since this may not be the function\n  // that created the element, and it may not even be a constructor.\n  // Legacy hook TODO: Warn if this is accessed\n  factory.type = type;\n  return factory;\n};\n\nReactElement.cloneAndReplaceKey = function (oldElement, newKey) {\n  var newElement = ReactElement(oldElement.type, newKey, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, oldElement.props);\n\n  return newElement;\n};\n\nReactElement.cloneAndReplaceProps = function (oldElement, newProps) {\n  var newElement = ReactElement(oldElement.type, oldElement.key, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, newProps);\n\n  if (process.env.NODE_ENV !== 'production') {\n    // If the key on the original is valid, then the clone is valid\n    newElement._store.validated = oldElement._store.validated;\n  }\n\n  return newElement;\n};\n\nReactElement.cloneElement = function (element, config, children) {\n  var propName;\n\n  // Original props are copied\n  var props = assign({}, element.props);\n\n  // Reserved names are extracted\n  var key = element.key;\n  var ref = element.ref;\n  // Self is preserved since the owner is preserved.\n  var self = element._self;\n  // Source is preserved since cloneElement is unlikely to be targeted by a\n  // transpiler, and the original source is probably a better indicator of the\n  // true owner.\n  var source = element._source;\n\n  // Owner will be preserved, unless ref is overridden\n  var owner = element._owner;\n\n  if (config != null) {\n    if (config.ref !== undefined) {\n      // Silently steal the ref from the parent.\n      ref = config.ref;\n      owner = ReactCurrentOwner.current;\n    }\n    if (config.key !== undefined) {\n      key = '' + config.key;\n    }\n    // Remaining properties override existing props\n    for (propName in config) {\n      if (config.hasOwnProperty(propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n        props[propName] = config[propName];\n      }\n    }\n  }\n\n  // Children can be more than one argument, and those are transferred onto\n  // the newly allocated props object.\n  var childrenLength = arguments.length - 2;\n  if (childrenLength === 1) {\n    props.children = children;\n  } else if (childrenLength > 1) {\n    var childArray = Array(childrenLength);\n    for (var i = 0; i < childrenLength; i++) {\n      childArray[i] = arguments[i + 2];\n    }\n    props.children = childArray;\n  }\n\n  return ReactElement(element.type, key, ref, self, source, owner, props);\n};\n\n/**\n * @param {?object} object\n * @return {boolean} True if `object` is a valid component.\n * @final\n */\nReactElement.isValidElement = function (object) {\n  return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n};\n\nmodule.exports = ReactElement;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactElement.js\n ** module id = 44\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule canDefineProperty\n */\n\n'use strict';\n\nvar canDefineProperty = false;\nif (process.env.NODE_ENV !== 'production') {\n  try {\n    Object.defineProperty({}, 'x', { get: function () {} });\n    canDefineProperty = true;\n  } catch (x) {\n    // IE will fail on defineProperty\n  }\n}\n\nmodule.exports = canDefineProperty;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/canDefineProperty.js\n ** module id = 45\n ** module chunks = 4\n **/","/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactEmptyComponentRegistry\n */\n\n'use strict';\n\n// This registry keeps track of the React IDs of the components that rendered to\n// `null` (in reality a placeholder such as `noscript`)\nvar nullComponentIDsRegistry = {};\n\n/**\n * @param {string} id Component's `_rootNodeID`.\n * @return {boolean} True if the component is rendered to null.\n */\nfunction isNullComponentID(id) {\n  return !!nullComponentIDsRegistry[id];\n}\n\n/**\n * Mark the component as having rendered to null.\n * @param {string} id Component's `_rootNodeID`.\n */\nfunction registerNullComponentID(id) {\n  nullComponentIDsRegistry[id] = true;\n}\n\n/**\n * Unmark the component as having rendered to null: it renders to something now.\n * @param {string} id Component's `_rootNodeID`.\n */\nfunction deregisterNullComponentID(id) {\n  delete nullComponentIDsRegistry[id];\n}\n\nvar ReactEmptyComponentRegistry = {\n  isNullComponentID: isNullComponentID,\n  registerNullComponentID: registerNullComponentID,\n  deregisterNullComponentID: deregisterNullComponentID\n};\n\nmodule.exports = ReactEmptyComponentRegistry;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactEmptyComponentRegistry.js\n ** module id = 46\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactInstanceHandles\n * @typechecks static-only\n */\n\n'use strict';\n\nvar ReactRootIndex = require('./ReactRootIndex');\n\nvar invariant = require('fbjs/lib/invariant');\n\nvar SEPARATOR = '.';\nvar SEPARATOR_LENGTH = SEPARATOR.length;\n\n/**\n * Maximum depth of traversals before we consider the possibility of a bad ID.\n */\nvar MAX_TREE_DEPTH = 10000;\n\n/**\n * Creates a DOM ID prefix to use when mounting React components.\n *\n * @param {number} index A unique integer\n * @return {string} React root ID.\n * @internal\n */\nfunction getReactRootIDString(index) {\n  return SEPARATOR + index.toString(36);\n}\n\n/**\n * Checks if a character in the supplied ID is a separator or the end.\n *\n * @param {string} id A React DOM ID.\n * @param {number} index Index of the character to check.\n * @return {boolean} True if the character is a separator or end of the ID.\n * @private\n */\nfunction isBoundary(id, index) {\n  return id.charAt(index) === SEPARATOR || index === id.length;\n}\n\n/**\n * Checks if the supplied string is a valid React DOM ID.\n *\n * @param {string} id A React DOM ID, maybe.\n * @return {boolean} True if the string is a valid React DOM ID.\n * @private\n */\nfunction isValidID(id) {\n  return id === '' || id.charAt(0) === SEPARATOR && id.charAt(id.length - 1) !== SEPARATOR;\n}\n\n/**\n * Checks if the first ID is an ancestor of or equal to the second ID.\n *\n * @param {string} ancestorID\n * @param {string} descendantID\n * @return {boolean} True if `ancestorID` is an ancestor of `descendantID`.\n * @internal\n */\nfunction isAncestorIDOf(ancestorID, descendantID) {\n  return descendantID.indexOf(ancestorID) === 0 && isBoundary(descendantID, ancestorID.length);\n}\n\n/**\n * Gets the parent ID of the supplied React DOM ID, `id`.\n *\n * @param {string} id ID of a component.\n * @return {string} ID of the parent, or an empty string.\n * @private\n */\nfunction getParentID(id) {\n  return id ? id.substr(0, id.lastIndexOf(SEPARATOR)) : '';\n}\n\n/**\n * Gets the next DOM ID on the tree path from the supplied `ancestorID` to the\n * supplied `destinationID`. If they are equal, the ID is returned.\n *\n * @param {string} ancestorID ID of an ancestor node of `destinationID`.\n * @param {string} destinationID ID of the destination node.\n * @return {string} Next ID on the path from `ancestorID` to `destinationID`.\n * @private\n */\nfunction getNextDescendantID(ancestorID, destinationID) {\n  !(isValidID(ancestorID) && isValidID(destinationID)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'getNextDescendantID(%s, %s): Received an invalid React DOM ID.', ancestorID, destinationID) : invariant(false) : undefined;\n  !isAncestorIDOf(ancestorID, destinationID) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'getNextDescendantID(...): React has made an invalid assumption about ' + 'the DOM hierarchy. Expected `%s` to be an ancestor of `%s`.', ancestorID, destinationID) : invariant(false) : undefined;\n  if (ancestorID === destinationID) {\n    return ancestorID;\n  }\n  // Skip over the ancestor and the immediate separator. Traverse until we hit\n  // another separator or we reach the end of `destinationID`.\n  var start = ancestorID.length + SEPARATOR_LENGTH;\n  var i;\n  for (i = start; i < destinationID.length; i++) {\n    if (isBoundary(destinationID, i)) {\n      break;\n    }\n  }\n  return destinationID.substr(0, i);\n}\n\n/**\n * Gets the nearest common ancestor ID of two IDs.\n *\n * Using this ID scheme, the nearest common ancestor ID is the longest common\n * prefix of the two IDs that immediately preceded a \"marker\" in both strings.\n *\n * @param {string} oneID\n * @param {string} twoID\n * @return {string} Nearest common ancestor ID, or the empty string if none.\n * @private\n */\nfunction getFirstCommonAncestorID(oneID, twoID) {\n  var minLength = Math.min(oneID.length, twoID.length);\n  if (minLength === 0) {\n    return '';\n  }\n  var lastCommonMarkerIndex = 0;\n  // Use `<=` to traverse until the \"EOL\" of the shorter string.\n  for (var i = 0; i <= minLength; i++) {\n    if (isBoundary(oneID, i) && isBoundary(twoID, i)) {\n      lastCommonMarkerIndex = i;\n    } else if (oneID.charAt(i) !== twoID.charAt(i)) {\n      break;\n    }\n  }\n  var longestCommonID = oneID.substr(0, lastCommonMarkerIndex);\n  !isValidID(longestCommonID) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'getFirstCommonAncestorID(%s, %s): Expected a valid React DOM ID: %s', oneID, twoID, longestCommonID) : invariant(false) : undefined;\n  return longestCommonID;\n}\n\n/**\n * Traverses the parent path between two IDs (either up or down). The IDs must\n * not be the same, and there must exist a parent path between them. If the\n * callback returns `false`, traversal is stopped.\n *\n * @param {?string} start ID at which to start traversal.\n * @param {?string} stop ID at which to end traversal.\n * @param {function} cb Callback to invoke each ID with.\n * @param {*} arg Argument to invoke the callback with.\n * @param {?boolean} skipFirst Whether or not to skip the first node.\n * @param {?boolean} skipLast Whether or not to skip the last node.\n * @private\n */\nfunction traverseParentPath(start, stop, cb, arg, skipFirst, skipLast) {\n  start = start || '';\n  stop = stop || '';\n  !(start !== stop) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'traverseParentPath(...): Cannot traverse from and to the same ID, `%s`.', start) : invariant(false) : undefined;\n  var traverseUp = isAncestorIDOf(stop, start);\n  !(traverseUp || isAncestorIDOf(start, stop)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'traverseParentPath(%s, %s, ...): Cannot traverse from two IDs that do ' + 'not have a parent path.', start, stop) : invariant(false) : undefined;\n  // Traverse from `start` to `stop` one depth at a time.\n  var depth = 0;\n  var traverse = traverseUp ? getParentID : getNextDescendantID;\n  for (var id = start;; /* until break */id = traverse(id, stop)) {\n    var ret;\n    if ((!skipFirst || id !== start) && (!skipLast || id !== stop)) {\n      ret = cb(id, traverseUp, arg);\n    }\n    if (ret === false || id === stop) {\n      // Only break //after// visiting `stop`.\n      break;\n    }\n    !(depth++ < MAX_TREE_DEPTH) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'traverseParentPath(%s, %s, ...): Detected an infinite loop while ' + 'traversing the React DOM ID tree. This may be due to malformed IDs: %s', start, stop, id) : invariant(false) : undefined;\n  }\n}\n\n/**\n * Manages the IDs assigned to DOM representations of React components. This\n * uses a specific scheme in order to traverse the DOM efficiently (e.g. in\n * order to simulate events).\n *\n * @internal\n */\nvar ReactInstanceHandles = {\n\n  /**\n   * Constructs a React root ID\n   * @return {string} A React root ID.\n   */\n  createReactRootID: function () {\n    return getReactRootIDString(ReactRootIndex.createReactRootIndex());\n  },\n\n  /**\n   * Constructs a React ID by joining a root ID with a name.\n   *\n   * @param {string} rootID Root ID of a parent component.\n   * @param {string} name A component's name (as flattened children).\n   * @return {string} A React ID.\n   * @internal\n   */\n  createReactID: function (rootID, name) {\n    return rootID + name;\n  },\n\n  /**\n   * Gets the DOM ID of the React component that is the root of the tree that\n   * contains the React component with the supplied DOM ID.\n   *\n   * @param {string} id DOM ID of a React component.\n   * @return {?string} DOM ID of the React component that is the root.\n   * @internal\n   */\n  getReactRootIDFromNodeID: function (id) {\n    if (id && id.charAt(0) === SEPARATOR && id.length > 1) {\n      var index = id.indexOf(SEPARATOR, 1);\n      return index > -1 ? id.substr(0, index) : id;\n    }\n    return null;\n  },\n\n  /**\n   * Traverses the ID hierarchy and invokes the supplied `cb` on any IDs that\n   * should would receive a `mouseEnter` or `mouseLeave` event.\n   *\n   * NOTE: Does not invoke the callback on the nearest common ancestor because\n   * nothing \"entered\" or \"left\" that element.\n   *\n   * @param {string} leaveID ID being left.\n   * @param {string} enterID ID being entered.\n   * @param {function} cb Callback to invoke on each entered/left ID.\n   * @param {*} upArg Argument to invoke the callback with on left IDs.\n   * @param {*} downArg Argument to invoke the callback with on entered IDs.\n   * @internal\n   */\n  traverseEnterLeave: function (leaveID, enterID, cb, upArg, downArg) {\n    var ancestorID = getFirstCommonAncestorID(leaveID, enterID);\n    if (ancestorID !== leaveID) {\n      traverseParentPath(leaveID, ancestorID, cb, upArg, false, true);\n    }\n    if (ancestorID !== enterID) {\n      traverseParentPath(ancestorID, enterID, cb, downArg, true, false);\n    }\n  },\n\n  /**\n   * Simulates the traversal of a two-phase, capture/bubble event dispatch.\n   *\n   * NOTE: This traversal happens on IDs without touching the DOM.\n   *\n   * @param {string} targetID ID of the target node.\n   * @param {function} cb Callback to invoke.\n   * @param {*} arg Argument to invoke the callback with.\n   * @internal\n   */\n  traverseTwoPhase: function (targetID, cb, arg) {\n    if (targetID) {\n      traverseParentPath('', targetID, cb, arg, true, false);\n      traverseParentPath(targetID, '', cb, arg, false, true);\n    }\n  },\n\n  /**\n   * Same as `traverseTwoPhase` but skips the `targetID`.\n   */\n  traverseTwoPhaseSkipTarget: function (targetID, cb, arg) {\n    if (targetID) {\n      traverseParentPath('', targetID, cb, arg, true, true);\n      traverseParentPath(targetID, '', cb, arg, true, true);\n    }\n  },\n\n  /**\n   * Traverse a node ID, calling the supplied `cb` for each ancestor ID. For\n   * example, passing `.0.$row-0.1` would result in `cb` getting called\n   * with `.0`, `.0.$row-0`, and `.0.$row-0.1`.\n   *\n   * NOTE: This traversal happens on IDs without touching the DOM.\n   *\n   * @param {string} targetID ID of the target node.\n   * @param {function} cb Callback to invoke.\n   * @param {*} arg Argument to invoke the callback with.\n   * @internal\n   */\n  traverseAncestors: function (targetID, cb, arg) {\n    traverseParentPath('', targetID, cb, arg, true, false);\n  },\n\n  getFirstCommonAncestorID: getFirstCommonAncestorID,\n\n  /**\n   * Exposed for unit testing.\n   * @private\n   */\n  _getNextDescendantID: getNextDescendantID,\n\n  isAncestorIDOf: isAncestorIDOf,\n\n  SEPARATOR: SEPARATOR\n\n};\n\nmodule.exports = ReactInstanceHandles;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactInstanceHandles.js\n ** module id = 47\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactRootIndex\n * @typechecks\n */\n\n'use strict';\n\nvar ReactRootIndexInjection = {\n  /**\n   * @param {function} _createReactRootIndex\n   */\n  injectCreateReactRootIndex: function (_createReactRootIndex) {\n    ReactRootIndex.createReactRootIndex = _createReactRootIndex;\n  }\n};\n\nvar ReactRootIndex = {\n  createReactRootIndex: null,\n  injection: ReactRootIndexInjection\n};\n\nmodule.exports = ReactRootIndex;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactRootIndex.js\n ** module id = 48\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactInstanceMap\n */\n\n'use strict';\n\n/**\n * `ReactInstanceMap` maintains a mapping from a public facing stateful\n * instance (key) and the internal representation (value). This allows public\n * methods to accept the user facing instance as an argument and map them back\n * to internal methods.\n */\n\n// TODO: Replace this with ES6: var ReactInstanceMap = new Map();\nvar ReactInstanceMap = {\n\n  /**\n   * This API should be called `delete` but we'd have to make sure to always\n   * transform these to strings for IE support. When this transform is fully\n   * supported we can rename it.\n   */\n  remove: function (key) {\n    key._reactInternalInstance = undefined;\n  },\n\n  get: function (key) {\n    return key._reactInternalInstance;\n  },\n\n  has: function (key) {\n    return key._reactInternalInstance !== undefined;\n  },\n\n  set: function (key, value) {\n    key._reactInternalInstance = value;\n  }\n\n};\n\nmodule.exports = ReactInstanceMap;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactInstanceMap.js\n ** module id = 49\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactMarkupChecksum\n */\n\n'use strict';\n\nvar adler32 = require('./adler32');\n\nvar TAG_END = /\\/?>/;\n\nvar ReactMarkupChecksum = {\n  CHECKSUM_ATTR_NAME: 'data-react-checksum',\n\n  /**\n   * @param {string} markup Markup string\n   * @return {string} Markup string with checksum attribute attached\n   */\n  addChecksumToMarkup: function (markup) {\n    var checksum = adler32(markup);\n\n    // Add checksum (handle both parent tags and self-closing tags)\n    return markup.replace(TAG_END, ' ' + ReactMarkupChecksum.CHECKSUM_ATTR_NAME + '=\"' + checksum + '\"$&');\n  },\n\n  /**\n   * @param {string} markup to use\n   * @param {DOMElement} element root React element\n   * @returns {boolean} whether or not the markup is the same\n   */\n  canReuseMarkup: function (markup, element) {\n    var existingChecksum = element.getAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME);\n    existingChecksum = existingChecksum && parseInt(existingChecksum, 10);\n    var markupChecksum = adler32(markup);\n    return markupChecksum === existingChecksum;\n  }\n};\n\nmodule.exports = ReactMarkupChecksum;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactMarkupChecksum.js\n ** module id = 50\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule adler32\n */\n\n'use strict';\n\nvar MOD = 65521;\n\n// adler32 is not cryptographically strong, and is only used to sanity check that\n// markup generated on the server matches the markup generated on the client.\n// This implementation (a modified version of the SheetJS version) has been optimized\n// for our use case, at the expense of conforming to the adler32 specification\n// for non-ascii inputs.\nfunction adler32(data) {\n  var a = 1;\n  var b = 0;\n  var i = 0;\n  var l = data.length;\n  var m = l & ~0x3;\n  while (i < m) {\n    for (; i < Math.min(i + 4096, m); i += 4) {\n      b += (a += data.charCodeAt(i)) + (a += data.charCodeAt(i + 1)) + (a += data.charCodeAt(i + 2)) + (a += data.charCodeAt(i + 3));\n    }\n    a %= MOD;\n    b %= MOD;\n  }\n  for (; i < l; i++) {\n    b += a += data.charCodeAt(i);\n  }\n  a %= MOD;\n  b %= MOD;\n  return a | b << 16;\n}\n\nmodule.exports = adler32;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/adler32.js\n ** module id = 51\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactReconciler\n */\n\n'use strict';\n\nvar ReactRef = require('./ReactRef');\n\n/**\n * Helper to call ReactRef.attachRefs with this composite component, split out\n * to avoid allocations in the transaction mount-ready queue.\n */\nfunction attachRefs() {\n  ReactRef.attachRefs(this, this._currentElement);\n}\n\nvar ReactReconciler = {\n\n  /**\n   * Initializes the component, renders markup, and registers event listeners.\n   *\n   * @param {ReactComponent} internalInstance\n   * @param {string} rootID DOM ID of the root node.\n   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\n   * @return {?string} Rendered markup to be inserted into the DOM.\n   * @final\n   * @internal\n   */\n  mountComponent: function (internalInstance, rootID, transaction, context) {\n    var markup = internalInstance.mountComponent(rootID, transaction, context);\n    if (internalInstance._currentElement && internalInstance._currentElement.ref != null) {\n      transaction.getReactMountReady().enqueue(attachRefs, internalInstance);\n    }\n    return markup;\n  },\n\n  /**\n   * Releases any resources allocated by `mountComponent`.\n   *\n   * @final\n   * @internal\n   */\n  unmountComponent: function (internalInstance) {\n    ReactRef.detachRefs(internalInstance, internalInstance._currentElement);\n    internalInstance.unmountComponent();\n  },\n\n  /**\n   * Update a component using a new element.\n   *\n   * @param {ReactComponent} internalInstance\n   * @param {ReactElement} nextElement\n   * @param {ReactReconcileTransaction} transaction\n   * @param {object} context\n   * @internal\n   */\n  receiveComponent: function (internalInstance, nextElement, transaction, context) {\n    var prevElement = internalInstance._currentElement;\n\n    if (nextElement === prevElement && context === internalInstance._context) {\n      // Since elements are immutable after the owner is rendered,\n      // we can do a cheap identity compare here to determine if this is a\n      // superfluous reconcile. It's possible for state to be mutable but such\n      // change should trigger an update of the owner which would recreate\n      // the element. We explicitly check for the existence of an owner since\n      // it's possible for an element created outside a composite to be\n      // deeply mutated and reused.\n\n      // TODO: Bailing out early is just a perf optimization right?\n      // TODO: Removing the return statement should affect correctness?\n      return;\n    }\n\n    var refsChanged = ReactRef.shouldUpdateRefs(prevElement, nextElement);\n\n    if (refsChanged) {\n      ReactRef.detachRefs(internalInstance, prevElement);\n    }\n\n    internalInstance.receiveComponent(nextElement, transaction, context);\n\n    if (refsChanged && internalInstance._currentElement && internalInstance._currentElement.ref != null) {\n      transaction.getReactMountReady().enqueue(attachRefs, internalInstance);\n    }\n  },\n\n  /**\n   * Flush any dirty changes in a component.\n   *\n   * @param {ReactComponent} internalInstance\n   * @param {ReactReconcileTransaction} transaction\n   * @internal\n   */\n  performUpdateIfNecessary: function (internalInstance, transaction) {\n    internalInstance.performUpdateIfNecessary(transaction);\n  }\n\n};\n\nmodule.exports = ReactReconciler;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactReconciler.js\n ** module id = 52\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactRef\n */\n\n'use strict';\n\nvar ReactOwner = require('./ReactOwner');\n\nvar ReactRef = {};\n\nfunction attachRef(ref, component, owner) {\n  if (typeof ref === 'function') {\n    ref(component.getPublicInstance());\n  } else {\n    // Legacy ref\n    ReactOwner.addComponentAsRefTo(component, ref, owner);\n  }\n}\n\nfunction detachRef(ref, component, owner) {\n  if (typeof ref === 'function') {\n    ref(null);\n  } else {\n    // Legacy ref\n    ReactOwner.removeComponentAsRefFrom(component, ref, owner);\n  }\n}\n\nReactRef.attachRefs = function (instance, element) {\n  if (element === null || element === false) {\n    return;\n  }\n  var ref = element.ref;\n  if (ref != null) {\n    attachRef(ref, instance, element._owner);\n  }\n};\n\nReactRef.shouldUpdateRefs = function (prevElement, nextElement) {\n  // If either the owner or a `ref` has changed, make sure the newest owner\n  // has stored a reference to `this`, and the previous owner (if different)\n  // has forgotten the reference to `this`. We use the element instead\n  // of the public this.props because the post processing cannot determine\n  // a ref. The ref conceptually lives on the element.\n\n  // TODO: Should this even be possible? The owner cannot change because\n  // it's forbidden by shouldUpdateReactComponent. The ref can change\n  // if you swap the keys of but not the refs. Reconsider where this check\n  // is made. It probably belongs where the key checking and\n  // instantiateReactComponent is done.\n\n  var prevEmpty = prevElement === null || prevElement === false;\n  var nextEmpty = nextElement === null || nextElement === false;\n\n  return(\n    // This has a few false positives w/r/t empty components.\n    prevEmpty || nextEmpty || nextElement._owner !== prevElement._owner || nextElement.ref !== prevElement.ref\n  );\n};\n\nReactRef.detachRefs = function (instance, element) {\n  if (element === null || element === false) {\n    return;\n  }\n  var ref = element.ref;\n  if (ref != null) {\n    detachRef(ref, instance, element._owner);\n  }\n};\n\nmodule.exports = ReactRef;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactRef.js\n ** module id = 53\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactOwner\n */\n\n'use strict';\n\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * ReactOwners are capable of storing references to owned components.\n *\n * All components are capable of //being// referenced by owner components, but\n * only ReactOwner components are capable of //referencing// owned components.\n * The named reference is known as a \"ref\".\n *\n * Refs are available when mounted and updated during reconciliation.\n *\n *   var MyComponent = React.createClass({\n *     render: function() {\n *       return (\n *         <div onClick={this.handleClick}>\n *           <CustomComponent ref=\"custom\" />\n *         </div>\n *       );\n *     },\n *     handleClick: function() {\n *       this.refs.custom.handleClick();\n *     },\n *     componentDidMount: function() {\n *       this.refs.custom.initialize();\n *     }\n *   });\n *\n * Refs should rarely be used. When refs are used, they should only be done to\n * control data that is not handled by React's data flow.\n *\n * @class ReactOwner\n */\nvar ReactOwner = {\n\n  /**\n   * @param {?object} object\n   * @return {boolean} True if `object` is a valid owner.\n   * @final\n   */\n  isValidOwner: function (object) {\n    return !!(object && typeof object.attachRef === 'function' && typeof object.detachRef === 'function');\n  },\n\n  /**\n   * Adds a component by ref to an owner component.\n   *\n   * @param {ReactComponent} component Component to reference.\n   * @param {string} ref Name by which to refer to the component.\n   * @param {ReactOwner} owner Component on which to record the ref.\n   * @final\n   * @internal\n   */\n  addComponentAsRefTo: function (component, ref, owner) {\n    !ReactOwner.isValidOwner(owner) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'addComponentAsRefTo(...): Only a ReactOwner can have refs. You might ' + 'be adding a ref to a component that was not created inside a component\\'s ' + '`render` method, or you have multiple copies of React loaded ' + '(details: https://fb.me/react-refs-must-have-owner).') : invariant(false) : undefined;\n    owner.attachRef(ref, component);\n  },\n\n  /**\n   * Removes a component by ref from an owner component.\n   *\n   * @param {ReactComponent} component Component to dereference.\n   * @param {string} ref Name of the ref to remove.\n   * @param {ReactOwner} owner Component on which the ref is recorded.\n   * @final\n   * @internal\n   */\n  removeComponentAsRefFrom: function (component, ref, owner) {\n    !ReactOwner.isValidOwner(owner) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'removeComponentAsRefFrom(...): Only a ReactOwner can have refs. You might ' + 'be removing a ref to a component that was not created inside a component\\'s ' + '`render` method, or you have multiple copies of React loaded ' + '(details: https://fb.me/react-refs-must-have-owner).') : invariant(false) : undefined;\n    // Check that `component` is still the current ref because we do not want to\n    // detach the ref if another component stole it.\n    if (owner.getPublicInstance().refs[ref] === component.getPublicInstance()) {\n      owner.detachRef(ref);\n    }\n  }\n\n};\n\nmodule.exports = ReactOwner;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactOwner.js\n ** module id = 54\n ** module chunks = 4\n **/","/**\n * Copyright 2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactUpdateQueue\n */\n\n'use strict';\n\nvar ReactCurrentOwner = require('./ReactCurrentOwner');\nvar ReactElement = require('./ReactElement');\nvar ReactInstanceMap = require('./ReactInstanceMap');\nvar ReactUpdates = require('./ReactUpdates');\n\nvar assign = require('./Object.assign');\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\nfunction enqueueUpdate(internalInstance) {\n  ReactUpdates.enqueueUpdate(internalInstance);\n}\n\nfunction getInternalInstanceReadyForUpdate(publicInstance, callerName) {\n  var internalInstance = ReactInstanceMap.get(publicInstance);\n  if (!internalInstance) {\n    if (process.env.NODE_ENV !== 'production') {\n      // Only warn when we have a callerName. Otherwise we should be silent.\n      // We're probably calling from enqueueCallback. We don't want to warn\n      // there because we already warned for the corresponding lifecycle method.\n      process.env.NODE_ENV !== 'production' ? warning(!callerName, '%s(...): Can only update a mounted or mounting component. ' + 'This usually means you called %s() on an unmounted component. ' + 'This is a no-op. Please check the code for the %s component.', callerName, callerName, publicInstance.constructor.displayName) : undefined;\n    }\n    return null;\n  }\n\n  if (process.env.NODE_ENV !== 'production') {\n    process.env.NODE_ENV !== 'production' ? warning(ReactCurrentOwner.current == null, '%s(...): Cannot update during an existing state transition ' + '(such as within `render`). Render methods should be a pure function ' + 'of props and state.', callerName) : undefined;\n  }\n\n  return internalInstance;\n}\n\n/**\n * ReactUpdateQueue allows for state updates to be scheduled into a later\n * reconciliation step.\n */\nvar ReactUpdateQueue = {\n\n  /**\n   * Checks whether or not this composite component is mounted.\n   * @param {ReactClass} publicInstance The instance we want to test.\n   * @return {boolean} True if mounted, false otherwise.\n   * @protected\n   * @final\n   */\n  isMounted: function (publicInstance) {\n    if (process.env.NODE_ENV !== 'production') {\n      var owner = ReactCurrentOwner.current;\n      if (owner !== null) {\n        process.env.NODE_ENV !== 'production' ? warning(owner._warnedAboutRefsInRender, '%s is accessing isMounted inside its render() function. ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', owner.getName() || 'A component') : undefined;\n        owner._warnedAboutRefsInRender = true;\n      }\n    }\n    var internalInstance = ReactInstanceMap.get(publicInstance);\n    if (internalInstance) {\n      // During componentWillMount and render this will still be null but after\n      // that will always render to something. At least for now. So we can use\n      // this hack.\n      return !!internalInstance._renderedComponent;\n    } else {\n      return false;\n    }\n  },\n\n  /**\n   * Enqueue a callback that will be executed after all the pending updates\n   * have processed.\n   *\n   * @param {ReactClass} publicInstance The instance to use as `this` context.\n   * @param {?function} callback Called after state is updated.\n   * @internal\n   */\n  enqueueCallback: function (publicInstance, callback) {\n    !(typeof callback === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'enqueueCallback(...): You called `setProps`, `replaceProps`, ' + '`setState`, `replaceState`, or `forceUpdate` with a callback that ' + 'isn\\'t callable.') : invariant(false) : undefined;\n    var internalInstance = getInternalInstanceReadyForUpdate(publicInstance);\n\n    // Previously we would throw an error if we didn't have an internal\n    // instance. Since we want to make it a no-op instead, we mirror the same\n    // behavior we have in other enqueue* methods.\n    // We also need to ignore callbacks in componentWillMount. See\n    // enqueueUpdates.\n    if (!internalInstance) {\n      return null;\n    }\n\n    if (internalInstance._pendingCallbacks) {\n      internalInstance._pendingCallbacks.push(callback);\n    } else {\n      internalInstance._pendingCallbacks = [callback];\n    }\n    // TODO: The callback here is ignored when setState is called from\n    // componentWillMount. Either fix it or disallow doing so completely in\n    // favor of getInitialState. Alternatively, we can disallow\n    // componentWillMount during server-side rendering.\n    enqueueUpdate(internalInstance);\n  },\n\n  enqueueCallbackInternal: function (internalInstance, callback) {\n    !(typeof callback === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'enqueueCallback(...): You called `setProps`, `replaceProps`, ' + '`setState`, `replaceState`, or `forceUpdate` with a callback that ' + 'isn\\'t callable.') : invariant(false) : undefined;\n    if (internalInstance._pendingCallbacks) {\n      internalInstance._pendingCallbacks.push(callback);\n    } else {\n      internalInstance._pendingCallbacks = [callback];\n    }\n    enqueueUpdate(internalInstance);\n  },\n\n  /**\n   * Forces an update. This should only be invoked when it is known with\n   * certainty that we are **not** in a DOM transaction.\n   *\n   * You may want to call this when you know that some deeper aspect of the\n   * component's state has changed but `setState` was not called.\n   *\n   * This will not invoke `shouldComponentUpdate`, but it will invoke\n   * `componentWillUpdate` and `componentDidUpdate`.\n   *\n   * @param {ReactClass} publicInstance The instance that should rerender.\n   * @internal\n   */\n  enqueueForceUpdate: function (publicInstance) {\n    var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'forceUpdate');\n\n    if (!internalInstance) {\n      return;\n    }\n\n    internalInstance._pendingForceUpdate = true;\n\n    enqueueUpdate(internalInstance);\n  },\n\n  /**\n   * Replaces all of the state. Always use this or `setState` to mutate state.\n   * You should treat `this.state` as immutable.\n   *\n   * There is no guarantee that `this.state` will be immediately updated, so\n   * accessing `this.state` after calling this method may return the old value.\n   *\n   * @param {ReactClass} publicInstance The instance that should rerender.\n   * @param {object} completeState Next state.\n   * @internal\n   */\n  enqueueReplaceState: function (publicInstance, completeState) {\n    var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'replaceState');\n\n    if (!internalInstance) {\n      return;\n    }\n\n    internalInstance._pendingStateQueue = [completeState];\n    internalInstance._pendingReplaceState = true;\n\n    enqueueUpdate(internalInstance);\n  },\n\n  /**\n   * Sets a subset of the state. This only exists because _pendingState is\n   * internal. This provides a merging strategy that is not available to deep\n   * properties which is confusing. TODO: Expose pendingState or don't use it\n   * during the merge.\n   *\n   * @param {ReactClass} publicInstance The instance that should rerender.\n   * @param {object} partialState Next partial state to be merged with state.\n   * @internal\n   */\n  enqueueSetState: function (publicInstance, partialState) {\n    var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'setState');\n\n    if (!internalInstance) {\n      return;\n    }\n\n    var queue = internalInstance._pendingStateQueue || (internalInstance._pendingStateQueue = []);\n    queue.push(partialState);\n\n    enqueueUpdate(internalInstance);\n  },\n\n  /**\n   * Sets a subset of the props.\n   *\n   * @param {ReactClass} publicInstance The instance that should rerender.\n   * @param {object} partialProps Subset of the next props.\n   * @internal\n   */\n  enqueueSetProps: function (publicInstance, partialProps) {\n    var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'setProps');\n    if (!internalInstance) {\n      return;\n    }\n    ReactUpdateQueue.enqueueSetPropsInternal(internalInstance, partialProps);\n  },\n\n  enqueueSetPropsInternal: function (internalInstance, partialProps) {\n    var topLevelWrapper = internalInstance._topLevelWrapper;\n    !topLevelWrapper ? process.env.NODE_ENV !== 'production' ? invariant(false, 'setProps(...): You called `setProps` on a ' + 'component with a parent. This is an anti-pattern since props will ' + 'get reactively updated when rendered. Instead, change the owner\\'s ' + '`render` method to pass the correct value as props to the component ' + 'where it is created.') : invariant(false) : undefined;\n\n    // Merge with the pending element if it exists, otherwise with existing\n    // element props.\n    var wrapElement = topLevelWrapper._pendingElement || topLevelWrapper._currentElement;\n    var element = wrapElement.props;\n    var props = assign({}, element.props, partialProps);\n    topLevelWrapper._pendingElement = ReactElement.cloneAndReplaceProps(wrapElement, ReactElement.cloneAndReplaceProps(element, props));\n\n    enqueueUpdate(topLevelWrapper);\n  },\n\n  /**\n   * Replaces all of the props.\n   *\n   * @param {ReactClass} publicInstance The instance that should rerender.\n   * @param {object} props New props.\n   * @internal\n   */\n  enqueueReplaceProps: function (publicInstance, props) {\n    var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'replaceProps');\n    if (!internalInstance) {\n      return;\n    }\n    ReactUpdateQueue.enqueueReplacePropsInternal(internalInstance, props);\n  },\n\n  enqueueReplacePropsInternal: function (internalInstance, props) {\n    var topLevelWrapper = internalInstance._topLevelWrapper;\n    !topLevelWrapper ? process.env.NODE_ENV !== 'production' ? invariant(false, 'replaceProps(...): You called `replaceProps` on a ' + 'component with a parent. This is an anti-pattern since props will ' + 'get reactively updated when rendered. Instead, change the owner\\'s ' + '`render` method to pass the correct value as props to the component ' + 'where it is created.') : invariant(false) : undefined;\n\n    // Merge with the pending element if it exists, otherwise with existing\n    // element props.\n    var wrapElement = topLevelWrapper._pendingElement || topLevelWrapper._currentElement;\n    var element = wrapElement.props;\n    topLevelWrapper._pendingElement = ReactElement.cloneAndReplaceProps(wrapElement, ReactElement.cloneAndReplaceProps(element, props));\n\n    enqueueUpdate(topLevelWrapper);\n  },\n\n  enqueueElementInternal: function (internalInstance, newElement) {\n    internalInstance._pendingElement = newElement;\n    enqueueUpdate(internalInstance);\n  }\n\n};\n\nmodule.exports = ReactUpdateQueue;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactUpdateQueue.js\n ** module id = 55\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactUpdates\n */\n\n'use strict';\n\nvar CallbackQueue = require('./CallbackQueue');\nvar PooledClass = require('./PooledClass');\nvar ReactPerf = require('./ReactPerf');\nvar ReactReconciler = require('./ReactReconciler');\nvar Transaction = require('./Transaction');\n\nvar assign = require('./Object.assign');\nvar invariant = require('fbjs/lib/invariant');\n\nvar dirtyComponents = [];\nvar asapCallbackQueue = CallbackQueue.getPooled();\nvar asapEnqueued = false;\n\nvar batchingStrategy = null;\n\nfunction ensureInjected() {\n  !(ReactUpdates.ReactReconcileTransaction && batchingStrategy) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must inject a reconcile transaction class and batching ' + 'strategy') : invariant(false) : undefined;\n}\n\nvar NESTED_UPDATES = {\n  initialize: function () {\n    this.dirtyComponentsLength = dirtyComponents.length;\n  },\n  close: function () {\n    if (this.dirtyComponentsLength !== dirtyComponents.length) {\n      // Additional updates were enqueued by componentDidUpdate handlers or\n      // similar; before our own UPDATE_QUEUEING wrapper closes, we want to run\n      // these new updates so that if A's componentDidUpdate calls setState on\n      // B, B will update before the callback A's updater provided when calling\n      // setState.\n      dirtyComponents.splice(0, this.dirtyComponentsLength);\n      flushBatchedUpdates();\n    } else {\n      dirtyComponents.length = 0;\n    }\n  }\n};\n\nvar UPDATE_QUEUEING = {\n  initialize: function () {\n    this.callbackQueue.reset();\n  },\n  close: function () {\n    this.callbackQueue.notifyAll();\n  }\n};\n\nvar TRANSACTION_WRAPPERS = [NESTED_UPDATES, UPDATE_QUEUEING];\n\nfunction ReactUpdatesFlushTransaction() {\n  this.reinitializeTransaction();\n  this.dirtyComponentsLength = null;\n  this.callbackQueue = CallbackQueue.getPooled();\n  this.reconcileTransaction = ReactUpdates.ReactReconcileTransaction.getPooled( /* forceHTML */false);\n}\n\nassign(ReactUpdatesFlushTransaction.prototype, Transaction.Mixin, {\n  getTransactionWrappers: function () {\n    return TRANSACTION_WRAPPERS;\n  },\n\n  destructor: function () {\n    this.dirtyComponentsLength = null;\n    CallbackQueue.release(this.callbackQueue);\n    this.callbackQueue = null;\n    ReactUpdates.ReactReconcileTransaction.release(this.reconcileTransaction);\n    this.reconcileTransaction = null;\n  },\n\n  perform: function (method, scope, a) {\n    // Essentially calls `this.reconcileTransaction.perform(method, scope, a)`\n    // with this transaction's wrappers around it.\n    return Transaction.Mixin.perform.call(this, this.reconcileTransaction.perform, this.reconcileTransaction, method, scope, a);\n  }\n});\n\nPooledClass.addPoolingTo(ReactUpdatesFlushTransaction);\n\nfunction batchedUpdates(callback, a, b, c, d, e) {\n  ensureInjected();\n  batchingStrategy.batchedUpdates(callback, a, b, c, d, e);\n}\n\n/**\n * Array comparator for ReactComponents by mount ordering.\n *\n * @param {ReactComponent} c1 first component you're comparing\n * @param {ReactComponent} c2 second component you're comparing\n * @return {number} Return value usable by Array.prototype.sort().\n */\nfunction mountOrderComparator(c1, c2) {\n  return c1._mountOrder - c2._mountOrder;\n}\n\nfunction runBatchedUpdates(transaction) {\n  var len = transaction.dirtyComponentsLength;\n  !(len === dirtyComponents.length) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected flush transaction\\'s stored dirty-components length (%s) to ' + 'match dirty-components array length (%s).', len, dirtyComponents.length) : invariant(false) : undefined;\n\n  // Since reconciling a component higher in the owner hierarchy usually (not\n  // always -- see shouldComponentUpdate()) will reconcile children, reconcile\n  // them before their children by sorting the array.\n  dirtyComponents.sort(mountOrderComparator);\n\n  for (var i = 0; i < len; i++) {\n    // If a component is unmounted before pending changes apply, it will still\n    // be here, but we assume that it has cleared its _pendingCallbacks and\n    // that performUpdateIfNecessary is a noop.\n    var component = dirtyComponents[i];\n\n    // If performUpdateIfNecessary happens to enqueue any new updates, we\n    // shouldn't execute the callbacks until the next render happens, so\n    // stash the callbacks first\n    var callbacks = component._pendingCallbacks;\n    component._pendingCallbacks = null;\n\n    ReactReconciler.performUpdateIfNecessary(component, transaction.reconcileTransaction);\n\n    if (callbacks) {\n      for (var j = 0; j < callbacks.length; j++) {\n        transaction.callbackQueue.enqueue(callbacks[j], component.getPublicInstance());\n      }\n    }\n  }\n}\n\nvar flushBatchedUpdates = function () {\n  // ReactUpdatesFlushTransaction's wrappers will clear the dirtyComponents\n  // array and perform any updates enqueued by mount-ready handlers (i.e.,\n  // componentDidUpdate) but we need to check here too in order to catch\n  // updates enqueued by setState callbacks and asap calls.\n  while (dirtyComponents.length || asapEnqueued) {\n    if (dirtyComponents.length) {\n      var transaction = ReactUpdatesFlushTransaction.getPooled();\n      transaction.perform(runBatchedUpdates, null, transaction);\n      ReactUpdatesFlushTransaction.release(transaction);\n    }\n\n    if (asapEnqueued) {\n      asapEnqueued = false;\n      var queue = asapCallbackQueue;\n      asapCallbackQueue = CallbackQueue.getPooled();\n      queue.notifyAll();\n      CallbackQueue.release(queue);\n    }\n  }\n};\nflushBatchedUpdates = ReactPerf.measure('ReactUpdates', 'flushBatchedUpdates', flushBatchedUpdates);\n\n/**\n * Mark a component as needing a rerender, adding an optional callback to a\n * list of functions which will be executed once the rerender occurs.\n */\nfunction enqueueUpdate(component) {\n  ensureInjected();\n\n  // Various parts of our code (such as ReactCompositeComponent's\n  // _renderValidatedComponent) assume that calls to render aren't nested;\n  // verify that that's the case. (This is called by each top-level update\n  // function, like setProps, setState, forceUpdate, etc.; creation and\n  // destruction of top-level components is guarded in ReactMount.)\n\n  if (!batchingStrategy.isBatchingUpdates) {\n    batchingStrategy.batchedUpdates(enqueueUpdate, component);\n    return;\n  }\n\n  dirtyComponents.push(component);\n}\n\n/**\n * Enqueue a callback to be run at the end of the current batching cycle. Throws\n * if no updates are currently being performed.\n */\nfunction asap(callback, context) {\n  !batchingStrategy.isBatchingUpdates ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates.asap: Can\\'t enqueue an asap callback in a context where' + 'updates are not being batched.') : invariant(false) : undefined;\n  asapCallbackQueue.enqueue(callback, context);\n  asapEnqueued = true;\n}\n\nvar ReactUpdatesInjection = {\n  injectReconcileTransaction: function (ReconcileTransaction) {\n    !ReconcileTransaction ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must provide a reconcile transaction class') : invariant(false) : undefined;\n    ReactUpdates.ReactReconcileTransaction = ReconcileTransaction;\n  },\n\n  injectBatchingStrategy: function (_batchingStrategy) {\n    !_batchingStrategy ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must provide a batching strategy') : invariant(false) : undefined;\n    !(typeof _batchingStrategy.batchedUpdates === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must provide a batchedUpdates() function') : invariant(false) : undefined;\n    !(typeof _batchingStrategy.isBatchingUpdates === 'boolean') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must provide an isBatchingUpdates boolean attribute') : invariant(false) : undefined;\n    batchingStrategy = _batchingStrategy;\n  }\n};\n\nvar ReactUpdates = {\n  /**\n   * React references `ReactReconcileTransaction` using this property in order\n   * to allow dependency injection.\n   *\n   * @internal\n   */\n  ReactReconcileTransaction: null,\n\n  batchedUpdates: batchedUpdates,\n  enqueueUpdate: enqueueUpdate,\n  flushBatchedUpdates: flushBatchedUpdates,\n  injection: ReactUpdatesInjection,\n  asap: asap\n};\n\nmodule.exports = ReactUpdates;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactUpdates.js\n ** module id = 56\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule CallbackQueue\n */\n\n'use strict';\n\nvar PooledClass = require('./PooledClass');\n\nvar assign = require('./Object.assign');\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * A specialized pseudo-event module to help keep track of components waiting to\n * be notified when their DOM representations are available for use.\n *\n * This implements `PooledClass`, so you should never need to instantiate this.\n * Instead, use `CallbackQueue.getPooled()`.\n *\n * @class ReactMountReady\n * @implements PooledClass\n * @internal\n */\nfunction CallbackQueue() {\n  this._callbacks = null;\n  this._contexts = null;\n}\n\nassign(CallbackQueue.prototype, {\n\n  /**\n   * Enqueues a callback to be invoked when `notifyAll` is invoked.\n   *\n   * @param {function} callback Invoked when `notifyAll` is invoked.\n   * @param {?object} context Context to call `callback` with.\n   * @internal\n   */\n  enqueue: function (callback, context) {\n    this._callbacks = this._callbacks || [];\n    this._contexts = this._contexts || [];\n    this._callbacks.push(callback);\n    this._contexts.push(context);\n  },\n\n  /**\n   * Invokes all enqueued callbacks and clears the queue. This is invoked after\n   * the DOM representation of a component has been created or updated.\n   *\n   * @internal\n   */\n  notifyAll: function () {\n    var callbacks = this._callbacks;\n    var contexts = this._contexts;\n    if (callbacks) {\n      !(callbacks.length === contexts.length) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Mismatched list of contexts in callback queue') : invariant(false) : undefined;\n      this._callbacks = null;\n      this._contexts = null;\n      for (var i = 0; i < callbacks.length; i++) {\n        callbacks[i].call(contexts[i]);\n      }\n      callbacks.length = 0;\n      contexts.length = 0;\n    }\n  },\n\n  /**\n   * Resets the internal queue.\n   *\n   * @internal\n   */\n  reset: function () {\n    this._callbacks = null;\n    this._contexts = null;\n  },\n\n  /**\n   * `PooledClass` looks for this.\n   */\n  destructor: function () {\n    this.reset();\n  }\n\n});\n\nPooledClass.addPoolingTo(CallbackQueue);\n\nmodule.exports = CallbackQueue;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/CallbackQueue.js\n ** module id = 57\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule PooledClass\n */\n\n'use strict';\n\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * Static poolers. Several custom versions for each potential number of\n * arguments. A completely generic pooler is easy to implement, but would\n * require accessing the `arguments` object. In each of these, `this` refers to\n * the Class itself, not an instance. If any others are needed, simply add them\n * here, or in their own files.\n */\nvar oneArgumentPooler = function (copyFieldsFrom) {\n  var Klass = this;\n  if (Klass.instancePool.length) {\n    var instance = Klass.instancePool.pop();\n    Klass.call(instance, copyFieldsFrom);\n    return instance;\n  } else {\n    return new Klass(copyFieldsFrom);\n  }\n};\n\nvar twoArgumentPooler = function (a1, a2) {\n  var Klass = this;\n  if (Klass.instancePool.length) {\n    var instance = Klass.instancePool.pop();\n    Klass.call(instance, a1, a2);\n    return instance;\n  } else {\n    return new Klass(a1, a2);\n  }\n};\n\nvar threeArgumentPooler = function (a1, a2, a3) {\n  var Klass = this;\n  if (Klass.instancePool.length) {\n    var instance = Klass.instancePool.pop();\n    Klass.call(instance, a1, a2, a3);\n    return instance;\n  } else {\n    return new Klass(a1, a2, a3);\n  }\n};\n\nvar fourArgumentPooler = function (a1, a2, a3, a4) {\n  var Klass = this;\n  if (Klass.instancePool.length) {\n    var instance = Klass.instancePool.pop();\n    Klass.call(instance, a1, a2, a3, a4);\n    return instance;\n  } else {\n    return new Klass(a1, a2, a3, a4);\n  }\n};\n\nvar fiveArgumentPooler = function (a1, a2, a3, a4, a5) {\n  var Klass = this;\n  if (Klass.instancePool.length) {\n    var instance = Klass.instancePool.pop();\n    Klass.call(instance, a1, a2, a3, a4, a5);\n    return instance;\n  } else {\n    return new Klass(a1, a2, a3, a4, a5);\n  }\n};\n\nvar standardReleaser = function (instance) {\n  var Klass = this;\n  !(instance instanceof Klass) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Trying to release an instance into a pool of a different type.') : invariant(false) : undefined;\n  instance.destructor();\n  if (Klass.instancePool.length < Klass.poolSize) {\n    Klass.instancePool.push(instance);\n  }\n};\n\nvar DEFAULT_POOL_SIZE = 10;\nvar DEFAULT_POOLER = oneArgumentPooler;\n\n/**\n * Augments `CopyConstructor` to be a poolable class, augmenting only the class\n * itself (statically) not adding any prototypical fields. Any CopyConstructor\n * you give this may have a `poolSize` property, and will look for a\n * prototypical `destructor` on instances (optional).\n *\n * @param {Function} CopyConstructor Constructor that can be used to reset.\n * @param {Function} pooler Customizable pooler.\n */\nvar addPoolingTo = function (CopyConstructor, pooler) {\n  var NewKlass = CopyConstructor;\n  NewKlass.instancePool = [];\n  NewKlass.getPooled = pooler || DEFAULT_POOLER;\n  if (!NewKlass.poolSize) {\n    NewKlass.poolSize = DEFAULT_POOL_SIZE;\n  }\n  NewKlass.release = standardReleaser;\n  return NewKlass;\n};\n\nvar PooledClass = {\n  addPoolingTo: addPoolingTo,\n  oneArgumentPooler: oneArgumentPooler,\n  twoArgumentPooler: twoArgumentPooler,\n  threeArgumentPooler: threeArgumentPooler,\n  fourArgumentPooler: fourArgumentPooler,\n  fiveArgumentPooler: fiveArgumentPooler\n};\n\nmodule.exports = PooledClass;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/PooledClass.js\n ** module id = 58\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule Transaction\n */\n\n'use strict';\n\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * `Transaction` creates a black box that is able to wrap any method such that\n * certain invariants are maintained before and after the method is invoked\n * (Even if an exception is thrown while invoking the wrapped method). Whoever\n * instantiates a transaction can provide enforcers of the invariants at\n * creation time. The `Transaction` class itself will supply one additional\n * automatic invariant for you - the invariant that any transaction instance\n * should not be run while it is already being run. You would typically create a\n * single instance of a `Transaction` for reuse multiple times, that potentially\n * is used to wrap several different methods. Wrappers are extremely simple -\n * they only require implementing two methods.\n *\n * <pre>\n *                       wrappers (injected at creation time)\n *                                      +        +\n *                                      |        |\n *                    +-----------------|--------|--------------+\n *                    |                 v        |              |\n *                    |      +---------------+   |              |\n *                    |   +--|    wrapper1   |---|----+         |\n *                    |   |  +---------------+   v    |         |\n *                    |   |          +-------------+  |         |\n *                    |   |     +----|   wrapper2  |--------+   |\n *                    |   |     |    +-------------+  |     |   |\n *                    |   |     |                     |     |   |\n *                    |   v     v                     v     v   | wrapper\n *                    | +---+ +---+   +---------+   +---+ +---+ | invariants\n * perform(anyMethod) | |   | |   |   |         |   |   | |   | | maintained\n * +----------------->|-|---|-|---|-->|anyMethod|---|---|-|---|-|-------->\n *                    | |   | |   |   |         |   |   | |   | |\n *                    | |   | |   |   |         |   |   | |   | |\n *                    | |   | |   |   |         |   |   | |   | |\n *                    | +---+ +---+   +---------+   +---+ +---+ |\n *                    |  initialize                    close    |\n *                    +-----------------------------------------+\n * </pre>\n *\n * Use cases:\n * - Preserving the input selection ranges before/after reconciliation.\n *   Restoring selection even in the event of an unexpected error.\n * - Deactivating events while rearranging the DOM, preventing blurs/focuses,\n *   while guaranteeing that afterwards, the event system is reactivated.\n * - Flushing a queue of collected DOM mutations to the main UI thread after a\n *   reconciliation takes place in a worker thread.\n * - Invoking any collected `componentDidUpdate` callbacks after rendering new\n *   content.\n * - (Future use case): Wrapping particular flushes of the `ReactWorker` queue\n *   to preserve the `scrollTop` (an automatic scroll aware DOM).\n * - (Future use case): Layout calculations before and after DOM updates.\n *\n * Transactional plugin API:\n * - A module that has an `initialize` method that returns any precomputation.\n * - and a `close` method that accepts the precomputation. `close` is invoked\n *   when the wrapped process is completed, or has failed.\n *\n * @param {Array<TransactionalWrapper>} transactionWrapper Wrapper modules\n * that implement `initialize` and `close`.\n * @return {Transaction} Single transaction for reuse in thread.\n *\n * @class Transaction\n */\nvar Mixin = {\n  /**\n   * Sets up this instance so that it is prepared for collecting metrics. Does\n   * so such that this setup method may be used on an instance that is already\n   * initialized, in a way that does not consume additional memory upon reuse.\n   * That can be useful if you decide to make your subclass of this mixin a\n   * \"PooledClass\".\n   */\n  reinitializeTransaction: function () {\n    this.transactionWrappers = this.getTransactionWrappers();\n    if (this.wrapperInitData) {\n      this.wrapperInitData.length = 0;\n    } else {\n      this.wrapperInitData = [];\n    }\n    this._isInTransaction = false;\n  },\n\n  _isInTransaction: false,\n\n  /**\n   * @abstract\n   * @return {Array<TransactionWrapper>} Array of transaction wrappers.\n   */\n  getTransactionWrappers: null,\n\n  isInTransaction: function () {\n    return !!this._isInTransaction;\n  },\n\n  /**\n   * Executes the function within a safety window. Use this for the top level\n   * methods that result in large amounts of computation/mutations that would\n   * need to be safety checked. The optional arguments helps prevent the need\n   * to bind in many cases.\n   *\n   * @param {function} method Member of scope to call.\n   * @param {Object} scope Scope to invoke from.\n   * @param {Object?=} a Argument to pass to the method.\n   * @param {Object?=} b Argument to pass to the method.\n   * @param {Object?=} c Argument to pass to the method.\n   * @param {Object?=} d Argument to pass to the method.\n   * @param {Object?=} e Argument to pass to the method.\n   * @param {Object?=} f Argument to pass to the method.\n   *\n   * @return {*} Return value from `method`.\n   */\n  perform: function (method, scope, a, b, c, d, e, f) {\n    !!this.isInTransaction() ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Transaction.perform(...): Cannot initialize a transaction when there ' + 'is already an outstanding transaction.') : invariant(false) : undefined;\n    var errorThrown;\n    var ret;\n    try {\n      this._isInTransaction = true;\n      // Catching errors makes debugging more difficult, so we start with\n      // errorThrown set to true before setting it to false after calling\n      // close -- if it's still set to true in the finally block, it means\n      // one of these calls threw.\n      errorThrown = true;\n      this.initializeAll(0);\n      ret = method.call(scope, a, b, c, d, e, f);\n      errorThrown = false;\n    } finally {\n      try {\n        if (errorThrown) {\n          // If `method` throws, prefer to show that stack trace over any thrown\n          // by invoking `closeAll`.\n          try {\n            this.closeAll(0);\n          } catch (err) {}\n        } else {\n          // Since `method` didn't throw, we don't want to silence the exception\n          // here.\n          this.closeAll(0);\n        }\n      } finally {\n        this._isInTransaction = false;\n      }\n    }\n    return ret;\n  },\n\n  initializeAll: function (startIndex) {\n    var transactionWrappers = this.transactionWrappers;\n    for (var i = startIndex; i < transactionWrappers.length; i++) {\n      var wrapper = transactionWrappers[i];\n      try {\n        // Catching errors makes debugging more difficult, so we start with the\n        // OBSERVED_ERROR state before overwriting it with the real return value\n        // of initialize -- if it's still set to OBSERVED_ERROR in the finally\n        // block, it means wrapper.initialize threw.\n        this.wrapperInitData[i] = Transaction.OBSERVED_ERROR;\n        this.wrapperInitData[i] = wrapper.initialize ? wrapper.initialize.call(this) : null;\n      } finally {\n        if (this.wrapperInitData[i] === Transaction.OBSERVED_ERROR) {\n          // The initializer for wrapper i threw an error; initialize the\n          // remaining wrappers but silence any exceptions from them to ensure\n          // that the first error is the one to bubble up.\n          try {\n            this.initializeAll(i + 1);\n          } catch (err) {}\n        }\n      }\n    }\n  },\n\n  /**\n   * Invokes each of `this.transactionWrappers.close[i]` functions, passing into\n   * them the respective return values of `this.transactionWrappers.init[i]`\n   * (`close`rs that correspond to initializers that failed will not be\n   * invoked).\n   */\n  closeAll: function (startIndex) {\n    !this.isInTransaction() ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Transaction.closeAll(): Cannot close transaction when none are open.') : invariant(false) : undefined;\n    var transactionWrappers = this.transactionWrappers;\n    for (var i = startIndex; i < transactionWrappers.length; i++) {\n      var wrapper = transactionWrappers[i];\n      var initData = this.wrapperInitData[i];\n      var errorThrown;\n      try {\n        // Catching errors makes debugging more difficult, so we start with\n        // errorThrown set to true before setting it to false after calling\n        // close -- if it's still set to true in the finally block, it means\n        // wrapper.close threw.\n        errorThrown = true;\n        if (initData !== Transaction.OBSERVED_ERROR && wrapper.close) {\n          wrapper.close.call(this, initData);\n        }\n        errorThrown = false;\n      } finally {\n        if (errorThrown) {\n          // The closer for wrapper i threw an error; close the remaining\n          // wrappers but silence any exceptions from them to ensure that the\n          // first error is the one to bubble up.\n          try {\n            this.closeAll(i + 1);\n          } catch (e) {}\n        }\n      }\n    }\n    this.wrapperInitData.length = 0;\n  }\n};\n\nvar Transaction = {\n\n  Mixin: Mixin,\n\n  /**\n   * Token to look for to determine if an error occurred.\n   */\n  OBSERVED_ERROR: {}\n\n};\n\nmodule.exports = Transaction;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/Transaction.js\n ** module id = 59\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule emptyObject\n */\n\n'use strict';\n\nvar emptyObject = {};\n\nif (process.env.NODE_ENV !== 'production') {\n  Object.freeze(emptyObject);\n}\n\nmodule.exports = emptyObject;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/fbjs/lib/emptyObject.js\n ** module id = 60\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule containsNode\n * @typechecks\n */\n\n'use strict';\n\nvar isTextNode = require('./isTextNode');\n\n/*eslint-disable no-bitwise */\n\n/**\n * Checks if a given DOM node contains or is another DOM node.\n *\n * @param {?DOMNode} outerNode Outer DOM node.\n * @param {?DOMNode} innerNode Inner DOM node.\n * @return {boolean} True if `outerNode` contains or is `innerNode`.\n */\nfunction containsNode(_x, _x2) {\n  var _again = true;\n\n  _function: while (_again) {\n    var outerNode = _x,\n        innerNode = _x2;\n    _again = false;\n\n    if (!outerNode || !innerNode) {\n      return false;\n    } else if (outerNode === innerNode) {\n      return true;\n    } else if (isTextNode(outerNode)) {\n      return false;\n    } else if (isTextNode(innerNode)) {\n      _x = outerNode;\n      _x2 = innerNode.parentNode;\n      _again = true;\n      continue _function;\n    } else if (outerNode.contains) {\n      return outerNode.contains(innerNode);\n    } else if (outerNode.compareDocumentPosition) {\n      return !!(outerNode.compareDocumentPosition(innerNode) & 16);\n    } else {\n      return false;\n    }\n  }\n}\n\nmodule.exports = containsNode;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/fbjs/lib/containsNode.js\n ** module id = 61\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule isTextNode\n * @typechecks\n */\n\n'use strict';\n\nvar isNode = require('./isNode');\n\n/**\n * @param {*} object The object to check.\n * @return {boolean} Whether or not the object is a DOM text node.\n */\nfunction isTextNode(object) {\n  return isNode(object) && object.nodeType == 3;\n}\n\nmodule.exports = isTextNode;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/fbjs/lib/isTextNode.js\n ** module id = 62\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule isNode\n * @typechecks\n */\n\n/**\n * @param {*} object The object to check.\n * @return {boolean} Whether or not the object is a DOM node.\n */\n'use strict';\n\nfunction isNode(object) {\n  return !!(object && (typeof Node === 'function' ? object instanceof Node : typeof object === 'object' && typeof object.nodeType === 'number' && typeof object.nodeName === 'string'));\n}\n\nmodule.exports = isNode;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/fbjs/lib/isNode.js\n ** module id = 63\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule instantiateReactComponent\n * @typechecks static-only\n */\n\n'use strict';\n\nvar ReactCompositeComponent = require('./ReactCompositeComponent');\nvar ReactEmptyComponent = require('./ReactEmptyComponent');\nvar ReactNativeComponent = require('./ReactNativeComponent');\n\nvar assign = require('./Object.assign');\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\n// To avoid a cyclic dependency, we create the final class in this module\nvar ReactCompositeComponentWrapper = function () {};\nassign(ReactCompositeComponentWrapper.prototype, ReactCompositeComponent.Mixin, {\n  _instantiateReactComponent: instantiateReactComponent\n});\n\nfunction getDeclarationErrorAddendum(owner) {\n  if (owner) {\n    var name = owner.getName();\n    if (name) {\n      return ' Check the render method of `' + name + '`.';\n    }\n  }\n  return '';\n}\n\n/**\n * Check if the type reference is a known internal type. I.e. not a user\n * provided composite type.\n *\n * @param {function} type\n * @return {boolean} Returns true if this is a valid internal type.\n */\nfunction isInternalComponentType(type) {\n  return typeof type === 'function' && typeof type.prototype !== 'undefined' && typeof type.prototype.mountComponent === 'function' && typeof type.prototype.receiveComponent === 'function';\n}\n\n/**\n * Given a ReactNode, create an instance that will actually be mounted.\n *\n * @param {ReactNode} node\n * @return {object} A new instance of the element's constructor.\n * @protected\n */\nfunction instantiateReactComponent(node) {\n  var instance;\n\n  if (node === null || node === false) {\n    instance = new ReactEmptyComponent(instantiateReactComponent);\n  } else if (typeof node === 'object') {\n    var element = node;\n    !(element && (typeof element.type === 'function' || typeof element.type === 'string')) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Element type is invalid: expected a string (for built-in components) ' + 'or a class/function (for composite components) but got: %s.%s', element.type == null ? element.type : typeof element.type, getDeclarationErrorAddendum(element._owner)) : invariant(false) : undefined;\n\n    // Special case string values\n    if (typeof element.type === 'string') {\n      instance = ReactNativeComponent.createInternalComponent(element);\n    } else if (isInternalComponentType(element.type)) {\n      // This is temporarily available for custom components that are not string\n      // representations. I.e. ART. Once those are updated to use the string\n      // representation, we can drop this code path.\n      instance = new element.type(element);\n    } else {\n      instance = new ReactCompositeComponentWrapper();\n    }\n  } else if (typeof node === 'string' || typeof node === 'number') {\n    instance = ReactNativeComponent.createInstanceForText(node);\n  } else {\n    !false ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Encountered invalid React node of type %s', typeof node) : invariant(false) : undefined;\n  }\n\n  if (process.env.NODE_ENV !== 'production') {\n    process.env.NODE_ENV !== 'production' ? warning(typeof instance.construct === 'function' && typeof instance.mountComponent === 'function' && typeof instance.receiveComponent === 'function' && typeof instance.unmountComponent === 'function', 'Only React Components can be mounted.') : undefined;\n  }\n\n  // Sets up the instance. This can probably just move into the constructor now.\n  instance.construct(node);\n\n  // These two fields are used by the DOM and ART diffing algorithms\n  // respectively. Instead of using expandos on components, we should be\n  // storing the state needed by the diffing algorithms elsewhere.\n  instance._mountIndex = 0;\n  instance._mountImage = null;\n\n  if (process.env.NODE_ENV !== 'production') {\n    instance._isOwnerNecessary = false;\n    instance._warnedAboutRefsInRender = false;\n  }\n\n  // Internal instances should fully constructed at this point, so they should\n  // not get any new fields added to them at this point.\n  if (process.env.NODE_ENV !== 'production') {\n    if (Object.preventExtensions) {\n      Object.preventExtensions(instance);\n    }\n  }\n\n  return instance;\n}\n\nmodule.exports = instantiateReactComponent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/instantiateReactComponent.js\n ** module id = 64\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactCompositeComponent\n */\n\n'use strict';\n\nvar ReactComponentEnvironment = require('./ReactComponentEnvironment');\nvar ReactCurrentOwner = require('./ReactCurrentOwner');\nvar ReactElement = require('./ReactElement');\nvar ReactInstanceMap = require('./ReactInstanceMap');\nvar ReactPerf = require('./ReactPerf');\nvar ReactPropTypeLocations = require('./ReactPropTypeLocations');\nvar ReactPropTypeLocationNames = require('./ReactPropTypeLocationNames');\nvar ReactReconciler = require('./ReactReconciler');\nvar ReactUpdateQueue = require('./ReactUpdateQueue');\n\nvar assign = require('./Object.assign');\nvar emptyObject = require('fbjs/lib/emptyObject');\nvar invariant = require('fbjs/lib/invariant');\nvar shouldUpdateReactComponent = require('./shouldUpdateReactComponent');\nvar warning = require('fbjs/lib/warning');\n\nfunction getDeclarationErrorAddendum(component) {\n  var owner = component._currentElement._owner || null;\n  if (owner) {\n    var name = owner.getName();\n    if (name) {\n      return ' Check the render method of `' + name + '`.';\n    }\n  }\n  return '';\n}\n\nfunction StatelessComponent(Component) {}\nStatelessComponent.prototype.render = function () {\n  var Component = ReactInstanceMap.get(this)._currentElement.type;\n  return Component(this.props, this.context, this.updater);\n};\n\n/**\n * ------------------ The Life-Cycle of a Composite Component ------------------\n *\n * - constructor: Initialization of state. The instance is now retained.\n *   - componentWillMount\n *   - render\n *   - [children's constructors]\n *     - [children's componentWillMount and render]\n *     - [children's componentDidMount]\n *     - componentDidMount\n *\n *       Update Phases:\n *       - componentWillReceiveProps (only called if parent updated)\n *       - shouldComponentUpdate\n *         - componentWillUpdate\n *           - render\n *           - [children's constructors or receive props phases]\n *         - componentDidUpdate\n *\n *     - componentWillUnmount\n *     - [children's componentWillUnmount]\n *   - [children destroyed]\n * - (destroyed): The instance is now blank, released by React and ready for GC.\n *\n * -----------------------------------------------------------------------------\n */\n\n/**\n * An incrementing ID assigned to each component when it is mounted. This is\n * used to enforce the order in which `ReactUpdates` updates dirty components.\n *\n * @private\n */\nvar nextMountID = 1;\n\n/**\n * @lends {ReactCompositeComponent.prototype}\n */\nvar ReactCompositeComponentMixin = {\n\n  /**\n   * Base constructor for all composite component.\n   *\n   * @param {ReactElement} element\n   * @final\n   * @internal\n   */\n  construct: function (element) {\n    this._currentElement = element;\n    this._rootNodeID = null;\n    this._instance = null;\n\n    // See ReactUpdateQueue\n    this._pendingElement = null;\n    this._pendingStateQueue = null;\n    this._pendingReplaceState = false;\n    this._pendingForceUpdate = false;\n\n    this._renderedComponent = null;\n\n    this._context = null;\n    this._mountOrder = 0;\n    this._topLevelWrapper = null;\n\n    // See ReactUpdates and ReactUpdateQueue.\n    this._pendingCallbacks = null;\n  },\n\n  /**\n   * Initializes the component, renders markup, and registers event listeners.\n   *\n   * @param {string} rootID DOM ID of the root node.\n   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\n   * @return {?string} Rendered markup to be inserted into the DOM.\n   * @final\n   * @internal\n   */\n  mountComponent: function (rootID, transaction, context) {\n    this._context = context;\n    this._mountOrder = nextMountID++;\n    this._rootNodeID = rootID;\n\n    var publicProps = this._processProps(this._currentElement.props);\n    var publicContext = this._processContext(context);\n\n    var Component = this._currentElement.type;\n\n    // Initialize the public class\n    var inst;\n    var renderedElement;\n\n    // This is a way to detect if Component is a stateless arrow function\n    // component, which is not newable. It might not be 100% reliable but is\n    // something we can do until we start detecting that Component extends\n    // React.Component. We already assume that typeof Component === 'function'.\n    var canInstantiate = ('prototype' in Component);\n\n    if (canInstantiate) {\n      if (process.env.NODE_ENV !== 'production') {\n        ReactCurrentOwner.current = this;\n        try {\n          inst = new Component(publicProps, publicContext, ReactUpdateQueue);\n        } finally {\n          ReactCurrentOwner.current = null;\n        }\n      } else {\n        inst = new Component(publicProps, publicContext, ReactUpdateQueue);\n      }\n    }\n\n    if (!canInstantiate || inst === null || inst === false || ReactElement.isValidElement(inst)) {\n      renderedElement = inst;\n      inst = new StatelessComponent(Component);\n    }\n\n    if (process.env.NODE_ENV !== 'production') {\n      // This will throw later in _renderValidatedComponent, but add an early\n      // warning now to help debugging\n      if (inst.render == null) {\n        process.env.NODE_ENV !== 'production' ? warning(false, '%s(...): No `render` method found on the returned component ' + 'instance: you may have forgotten to define `render`, returned ' + 'null/false from a stateless component, or tried to render an ' + 'element whose type is a function that isn\\'t a React component.', Component.displayName || Component.name || 'Component') : undefined;\n      } else {\n        // We support ES6 inheriting from React.Component, the module pattern,\n        // and stateless components, but not ES6 classes that don't extend\n        process.env.NODE_ENV !== 'production' ? warning(Component.prototype && Component.prototype.isReactComponent || !canInstantiate || !(inst instanceof Component), '%s(...): React component classes must extend React.Component.', Component.displayName || Component.name || 'Component') : undefined;\n      }\n    }\n\n    // These should be set up in the constructor, but as a convenience for\n    // simpler class abstractions, we set them up after the fact.\n    inst.props = publicProps;\n    inst.context = publicContext;\n    inst.refs = emptyObject;\n    inst.updater = ReactUpdateQueue;\n\n    this._instance = inst;\n\n    // Store a reference from the instance back to the internal representation\n    ReactInstanceMap.set(inst, this);\n\n    if (process.env.NODE_ENV !== 'production') {\n      // Since plain JS classes are defined without any special initialization\n      // logic, we can not catch common errors early. Therefore, we have to\n      // catch them here, at initialization time, instead.\n      process.env.NODE_ENV !== 'production' ? warning(!inst.getInitialState || inst.getInitialState.isReactClassApproved, 'getInitialState was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Did you mean to define a state property instead?', this.getName() || 'a component') : undefined;\n      process.env.NODE_ENV !== 'production' ? warning(!inst.getDefaultProps || inst.getDefaultProps.isReactClassApproved, 'getDefaultProps was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Use a static property to define defaultProps instead.', this.getName() || 'a component') : undefined;\n      process.env.NODE_ENV !== 'production' ? warning(!inst.propTypes, 'propTypes was defined as an instance property on %s. Use a static ' + 'property to define propTypes instead.', this.getName() || 'a component') : undefined;\n      process.env.NODE_ENV !== 'production' ? warning(!inst.contextTypes, 'contextTypes was defined as an instance property on %s. Use a ' + 'static property to define contextTypes instead.', this.getName() || 'a component') : undefined;\n      process.env.NODE_ENV !== 'production' ? warning(typeof inst.componentShouldUpdate !== 'function', '%s has a method called ' + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 'The name is phrased as a question because the function is ' + 'expected to return a value.', this.getName() || 'A component') : undefined;\n      process.env.NODE_ENV !== 'production' ? warning(typeof inst.componentDidUnmount !== 'function', '%s has a method called ' + 'componentDidUnmount(). But there is no such lifecycle method. ' + 'Did you mean componentWillUnmount()?', this.getName() || 'A component') : undefined;\n      process.env.NODE_ENV !== 'production' ? warning(typeof inst.componentWillRecieveProps !== 'function', '%s has a method called ' + 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?', this.getName() || 'A component') : undefined;\n    }\n\n    var initialState = inst.state;\n    if (initialState === undefined) {\n      inst.state = initialState = null;\n    }\n    !(typeof initialState === 'object' && !Array.isArray(initialState)) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.state: must be set to an object or null', this.getName() || 'ReactCompositeComponent') : invariant(false) : undefined;\n\n    this._pendingStateQueue = null;\n    this._pendingReplaceState = false;\n    this._pendingForceUpdate = false;\n\n    if (inst.componentWillMount) {\n      inst.componentWillMount();\n      // When mounting, calls to `setState` by `componentWillMount` will set\n      // `this._pendingStateQueue` without triggering a re-render.\n      if (this._pendingStateQueue) {\n        inst.state = this._processPendingState(inst.props, inst.context);\n      }\n    }\n\n    // If not a stateless component, we now render\n    if (renderedElement === undefined) {\n      renderedElement = this._renderValidatedComponent();\n    }\n\n    this._renderedComponent = this._instantiateReactComponent(renderedElement);\n\n    var markup = ReactReconciler.mountComponent(this._renderedComponent, rootID, transaction, this._processChildContext(context));\n    if (inst.componentDidMount) {\n      transaction.getReactMountReady().enqueue(inst.componentDidMount, inst);\n    }\n\n    return markup;\n  },\n\n  /**\n   * Releases any resources allocated by `mountComponent`.\n   *\n   * @final\n   * @internal\n   */\n  unmountComponent: function () {\n    var inst = this._instance;\n\n    if (inst.componentWillUnmount) {\n      inst.componentWillUnmount();\n    }\n\n    ReactReconciler.unmountComponent(this._renderedComponent);\n    this._renderedComponent = null;\n    this._instance = null;\n\n    // Reset pending fields\n    // Even if this component is scheduled for another update in ReactUpdates,\n    // it would still be ignored because these fields are reset.\n    this._pendingStateQueue = null;\n    this._pendingReplaceState = false;\n    this._pendingForceUpdate = false;\n    this._pendingCallbacks = null;\n    this._pendingElement = null;\n\n    // These fields do not really need to be reset since this object is no\n    // longer accessible.\n    this._context = null;\n    this._rootNodeID = null;\n    this._topLevelWrapper = null;\n\n    // Delete the reference from the instance to this internal representation\n    // which allow the internals to be properly cleaned up even if the user\n    // leaks a reference to the public instance.\n    ReactInstanceMap.remove(inst);\n\n    // Some existing components rely on inst.props even after they've been\n    // destroyed (in event handlers).\n    // TODO: inst.props = null;\n    // TODO: inst.state = null;\n    // TODO: inst.context = null;\n  },\n\n  /**\n   * Filters the context object to only contain keys specified in\n   * `contextTypes`\n   *\n   * @param {object} context\n   * @return {?object}\n   * @private\n   */\n  _maskContext: function (context) {\n    var maskedContext = null;\n    var Component = this._currentElement.type;\n    var contextTypes = Component.contextTypes;\n    if (!contextTypes) {\n      return emptyObject;\n    }\n    maskedContext = {};\n    for (var contextName in contextTypes) {\n      maskedContext[contextName] = context[contextName];\n    }\n    return maskedContext;\n  },\n\n  /**\n   * Filters the context object to only contain keys specified in\n   * `contextTypes`, and asserts that they are valid.\n   *\n   * @param {object} context\n   * @return {?object}\n   * @private\n   */\n  _processContext: function (context) {\n    var maskedContext = this._maskContext(context);\n    if (process.env.NODE_ENV !== 'production') {\n      var Component = this._currentElement.type;\n      if (Component.contextTypes) {\n        this._checkPropTypes(Component.contextTypes, maskedContext, ReactPropTypeLocations.context);\n      }\n    }\n    return maskedContext;\n  },\n\n  /**\n   * @param {object} currentContext\n   * @return {object}\n   * @private\n   */\n  _processChildContext: function (currentContext) {\n    var Component = this._currentElement.type;\n    var inst = this._instance;\n    var childContext = inst.getChildContext && inst.getChildContext();\n    if (childContext) {\n      !(typeof Component.childContextTypes === 'object') ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.getChildContext(): childContextTypes must be defined in order to ' + 'use getChildContext().', this.getName() || 'ReactCompositeComponent') : invariant(false) : undefined;\n      if (process.env.NODE_ENV !== 'production') {\n        this._checkPropTypes(Component.childContextTypes, childContext, ReactPropTypeLocations.childContext);\n      }\n      for (var name in childContext) {\n        !(name in Component.childContextTypes) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.getChildContext(): key \"%s\" is not defined in childContextTypes.', this.getName() || 'ReactCompositeComponent', name) : invariant(false) : undefined;\n      }\n      return assign({}, currentContext, childContext);\n    }\n    return currentContext;\n  },\n\n  /**\n   * Processes props by setting default values for unspecified props and\n   * asserting that the props are valid. Does not mutate its argument; returns\n   * a new props object with defaults merged in.\n   *\n   * @param {object} newProps\n   * @return {object}\n   * @private\n   */\n  _processProps: function (newProps) {\n    if (process.env.NODE_ENV !== 'production') {\n      var Component = this._currentElement.type;\n      if (Component.propTypes) {\n        this._checkPropTypes(Component.propTypes, newProps, ReactPropTypeLocations.prop);\n      }\n    }\n    return newProps;\n  },\n\n  /**\n   * Assert that the props are valid\n   *\n   * @param {object} propTypes Map of prop name to a ReactPropType\n   * @param {object} props\n   * @param {string} location e.g. \"prop\", \"context\", \"child context\"\n   * @private\n   */\n  _checkPropTypes: function (propTypes, props, location) {\n    // TODO: Stop validating prop types here and only use the element\n    // validation.\n    var componentName = this.getName();\n    for (var propName in propTypes) {\n      if (propTypes.hasOwnProperty(propName)) {\n        var error;\n        try {\n          // This is intentionally an invariant that gets caught. It's the same\n          // behavior as without this statement except with a better message.\n          !(typeof propTypes[propName] === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s: %s type `%s` is invalid; it must be a function, usually ' + 'from React.PropTypes.', componentName || 'React class', ReactPropTypeLocationNames[location], propName) : invariant(false) : undefined;\n          error = propTypes[propName](props, propName, componentName, location);\n        } catch (ex) {\n          error = ex;\n        }\n        if (error instanceof Error) {\n          // We may want to extend this logic for similar errors in\n          // top-level render calls, so I'm abstracting it away into\n          // a function to minimize refactoring in the future\n          var addendum = getDeclarationErrorAddendum(this);\n\n          if (location === ReactPropTypeLocations.prop) {\n            // Preface gives us something to blacklist in warning module\n            process.env.NODE_ENV !== 'production' ? warning(false, 'Failed Composite propType: %s%s', error.message, addendum) : undefined;\n          } else {\n            process.env.NODE_ENV !== 'production' ? warning(false, 'Failed Context Types: %s%s', error.message, addendum) : undefined;\n          }\n        }\n      }\n    }\n  },\n\n  receiveComponent: function (nextElement, transaction, nextContext) {\n    var prevElement = this._currentElement;\n    var prevContext = this._context;\n\n    this._pendingElement = null;\n\n    this.updateComponent(transaction, prevElement, nextElement, prevContext, nextContext);\n  },\n\n  /**\n   * If any of `_pendingElement`, `_pendingStateQueue`, or `_pendingForceUpdate`\n   * is set, update the component.\n   *\n   * @param {ReactReconcileTransaction} transaction\n   * @internal\n   */\n  performUpdateIfNecessary: function (transaction) {\n    if (this._pendingElement != null) {\n      ReactReconciler.receiveComponent(this, this._pendingElement || this._currentElement, transaction, this._context);\n    }\n\n    if (this._pendingStateQueue !== null || this._pendingForceUpdate) {\n      this.updateComponent(transaction, this._currentElement, this._currentElement, this._context, this._context);\n    }\n  },\n\n  /**\n   * Perform an update to a mounted component. The componentWillReceiveProps and\n   * shouldComponentUpdate methods are called, then (assuming the update isn't\n   * skipped) the remaining update lifecycle methods are called and the DOM\n   * representation is updated.\n   *\n   * By default, this implements React's rendering and reconciliation algorithm.\n   * Sophisticated clients may wish to override this.\n   *\n   * @param {ReactReconcileTransaction} transaction\n   * @param {ReactElement} prevParentElement\n   * @param {ReactElement} nextParentElement\n   * @internal\n   * @overridable\n   */\n  updateComponent: function (transaction, prevParentElement, nextParentElement, prevUnmaskedContext, nextUnmaskedContext) {\n    var inst = this._instance;\n\n    var nextContext = this._context === nextUnmaskedContext ? inst.context : this._processContext(nextUnmaskedContext);\n    var nextProps;\n\n    // Distinguish between a props update versus a simple state update\n    if (prevParentElement === nextParentElement) {\n      // Skip checking prop types again -- we don't read inst.props to avoid\n      // warning for DOM component props in this upgrade\n      nextProps = nextParentElement.props;\n    } else {\n      nextProps = this._processProps(nextParentElement.props);\n      // An update here will schedule an update but immediately set\n      // _pendingStateQueue which will ensure that any state updates gets\n      // immediately reconciled instead of waiting for the next batch.\n\n      if (inst.componentWillReceiveProps) {\n        inst.componentWillReceiveProps(nextProps, nextContext);\n      }\n    }\n\n    var nextState = this._processPendingState(nextProps, nextContext);\n\n    var shouldUpdate = this._pendingForceUpdate || !inst.shouldComponentUpdate || inst.shouldComponentUpdate(nextProps, nextState, nextContext);\n\n    if (process.env.NODE_ENV !== 'production') {\n      process.env.NODE_ENV !== 'production' ? warning(typeof shouldUpdate !== 'undefined', '%s.shouldComponentUpdate(): Returned undefined instead of a ' + 'boolean value. Make sure to return true or false.', this.getName() || 'ReactCompositeComponent') : undefined;\n    }\n\n    if (shouldUpdate) {\n      this._pendingForceUpdate = false;\n      // Will set `this.props`, `this.state` and `this.context`.\n      this._performComponentUpdate(nextParentElement, nextProps, nextState, nextContext, transaction, nextUnmaskedContext);\n    } else {\n      // If it's determined that a component should not update, we still want\n      // to set props and state but we shortcut the rest of the update.\n      this._currentElement = nextParentElement;\n      this._context = nextUnmaskedContext;\n      inst.props = nextProps;\n      inst.state = nextState;\n      inst.context = nextContext;\n    }\n  },\n\n  _processPendingState: function (props, context) {\n    var inst = this._instance;\n    var queue = this._pendingStateQueue;\n    var replace = this._pendingReplaceState;\n    this._pendingReplaceState = false;\n    this._pendingStateQueue = null;\n\n    if (!queue) {\n      return inst.state;\n    }\n\n    if (replace && queue.length === 1) {\n      return queue[0];\n    }\n\n    var nextState = assign({}, replace ? queue[0] : inst.state);\n    for (var i = replace ? 1 : 0; i < queue.length; i++) {\n      var partial = queue[i];\n      assign(nextState, typeof partial === 'function' ? partial.call(inst, nextState, props, context) : partial);\n    }\n\n    return nextState;\n  },\n\n  /**\n   * Merges new props and state, notifies delegate methods of update and\n   * performs update.\n   *\n   * @param {ReactElement} nextElement Next element\n   * @param {object} nextProps Next public object to set as properties.\n   * @param {?object} nextState Next object to set as state.\n   * @param {?object} nextContext Next public object to set as context.\n   * @param {ReactReconcileTransaction} transaction\n   * @param {?object} unmaskedContext\n   * @private\n   */\n  _performComponentUpdate: function (nextElement, nextProps, nextState, nextContext, transaction, unmaskedContext) {\n    var inst = this._instance;\n\n    var hasComponentDidUpdate = Boolean(inst.componentDidUpdate);\n    var prevProps;\n    var prevState;\n    var prevContext;\n    if (hasComponentDidUpdate) {\n      prevProps = inst.props;\n      prevState = inst.state;\n      prevContext = inst.context;\n    }\n\n    if (inst.componentWillUpdate) {\n      inst.componentWillUpdate(nextProps, nextState, nextContext);\n    }\n\n    this._currentElement = nextElement;\n    this._context = unmaskedContext;\n    inst.props = nextProps;\n    inst.state = nextState;\n    inst.context = nextContext;\n\n    this._updateRenderedComponent(transaction, unmaskedContext);\n\n    if (hasComponentDidUpdate) {\n      transaction.getReactMountReady().enqueue(inst.componentDidUpdate.bind(inst, prevProps, prevState, prevContext), inst);\n    }\n  },\n\n  /**\n   * Call the component's `render` method and update the DOM accordingly.\n   *\n   * @param {ReactReconcileTransaction} transaction\n   * @internal\n   */\n  _updateRenderedComponent: function (transaction, context) {\n    var prevComponentInstance = this._renderedComponent;\n    var prevRenderedElement = prevComponentInstance._currentElement;\n    var nextRenderedElement = this._renderValidatedComponent();\n    if (shouldUpdateReactComponent(prevRenderedElement, nextRenderedElement)) {\n      ReactReconciler.receiveComponent(prevComponentInstance, nextRenderedElement, transaction, this._processChildContext(context));\n    } else {\n      // These two IDs are actually the same! But nothing should rely on that.\n      var thisID = this._rootNodeID;\n      var prevComponentID = prevComponentInstance._rootNodeID;\n      ReactReconciler.unmountComponent(prevComponentInstance);\n\n      this._renderedComponent = this._instantiateReactComponent(nextRenderedElement);\n      var nextMarkup = ReactReconciler.mountComponent(this._renderedComponent, thisID, transaction, this._processChildContext(context));\n      this._replaceNodeWithMarkupByID(prevComponentID, nextMarkup);\n    }\n  },\n\n  /**\n   * @protected\n   */\n  _replaceNodeWithMarkupByID: function (prevComponentID, nextMarkup) {\n    ReactComponentEnvironment.replaceNodeWithMarkupByID(prevComponentID, nextMarkup);\n  },\n\n  /**\n   * @protected\n   */\n  _renderValidatedComponentWithoutOwnerOrContext: function () {\n    var inst = this._instance;\n    var renderedComponent = inst.render();\n    if (process.env.NODE_ENV !== 'production') {\n      // We allow auto-mocks to proceed as if they're returning null.\n      if (typeof renderedComponent === 'undefined' && inst.render._isMockFunction) {\n        // This is probably bad practice. Consider warning here and\n        // deprecating this convenience.\n        renderedComponent = null;\n      }\n    }\n\n    return renderedComponent;\n  },\n\n  /**\n   * @private\n   */\n  _renderValidatedComponent: function () {\n    var renderedComponent;\n    ReactCurrentOwner.current = this;\n    try {\n      renderedComponent = this._renderValidatedComponentWithoutOwnerOrContext();\n    } finally {\n      ReactCurrentOwner.current = null;\n    }\n    !(\n    // TODO: An `isValidNode` function would probably be more appropriate\n    renderedComponent === null || renderedComponent === false || ReactElement.isValidElement(renderedComponent)) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.render(): A valid ReactComponent must be returned. You may have ' + 'returned undefined, an array or some other invalid object.', this.getName() || 'ReactCompositeComponent') : invariant(false) : undefined;\n    return renderedComponent;\n  },\n\n  /**\n   * Lazily allocates the refs object and stores `component` as `ref`.\n   *\n   * @param {string} ref Reference name.\n   * @param {component} component Component to store as `ref`.\n   * @final\n   * @private\n   */\n  attachRef: function (ref, component) {\n    var inst = this.getPublicInstance();\n    !(inst != null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Stateless function components cannot have refs.') : invariant(false) : undefined;\n    var publicComponentInstance = component.getPublicInstance();\n    if (process.env.NODE_ENV !== 'production') {\n      var componentName = component && component.getName ? component.getName() : 'a component';\n      process.env.NODE_ENV !== 'production' ? warning(publicComponentInstance != null, 'Stateless function components cannot be given refs ' + '(See ref \"%s\" in %s created by %s). ' + 'Attempts to access this ref will fail.', ref, componentName, this.getName()) : undefined;\n    }\n    var refs = inst.refs === emptyObject ? inst.refs = {} : inst.refs;\n    refs[ref] = publicComponentInstance;\n  },\n\n  /**\n   * Detaches a reference name.\n   *\n   * @param {string} ref Name to dereference.\n   * @final\n   * @private\n   */\n  detachRef: function (ref) {\n    var refs = this.getPublicInstance().refs;\n    delete refs[ref];\n  },\n\n  /**\n   * Get a text description of the component that can be used to identify it\n   * in error messages.\n   * @return {string} The name or null.\n   * @internal\n   */\n  getName: function () {\n    var type = this._currentElement.type;\n    var constructor = this._instance && this._instance.constructor;\n    return type.displayName || constructor && constructor.displayName || type.name || constructor && constructor.name || null;\n  },\n\n  /**\n   * Get the publicly accessible representation of this component - i.e. what\n   * is exposed by refs and returned by render. Can be null for stateless\n   * components.\n   *\n   * @return {ReactComponent} the public component instance.\n   * @internal\n   */\n  getPublicInstance: function () {\n    var inst = this._instance;\n    if (inst instanceof StatelessComponent) {\n      return null;\n    }\n    return inst;\n  },\n\n  // Stub\n  _instantiateReactComponent: null\n\n};\n\nReactPerf.measureMethods(ReactCompositeComponentMixin, 'ReactCompositeComponent', {\n  mountComponent: 'mountComponent',\n  updateComponent: 'updateComponent',\n  _renderValidatedComponent: '_renderValidatedComponent'\n});\n\nvar ReactCompositeComponent = {\n\n  Mixin: ReactCompositeComponentMixin\n\n};\n\nmodule.exports = ReactCompositeComponent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactCompositeComponent.js\n ** module id = 65\n ** module chunks = 4\n **/","/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactComponentEnvironment\n */\n\n'use strict';\n\nvar invariant = require('fbjs/lib/invariant');\n\nvar injected = false;\n\nvar ReactComponentEnvironment = {\n\n  /**\n   * Optionally injectable environment dependent cleanup hook. (server vs.\n   * browser etc). Example: A browser system caches DOM nodes based on component\n   * ID and must remove that cache entry when this instance is unmounted.\n   */\n  unmountIDFromEnvironment: null,\n\n  /**\n   * Optionally injectable hook for swapping out mount images in the middle of\n   * the tree.\n   */\n  replaceNodeWithMarkupByID: null,\n\n  /**\n   * Optionally injectable hook for processing a queue of child updates. Will\n   * later move into MultiChildComponents.\n   */\n  processChildrenUpdates: null,\n\n  injection: {\n    injectEnvironment: function (environment) {\n      !!injected ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactCompositeComponent: injectEnvironment() can only be called once.') : invariant(false) : undefined;\n      ReactComponentEnvironment.unmountIDFromEnvironment = environment.unmountIDFromEnvironment;\n      ReactComponentEnvironment.replaceNodeWithMarkupByID = environment.replaceNodeWithMarkupByID;\n      ReactComponentEnvironment.processChildrenUpdates = environment.processChildrenUpdates;\n      injected = true;\n    }\n  }\n\n};\n\nmodule.exports = ReactComponentEnvironment;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactComponentEnvironment.js\n ** module id = 66\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactPropTypeLocations\n */\n\n'use strict';\n\nvar keyMirror = require('fbjs/lib/keyMirror');\n\nvar ReactPropTypeLocations = keyMirror({\n  prop: null,\n  context: null,\n  childContext: null\n});\n\nmodule.exports = ReactPropTypeLocations;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactPropTypeLocations.js\n ** module id = 67\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactPropTypeLocationNames\n */\n\n'use strict';\n\nvar ReactPropTypeLocationNames = {};\n\nif (process.env.NODE_ENV !== 'production') {\n  ReactPropTypeLocationNames = {\n    prop: 'prop',\n    context: 'context',\n    childContext: 'child context'\n  };\n}\n\nmodule.exports = ReactPropTypeLocationNames;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactPropTypeLocationNames.js\n ** module id = 68\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule shouldUpdateReactComponent\n * @typechecks static-only\n */\n\n'use strict';\n\n/**\n * Given a `prevElement` and `nextElement`, determines if the existing\n * instance should be updated as opposed to being destroyed or replaced by a new\n * instance. Both arguments are elements. This ensures that this logic can\n * operate on stateless trees without any backing instance.\n *\n * @param {?object} prevElement\n * @param {?object} nextElement\n * @return {boolean} True if the existing instance should be updated.\n * @protected\n */\nfunction shouldUpdateReactComponent(prevElement, nextElement) {\n  var prevEmpty = prevElement === null || prevElement === false;\n  var nextEmpty = nextElement === null || nextElement === false;\n  if (prevEmpty || nextEmpty) {\n    return prevEmpty === nextEmpty;\n  }\n\n  var prevType = typeof prevElement;\n  var nextType = typeof nextElement;\n  if (prevType === 'string' || prevType === 'number') {\n    return nextType === 'string' || nextType === 'number';\n  } else {\n    return nextType === 'object' && prevElement.type === nextElement.type && prevElement.key === nextElement.key;\n  }\n  return false;\n}\n\nmodule.exports = shouldUpdateReactComponent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/shouldUpdateReactComponent.js\n ** module id = 69\n ** module chunks = 4\n **/","/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactEmptyComponent\n */\n\n'use strict';\n\nvar ReactElement = require('./ReactElement');\nvar ReactEmptyComponentRegistry = require('./ReactEmptyComponentRegistry');\nvar ReactReconciler = require('./ReactReconciler');\n\nvar assign = require('./Object.assign');\n\nvar placeholderElement;\n\nvar ReactEmptyComponentInjection = {\n  injectEmptyComponent: function (component) {\n    placeholderElement = ReactElement.createElement(component);\n  }\n};\n\nvar ReactEmptyComponent = function (instantiate) {\n  this._currentElement = null;\n  this._rootNodeID = null;\n  this._renderedComponent = instantiate(placeholderElement);\n};\nassign(ReactEmptyComponent.prototype, {\n  construct: function (element) {},\n  mountComponent: function (rootID, transaction, context) {\n    ReactEmptyComponentRegistry.registerNullComponentID(rootID);\n    this._rootNodeID = rootID;\n    return ReactReconciler.mountComponent(this._renderedComponent, rootID, transaction, context);\n  },\n  receiveComponent: function () {},\n  unmountComponent: function (rootID, transaction, context) {\n    ReactReconciler.unmountComponent(this._renderedComponent);\n    ReactEmptyComponentRegistry.deregisterNullComponentID(this._rootNodeID);\n    this._rootNodeID = null;\n    this._renderedComponent = null;\n  }\n});\n\nReactEmptyComponent.injection = ReactEmptyComponentInjection;\n\nmodule.exports = ReactEmptyComponent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactEmptyComponent.js\n ** module id = 70\n ** module chunks = 4\n **/","/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactNativeComponent\n */\n\n'use strict';\n\nvar assign = require('./Object.assign');\nvar invariant = require('fbjs/lib/invariant');\n\nvar autoGenerateWrapperClass = null;\nvar genericComponentClass = null;\n// This registry keeps track of wrapper classes around native tags.\nvar tagToComponentClass = {};\nvar textComponentClass = null;\n\nvar ReactNativeComponentInjection = {\n  // This accepts a class that receives the tag string. This is a catch all\n  // that can render any kind of tag.\n  injectGenericComponentClass: function (componentClass) {\n    genericComponentClass = componentClass;\n  },\n  // This accepts a text component class that takes the text string to be\n  // rendered as props.\n  injectTextComponentClass: function (componentClass) {\n    textComponentClass = componentClass;\n  },\n  // This accepts a keyed object with classes as values. Each key represents a\n  // tag. That particular tag will use this class instead of the generic one.\n  injectComponentClasses: function (componentClasses) {\n    assign(tagToComponentClass, componentClasses);\n  }\n};\n\n/**\n * Get a composite component wrapper class for a specific tag.\n *\n * @param {ReactElement} element The tag for which to get the class.\n * @return {function} The React class constructor function.\n */\nfunction getComponentClassForElement(element) {\n  if (typeof element.type === 'function') {\n    return element.type;\n  }\n  var tag = element.type;\n  var componentClass = tagToComponentClass[tag];\n  if (componentClass == null) {\n    tagToComponentClass[tag] = componentClass = autoGenerateWrapperClass(tag);\n  }\n  return componentClass;\n}\n\n/**\n * Get a native internal component class for a specific tag.\n *\n * @param {ReactElement} element The element to create.\n * @return {function} The internal class constructor function.\n */\nfunction createInternalComponent(element) {\n  !genericComponentClass ? process.env.NODE_ENV !== 'production' ? invariant(false, 'There is no registered component for the tag %s', element.type) : invariant(false) : undefined;\n  return new genericComponentClass(element.type, element.props);\n}\n\n/**\n * @param {ReactText} text\n * @return {ReactComponent}\n */\nfunction createInstanceForText(text) {\n  return new textComponentClass(text);\n}\n\n/**\n * @param {ReactComponent} component\n * @return {boolean}\n */\nfunction isTextComponent(component) {\n  return component instanceof textComponentClass;\n}\n\nvar ReactNativeComponent = {\n  getComponentClassForElement: getComponentClassForElement,\n  createInternalComponent: createInternalComponent,\n  createInstanceForText: createInstanceForText,\n  isTextComponent: isTextComponent,\n  injection: ReactNativeComponentInjection\n};\n\nmodule.exports = ReactNativeComponent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactNativeComponent.js\n ** module id = 71\n ** module chunks = 4\n **/","/**\n * Copyright 2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule validateDOMNesting\n */\n\n'use strict';\n\nvar assign = require('./Object.assign');\nvar emptyFunction = require('fbjs/lib/emptyFunction');\nvar warning = require('fbjs/lib/warning');\n\nvar validateDOMNesting = emptyFunction;\n\nif (process.env.NODE_ENV !== 'production') {\n  // This validation code was written based on the HTML5 parsing spec:\n  // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope\n  //\n  // Note: this does not catch all invalid nesting, nor does it try to (as it's\n  // not clear what practical benefit doing so provides); instead, we warn only\n  // for cases where the parser will give a parse tree differing from what React\n  // intended. For example, <b><div></div></b> is invalid but we don't warn\n  // because it still parses correctly; we do warn for other cases like nested\n  // <p> tags where the beginning of the second element implicitly closes the\n  // first, causing a confusing mess.\n\n  // https://html.spec.whatwg.org/multipage/syntax.html#special\n  var specialTags = ['address', 'applet', 'area', 'article', 'aside', 'base', 'basefont', 'bgsound', 'blockquote', 'body', 'br', 'button', 'caption', 'center', 'col', 'colgroup', 'dd', 'details', 'dir', 'div', 'dl', 'dt', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'frame', 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'iframe', 'img', 'input', 'isindex', 'li', 'link', 'listing', 'main', 'marquee', 'menu', 'menuitem', 'meta', 'nav', 'noembed', 'noframes', 'noscript', 'object', 'ol', 'p', 'param', 'plaintext', 'pre', 'script', 'section', 'select', 'source', 'style', 'summary', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'title', 'tr', 'track', 'ul', 'wbr', 'xmp'];\n\n  // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope\n  var inScopeTags = ['applet', 'caption', 'html', 'table', 'td', 'th', 'marquee', 'object', 'template',\n\n  // https://html.spec.whatwg.org/multipage/syntax.html#html-integration-point\n  // TODO: Distinguish by namespace here -- for <title>, including it here\n  // errs on the side of fewer warnings\n  'foreignObject', 'desc', 'title'];\n\n  // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-button-scope\n  var buttonScopeTags = inScopeTags.concat(['button']);\n\n  // https://html.spec.whatwg.org/multipage/syntax.html#generate-implied-end-tags\n  var impliedEndTags = ['dd', 'dt', 'li', 'option', 'optgroup', 'p', 'rp', 'rt'];\n\n  var emptyAncestorInfo = {\n    parentTag: null,\n\n    formTag: null,\n    aTagInScope: null,\n    buttonTagInScope: null,\n    nobrTagInScope: null,\n    pTagInButtonScope: null,\n\n    listItemTagAutoclosing: null,\n    dlItemTagAutoclosing: null\n  };\n\n  var updatedAncestorInfo = function (oldInfo, tag, instance) {\n    var ancestorInfo = assign({}, oldInfo || emptyAncestorInfo);\n    var info = { tag: tag, instance: instance };\n\n    if (inScopeTags.indexOf(tag) !== -1) {\n      ancestorInfo.aTagInScope = null;\n      ancestorInfo.buttonTagInScope = null;\n      ancestorInfo.nobrTagInScope = null;\n    }\n    if (buttonScopeTags.indexOf(tag) !== -1) {\n      ancestorInfo.pTagInButtonScope = null;\n    }\n\n    // See rules for 'li', 'dd', 'dt' start tags in\n    // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody\n    if (specialTags.indexOf(tag) !== -1 && tag !== 'address' && tag !== 'div' && tag !== 'p') {\n      ancestorInfo.listItemTagAutoclosing = null;\n      ancestorInfo.dlItemTagAutoclosing = null;\n    }\n\n    ancestorInfo.parentTag = info;\n\n    if (tag === 'form') {\n      ancestorInfo.formTag = info;\n    }\n    if (tag === 'a') {\n      ancestorInfo.aTagInScope = info;\n    }\n    if (tag === 'button') {\n      ancestorInfo.buttonTagInScope = info;\n    }\n    if (tag === 'nobr') {\n      ancestorInfo.nobrTagInScope = info;\n    }\n    if (tag === 'p') {\n      ancestorInfo.pTagInButtonScope = info;\n    }\n    if (tag === 'li') {\n      ancestorInfo.listItemTagAutoclosing = info;\n    }\n    if (tag === 'dd' || tag === 'dt') {\n      ancestorInfo.dlItemTagAutoclosing = info;\n    }\n\n    return ancestorInfo;\n  };\n\n  /**\n   * Returns whether\n   */\n  var isTagValidWithParent = function (tag, parentTag) {\n    // First, let's check if we're in an unusual parsing mode...\n    switch (parentTag) {\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inselect\n      case 'select':\n        return tag === 'option' || tag === 'optgroup' || tag === '#text';\n      case 'optgroup':\n        return tag === 'option' || tag === '#text';\n      // Strictly speaking, seeing an <option> doesn't mean we're in a <select>\n      // but\n      case 'option':\n        return tag === '#text';\n\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intd\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incaption\n      // No special behavior since these rules fall back to \"in body\" mode for\n      // all except special table nodes which cause bad parsing behavior anyway.\n\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intr\n      case 'tr':\n        return tag === 'th' || tag === 'td' || tag === 'style' || tag === 'script' || tag === 'template';\n\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intbody\n      case 'tbody':\n      case 'thead':\n      case 'tfoot':\n        return tag === 'tr' || tag === 'style' || tag === 'script' || tag === 'template';\n\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incolgroup\n      case 'colgroup':\n        return tag === 'col' || tag === 'template';\n\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intable\n      case 'table':\n        return tag === 'caption' || tag === 'colgroup' || tag === 'tbody' || tag === 'tfoot' || tag === 'thead' || tag === 'style' || tag === 'script' || tag === 'template';\n\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inhead\n      case 'head':\n        return tag === 'base' || tag === 'basefont' || tag === 'bgsound' || tag === 'link' || tag === 'meta' || tag === 'title' || tag === 'noscript' || tag === 'noframes' || tag === 'style' || tag === 'script' || tag === 'template';\n\n      // https://html.spec.whatwg.org/multipage/semantics.html#the-html-element\n      case 'html':\n        return tag === 'head' || tag === 'body';\n    }\n\n    // Probably in the \"in body\" parsing mode, so we outlaw only tag combos\n    // where the parsing rules cause implicit opens or closes to be added.\n    // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody\n    switch (tag) {\n      case 'h1':\n      case 'h2':\n      case 'h3':\n      case 'h4':\n      case 'h5':\n      case 'h6':\n        return parentTag !== 'h1' && parentTag !== 'h2' && parentTag !== 'h3' && parentTag !== 'h4' && parentTag !== 'h5' && parentTag !== 'h6';\n\n      case 'rp':\n      case 'rt':\n        return impliedEndTags.indexOf(parentTag) === -1;\n\n      case 'caption':\n      case 'col':\n      case 'colgroup':\n      case 'frame':\n      case 'head':\n      case 'tbody':\n      case 'td':\n      case 'tfoot':\n      case 'th':\n      case 'thead':\n      case 'tr':\n        // These tags are only valid with a few parents that have special child\n        // parsing rules -- if we're down here, then none of those matched and\n        // so we allow it only if we don't know what the parent is, as all other\n        // cases are invalid.\n        return parentTag == null;\n    }\n\n    return true;\n  };\n\n  /**\n   * Returns whether\n   */\n  var findInvalidAncestorForTag = function (tag, ancestorInfo) {\n    switch (tag) {\n      case 'address':\n      case 'article':\n      case 'aside':\n      case 'blockquote':\n      case 'center':\n      case 'details':\n      case 'dialog':\n      case 'dir':\n      case 'div':\n      case 'dl':\n      case 'fieldset':\n      case 'figcaption':\n      case 'figure':\n      case 'footer':\n      case 'header':\n      case 'hgroup':\n      case 'main':\n      case 'menu':\n      case 'nav':\n      case 'ol':\n      case 'p':\n      case 'section':\n      case 'summary':\n      case 'ul':\n\n      case 'pre':\n      case 'listing':\n\n      case 'table':\n\n      case 'hr':\n\n      case 'xmp':\n\n      case 'h1':\n      case 'h2':\n      case 'h3':\n      case 'h4':\n      case 'h5':\n      case 'h6':\n        return ancestorInfo.pTagInButtonScope;\n\n      case 'form':\n        return ancestorInfo.formTag || ancestorInfo.pTagInButtonScope;\n\n      case 'li':\n        return ancestorInfo.listItemTagAutoclosing;\n\n      case 'dd':\n      case 'dt':\n        return ancestorInfo.dlItemTagAutoclosing;\n\n      case 'button':\n        return ancestorInfo.buttonTagInScope;\n\n      case 'a':\n        // Spec says something about storing a list of markers, but it sounds\n        // equivalent to this check.\n        return ancestorInfo.aTagInScope;\n\n      case 'nobr':\n        return ancestorInfo.nobrTagInScope;\n    }\n\n    return null;\n  };\n\n  /**\n   * Given a ReactCompositeComponent instance, return a list of its recursive\n   * owners, starting at the root and ending with the instance itself.\n   */\n  var findOwnerStack = function (instance) {\n    if (!instance) {\n      return [];\n    }\n\n    var stack = [];\n    /*eslint-disable space-after-keywords */\n    do {\n      /*eslint-enable space-after-keywords */\n      stack.push(instance);\n    } while (instance = instance._currentElement._owner);\n    stack.reverse();\n    return stack;\n  };\n\n  var didWarn = {};\n\n  validateDOMNesting = function (childTag, childInstance, ancestorInfo) {\n    ancestorInfo = ancestorInfo || emptyAncestorInfo;\n    var parentInfo = ancestorInfo.parentTag;\n    var parentTag = parentInfo && parentInfo.tag;\n\n    var invalidParent = isTagValidWithParent(childTag, parentTag) ? null : parentInfo;\n    var invalidAncestor = invalidParent ? null : findInvalidAncestorForTag(childTag, ancestorInfo);\n    var problematic = invalidParent || invalidAncestor;\n\n    if (problematic) {\n      var ancestorTag = problematic.tag;\n      var ancestorInstance = problematic.instance;\n\n      var childOwner = childInstance && childInstance._currentElement._owner;\n      var ancestorOwner = ancestorInstance && ancestorInstance._currentElement._owner;\n\n      var childOwners = findOwnerStack(childOwner);\n      var ancestorOwners = findOwnerStack(ancestorOwner);\n\n      var minStackLen = Math.min(childOwners.length, ancestorOwners.length);\n      var i;\n\n      var deepestCommon = -1;\n      for (i = 0; i < minStackLen; i++) {\n        if (childOwners[i] === ancestorOwners[i]) {\n          deepestCommon = i;\n        } else {\n          break;\n        }\n      }\n\n      var UNKNOWN = '(unknown)';\n      var childOwnerNames = childOwners.slice(deepestCommon + 1).map(function (inst) {\n        return inst.getName() || UNKNOWN;\n      });\n      var ancestorOwnerNames = ancestorOwners.slice(deepestCommon + 1).map(function (inst) {\n        return inst.getName() || UNKNOWN;\n      });\n      var ownerInfo = [].concat(\n      // If the parent and child instances have a common owner ancestor, start\n      // with that -- otherwise we just start with the parent's owners.\n      deepestCommon !== -1 ? childOwners[deepestCommon].getName() || UNKNOWN : [], ancestorOwnerNames, ancestorTag,\n      // If we're warning about an invalid (non-parent) ancestry, add '...'\n      invalidAncestor ? ['...'] : [], childOwnerNames, childTag).join(' > ');\n\n      var warnKey = !!invalidParent + '|' + childTag + '|' + ancestorTag + '|' + ownerInfo;\n      if (didWarn[warnKey]) {\n        return;\n      }\n      didWarn[warnKey] = true;\n\n      if (invalidParent) {\n        var info = '';\n        if (ancestorTag === 'table' && childTag === 'tr') {\n          info += ' Add a <tbody> to your code to match the DOM tree generated by ' + 'the browser.';\n        }\n        process.env.NODE_ENV !== 'production' ? warning(false, 'validateDOMNesting(...): <%s> cannot appear as a child of <%s>. ' + 'See %s.%s', childTag, ancestorTag, ownerInfo, info) : undefined;\n      } else {\n        process.env.NODE_ENV !== 'production' ? warning(false, 'validateDOMNesting(...): <%s> cannot appear as a descendant of ' + '<%s>. See %s.', childTag, ancestorTag, ownerInfo) : undefined;\n      }\n    }\n  };\n\n  validateDOMNesting.ancestorInfoContextKey = '__validateDOMNesting_ancestorInfo$' + Math.random().toString(36).slice(2);\n\n  validateDOMNesting.updatedAncestorInfo = updatedAncestorInfo;\n\n  // For testing\n  validateDOMNesting.isTagValidInContext = function (tag, ancestorInfo) {\n    ancestorInfo = ancestorInfo || emptyAncestorInfo;\n    var parentInfo = ancestorInfo.parentTag;\n    var parentTag = parentInfo && parentInfo.tag;\n    return isTagValidWithParent(tag, parentTag) && !findInvalidAncestorForTag(tag, ancestorInfo);\n  };\n}\n\nmodule.exports = validateDOMNesting;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/validateDOMNesting.js\n ** module id = 72\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDefaultInjection\n */\n\n'use strict';\n\nvar BeforeInputEventPlugin = require('./BeforeInputEventPlugin');\nvar ChangeEventPlugin = require('./ChangeEventPlugin');\nvar ClientReactRootIndex = require('./ClientReactRootIndex');\nvar DefaultEventPluginOrder = require('./DefaultEventPluginOrder');\nvar EnterLeaveEventPlugin = require('./EnterLeaveEventPlugin');\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\nvar HTMLDOMPropertyConfig = require('./HTMLDOMPropertyConfig');\nvar ReactBrowserComponentMixin = require('./ReactBrowserComponentMixin');\nvar ReactComponentBrowserEnvironment = require('./ReactComponentBrowserEnvironment');\nvar ReactDefaultBatchingStrategy = require('./ReactDefaultBatchingStrategy');\nvar ReactDOMComponent = require('./ReactDOMComponent');\nvar ReactDOMTextComponent = require('./ReactDOMTextComponent');\nvar ReactEventListener = require('./ReactEventListener');\nvar ReactInjection = require('./ReactInjection');\nvar ReactInstanceHandles = require('./ReactInstanceHandles');\nvar ReactMount = require('./ReactMount');\nvar ReactReconcileTransaction = require('./ReactReconcileTransaction');\nvar SelectEventPlugin = require('./SelectEventPlugin');\nvar ServerReactRootIndex = require('./ServerReactRootIndex');\nvar SimpleEventPlugin = require('./SimpleEventPlugin');\nvar SVGDOMPropertyConfig = require('./SVGDOMPropertyConfig');\n\nvar alreadyInjected = false;\n\nfunction inject() {\n  if (alreadyInjected) {\n    // TODO: This is currently true because these injections are shared between\n    // the client and the server package. They should be built independently\n    // and not share any injection state. Then this problem will be solved.\n    return;\n  }\n  alreadyInjected = true;\n\n  ReactInjection.EventEmitter.injectReactEventListener(ReactEventListener);\n\n  /**\n   * Inject modules for resolving DOM hierarchy and plugin ordering.\n   */\n  ReactInjection.EventPluginHub.injectEventPluginOrder(DefaultEventPluginOrder);\n  ReactInjection.EventPluginHub.injectInstanceHandle(ReactInstanceHandles);\n  ReactInjection.EventPluginHub.injectMount(ReactMount);\n\n  /**\n   * Some important event plugins included by default (without having to require\n   * them).\n   */\n  ReactInjection.EventPluginHub.injectEventPluginsByName({\n    SimpleEventPlugin: SimpleEventPlugin,\n    EnterLeaveEventPlugin: EnterLeaveEventPlugin,\n    ChangeEventPlugin: ChangeEventPlugin,\n    SelectEventPlugin: SelectEventPlugin,\n    BeforeInputEventPlugin: BeforeInputEventPlugin\n  });\n\n  ReactInjection.NativeComponent.injectGenericComponentClass(ReactDOMComponent);\n\n  ReactInjection.NativeComponent.injectTextComponentClass(ReactDOMTextComponent);\n\n  ReactInjection.Class.injectMixin(ReactBrowserComponentMixin);\n\n  ReactInjection.DOMProperty.injectDOMPropertyConfig(HTMLDOMPropertyConfig);\n  ReactInjection.DOMProperty.injectDOMPropertyConfig(SVGDOMPropertyConfig);\n\n  ReactInjection.EmptyComponent.injectEmptyComponent('noscript');\n\n  ReactInjection.Updates.injectReconcileTransaction(ReactReconcileTransaction);\n  ReactInjection.Updates.injectBatchingStrategy(ReactDefaultBatchingStrategy);\n\n  ReactInjection.RootIndex.injectCreateReactRootIndex(ExecutionEnvironment.canUseDOM ? ClientReactRootIndex.createReactRootIndex : ServerReactRootIndex.createReactRootIndex);\n\n  ReactInjection.Component.injectEnvironment(ReactComponentBrowserEnvironment);\n\n  if (process.env.NODE_ENV !== 'production') {\n    var url = ExecutionEnvironment.canUseDOM && window.location.href || '';\n    if (/[?&]react_perf\\b/.test(url)) {\n      var ReactDefaultPerf = require('./ReactDefaultPerf');\n      ReactDefaultPerf.start();\n    }\n  }\n}\n\nmodule.exports = {\n  inject: inject\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDefaultInjection.js\n ** module id = 73\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015 Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule BeforeInputEventPlugin\n * @typechecks static-only\n */\n\n'use strict';\n\nvar EventConstants = require('./EventConstants');\nvar EventPropagators = require('./EventPropagators');\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\nvar FallbackCompositionState = require('./FallbackCompositionState');\nvar SyntheticCompositionEvent = require('./SyntheticCompositionEvent');\nvar SyntheticInputEvent = require('./SyntheticInputEvent');\n\nvar keyOf = require('fbjs/lib/keyOf');\n\nvar END_KEYCODES = [9, 13, 27, 32]; // Tab, Return, Esc, Space\nvar START_KEYCODE = 229;\n\nvar canUseCompositionEvent = ExecutionEnvironment.canUseDOM && 'CompositionEvent' in window;\n\nvar documentMode = null;\nif (ExecutionEnvironment.canUseDOM && 'documentMode' in document) {\n  documentMode = document.documentMode;\n}\n\n// Webkit offers a very useful `textInput` event that can be used to\n// directly represent `beforeInput`. The IE `textinput` event is not as\n// useful, so we don't use it.\nvar canUseTextInputEvent = ExecutionEnvironment.canUseDOM && 'TextEvent' in window && !documentMode && !isPresto();\n\n// In IE9+, we have access to composition events, but the data supplied\n// by the native compositionend event may be incorrect. Japanese ideographic\n// spaces, for instance (\\u3000) are not recorded correctly.\nvar useFallbackCompositionData = ExecutionEnvironment.canUseDOM && (!canUseCompositionEvent || documentMode && documentMode > 8 && documentMode <= 11);\n\n/**\n * Opera <= 12 includes TextEvent in window, but does not fire\n * text input events. Rely on keypress instead.\n */\nfunction isPresto() {\n  var opera = window.opera;\n  return typeof opera === 'object' && typeof opera.version === 'function' && parseInt(opera.version(), 10) <= 12;\n}\n\nvar SPACEBAR_CODE = 32;\nvar SPACEBAR_CHAR = String.fromCharCode(SPACEBAR_CODE);\n\nvar topLevelTypes = EventConstants.topLevelTypes;\n\n// Events and their corresponding property names.\nvar eventTypes = {\n  beforeInput: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onBeforeInput: null }),\n      captured: keyOf({ onBeforeInputCapture: null })\n    },\n    dependencies: [topLevelTypes.topCompositionEnd, topLevelTypes.topKeyPress, topLevelTypes.topTextInput, topLevelTypes.topPaste]\n  },\n  compositionEnd: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onCompositionEnd: null }),\n      captured: keyOf({ onCompositionEndCapture: null })\n    },\n    dependencies: [topLevelTypes.topBlur, topLevelTypes.topCompositionEnd, topLevelTypes.topKeyDown, topLevelTypes.topKeyPress, topLevelTypes.topKeyUp, topLevelTypes.topMouseDown]\n  },\n  compositionStart: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onCompositionStart: null }),\n      captured: keyOf({ onCompositionStartCapture: null })\n    },\n    dependencies: [topLevelTypes.topBlur, topLevelTypes.topCompositionStart, topLevelTypes.topKeyDown, topLevelTypes.topKeyPress, topLevelTypes.topKeyUp, topLevelTypes.topMouseDown]\n  },\n  compositionUpdate: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onCompositionUpdate: null }),\n      captured: keyOf({ onCompositionUpdateCapture: null })\n    },\n    dependencies: [topLevelTypes.topBlur, topLevelTypes.topCompositionUpdate, topLevelTypes.topKeyDown, topLevelTypes.topKeyPress, topLevelTypes.topKeyUp, topLevelTypes.topMouseDown]\n  }\n};\n\n// Track whether we've ever handled a keypress on the space key.\nvar hasSpaceKeypress = false;\n\n/**\n * Return whether a native keypress event is assumed to be a command.\n * This is required because Firefox fires `keypress` events for key commands\n * (cut, copy, select-all, etc.) even though no character is inserted.\n */\nfunction isKeypressCommand(nativeEvent) {\n  return (nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) &&\n  // ctrlKey && altKey is equivalent to AltGr, and is not a command.\n  !(nativeEvent.ctrlKey && nativeEvent.altKey);\n}\n\n/**\n * Translate native top level events into event types.\n *\n * @param {string} topLevelType\n * @return {object}\n */\nfunction getCompositionEventType(topLevelType) {\n  switch (topLevelType) {\n    case topLevelTypes.topCompositionStart:\n      return eventTypes.compositionStart;\n    case topLevelTypes.topCompositionEnd:\n      return eventTypes.compositionEnd;\n    case topLevelTypes.topCompositionUpdate:\n      return eventTypes.compositionUpdate;\n  }\n}\n\n/**\n * Does our fallback best-guess model think this event signifies that\n * composition has begun?\n *\n * @param {string} topLevelType\n * @param {object} nativeEvent\n * @return {boolean}\n */\nfunction isFallbackCompositionStart(topLevelType, nativeEvent) {\n  return topLevelType === topLevelTypes.topKeyDown && nativeEvent.keyCode === START_KEYCODE;\n}\n\n/**\n * Does our fallback mode think that this event is the end of composition?\n *\n * @param {string} topLevelType\n * @param {object} nativeEvent\n * @return {boolean}\n */\nfunction isFallbackCompositionEnd(topLevelType, nativeEvent) {\n  switch (topLevelType) {\n    case topLevelTypes.topKeyUp:\n      // Command keys insert or clear IME input.\n      return END_KEYCODES.indexOf(nativeEvent.keyCode) !== -1;\n    case topLevelTypes.topKeyDown:\n      // Expect IME keyCode on each keydown. If we get any other\n      // code we must have exited earlier.\n      return nativeEvent.keyCode !== START_KEYCODE;\n    case topLevelTypes.topKeyPress:\n    case topLevelTypes.topMouseDown:\n    case topLevelTypes.topBlur:\n      // Events are not possible without cancelling IME.\n      return true;\n    default:\n      return false;\n  }\n}\n\n/**\n * Google Input Tools provides composition data via a CustomEvent,\n * with the `data` property populated in the `detail` object. If this\n * is available on the event object, use it. If not, this is a plain\n * composition event and we have nothing special to extract.\n *\n * @param {object} nativeEvent\n * @return {?string}\n */\nfunction getDataFromCustomEvent(nativeEvent) {\n  var detail = nativeEvent.detail;\n  if (typeof detail === 'object' && 'data' in detail) {\n    return detail.data;\n  }\n  return null;\n}\n\n// Track the current IME composition fallback object, if any.\nvar currentComposition = null;\n\n/**\n * @param {string} topLevelType Record from `EventConstants`.\n * @param {DOMEventTarget} topLevelTarget The listening component root node.\n * @param {string} topLevelTargetID ID of `topLevelTarget`.\n * @param {object} nativeEvent Native browser event.\n * @return {?object} A SyntheticCompositionEvent.\n */\nfunction extractCompositionEvent(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) {\n  var eventType;\n  var fallbackData;\n\n  if (canUseCompositionEvent) {\n    eventType = getCompositionEventType(topLevelType);\n  } else if (!currentComposition) {\n    if (isFallbackCompositionStart(topLevelType, nativeEvent)) {\n      eventType = eventTypes.compositionStart;\n    }\n  } else if (isFallbackCompositionEnd(topLevelType, nativeEvent)) {\n    eventType = eventTypes.compositionEnd;\n  }\n\n  if (!eventType) {\n    return null;\n  }\n\n  if (useFallbackCompositionData) {\n    // The current composition is stored statically and must not be\n    // overwritten while composition continues.\n    if (!currentComposition && eventType === eventTypes.compositionStart) {\n      currentComposition = FallbackCompositionState.getPooled(topLevelTarget);\n    } else if (eventType === eventTypes.compositionEnd) {\n      if (currentComposition) {\n        fallbackData = currentComposition.getData();\n      }\n    }\n  }\n\n  var event = SyntheticCompositionEvent.getPooled(eventType, topLevelTargetID, nativeEvent, nativeEventTarget);\n\n  if (fallbackData) {\n    // Inject data generated from fallback path into the synthetic event.\n    // This matches the property of native CompositionEventInterface.\n    event.data = fallbackData;\n  } else {\n    var customData = getDataFromCustomEvent(nativeEvent);\n    if (customData !== null) {\n      event.data = customData;\n    }\n  }\n\n  EventPropagators.accumulateTwoPhaseDispatches(event);\n  return event;\n}\n\n/**\n * @param {string} topLevelType Record from `EventConstants`.\n * @param {object} nativeEvent Native browser event.\n * @return {?string} The string corresponding to this `beforeInput` event.\n */\nfunction getNativeBeforeInputChars(topLevelType, nativeEvent) {\n  switch (topLevelType) {\n    case topLevelTypes.topCompositionEnd:\n      return getDataFromCustomEvent(nativeEvent);\n    case topLevelTypes.topKeyPress:\n      /**\n       * If native `textInput` events are available, our goal is to make\n       * use of them. However, there is a special case: the spacebar key.\n       * In Webkit, preventing default on a spacebar `textInput` event\n       * cancels character insertion, but it *also* causes the browser\n       * to fall back to its default spacebar behavior of scrolling the\n       * page.\n       *\n       * Tracking at:\n       * https://code.google.com/p/chromium/issues/detail?id=355103\n       *\n       * To avoid this issue, use the keypress event as if no `textInput`\n       * event is available.\n       */\n      var which = nativeEvent.which;\n      if (which !== SPACEBAR_CODE) {\n        return null;\n      }\n\n      hasSpaceKeypress = true;\n      return SPACEBAR_CHAR;\n\n    case topLevelTypes.topTextInput:\n      // Record the characters to be added to the DOM.\n      var chars = nativeEvent.data;\n\n      // If it's a spacebar character, assume that we have already handled\n      // it at the keypress level and bail immediately. Android Chrome\n      // doesn't give us keycodes, so we need to blacklist it.\n      if (chars === SPACEBAR_CHAR && hasSpaceKeypress) {\n        return null;\n      }\n\n      return chars;\n\n    default:\n      // For other native event types, do nothing.\n      return null;\n  }\n}\n\n/**\n * For browsers that do not provide the `textInput` event, extract the\n * appropriate string to use for SyntheticInputEvent.\n *\n * @param {string} topLevelType Record from `EventConstants`.\n * @param {object} nativeEvent Native browser event.\n * @return {?string} The fallback string for this `beforeInput` event.\n */\nfunction getFallbackBeforeInputChars(topLevelType, nativeEvent) {\n  // If we are currently composing (IME) and using a fallback to do so,\n  // try to extract the composed characters from the fallback object.\n  if (currentComposition) {\n    if (topLevelType === topLevelTypes.topCompositionEnd || isFallbackCompositionEnd(topLevelType, nativeEvent)) {\n      var chars = currentComposition.getData();\n      FallbackCompositionState.release(currentComposition);\n      currentComposition = null;\n      return chars;\n    }\n    return null;\n  }\n\n  switch (topLevelType) {\n    case topLevelTypes.topPaste:\n      // If a paste event occurs after a keypress, throw out the input\n      // chars. Paste events should not lead to BeforeInput events.\n      return null;\n    case topLevelTypes.topKeyPress:\n      /**\n       * As of v27, Firefox may fire keypress events even when no character\n       * will be inserted. A few possibilities:\n       *\n       * - `which` is `0`. Arrow keys, Esc key, etc.\n       *\n       * - `which` is the pressed key code, but no char is available.\n       *   Ex: 'AltGr + d` in Polish. There is no modified character for\n       *   this key combination and no character is inserted into the\n       *   document, but FF fires the keypress for char code `100` anyway.\n       *   No `input` event will occur.\n       *\n       * - `which` is the pressed key code, but a command combination is\n       *   being used. Ex: `Cmd+C`. No character is inserted, and no\n       *   `input` event will occur.\n       */\n      if (nativeEvent.which && !isKeypressCommand(nativeEvent)) {\n        return String.fromCharCode(nativeEvent.which);\n      }\n      return null;\n    case topLevelTypes.topCompositionEnd:\n      return useFallbackCompositionData ? null : nativeEvent.data;\n    default:\n      return null;\n  }\n}\n\n/**\n * Extract a SyntheticInputEvent for `beforeInput`, based on either native\n * `textInput` or fallback behavior.\n *\n * @param {string} topLevelType Record from `EventConstants`.\n * @param {DOMEventTarget} topLevelTarget The listening component root node.\n * @param {string} topLevelTargetID ID of `topLevelTarget`.\n * @param {object} nativeEvent Native browser event.\n * @return {?object} A SyntheticInputEvent.\n */\nfunction extractBeforeInputEvent(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) {\n  var chars;\n\n  if (canUseTextInputEvent) {\n    chars = getNativeBeforeInputChars(topLevelType, nativeEvent);\n  } else {\n    chars = getFallbackBeforeInputChars(topLevelType, nativeEvent);\n  }\n\n  // If no characters are being inserted, no BeforeInput event should\n  // be fired.\n  if (!chars) {\n    return null;\n  }\n\n  var event = SyntheticInputEvent.getPooled(eventTypes.beforeInput, topLevelTargetID, nativeEvent, nativeEventTarget);\n\n  event.data = chars;\n  EventPropagators.accumulateTwoPhaseDispatches(event);\n  return event;\n}\n\n/**\n * Create an `onBeforeInput` event to match\n * http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105/#events-inputevents.\n *\n * This event plugin is based on the native `textInput` event\n * available in Chrome, Safari, Opera, and IE. This event fires after\n * `onKeyPress` and `onCompositionEnd`, but before `onInput`.\n *\n * `beforeInput` is spec'd but not implemented in any browsers, and\n * the `input` event does not provide any useful information about what has\n * actually been added, contrary to the spec. Thus, `textInput` is the best\n * available event to identify the characters that have actually been inserted\n * into the target node.\n *\n * This plugin is also responsible for emitting `composition` events, thus\n * allowing us to share composition fallback code for both `beforeInput` and\n * `composition` event types.\n */\nvar BeforeInputEventPlugin = {\n\n  eventTypes: eventTypes,\n\n  /**\n   * @param {string} topLevelType Record from `EventConstants`.\n   * @param {DOMEventTarget} topLevelTarget The listening component root node.\n   * @param {string} topLevelTargetID ID of `topLevelTarget`.\n   * @param {object} nativeEvent Native browser event.\n   * @return {*} An accumulation of synthetic events.\n   * @see {EventPluginHub.extractEvents}\n   */\n  extractEvents: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) {\n    return [extractCompositionEvent(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget), extractBeforeInputEvent(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget)];\n  }\n};\n\nmodule.exports = BeforeInputEventPlugin;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/BeforeInputEventPlugin.js\n ** module id = 74\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule EventPropagators\n */\n\n'use strict';\n\nvar EventConstants = require('./EventConstants');\nvar EventPluginHub = require('./EventPluginHub');\n\nvar warning = require('fbjs/lib/warning');\n\nvar accumulateInto = require('./accumulateInto');\nvar forEachAccumulated = require('./forEachAccumulated');\n\nvar PropagationPhases = EventConstants.PropagationPhases;\nvar getListener = EventPluginHub.getListener;\n\n/**\n * Some event types have a notion of different registration names for different\n * \"phases\" of propagation. This finds listeners by a given phase.\n */\nfunction listenerAtPhase(id, event, propagationPhase) {\n  var registrationName = event.dispatchConfig.phasedRegistrationNames[propagationPhase];\n  return getListener(id, registrationName);\n}\n\n/**\n * Tags a `SyntheticEvent` with dispatched listeners. Creating this function\n * here, allows us to not have to bind or create functions for each event.\n * Mutating the event's members allows us to not have to create a wrapping\n * \"dispatch\" object that pairs the event with the listener.\n */\nfunction accumulateDirectionalDispatches(domID, upwards, event) {\n  if (process.env.NODE_ENV !== 'production') {\n    process.env.NODE_ENV !== 'production' ? warning(domID, 'Dispatching id must not be null') : undefined;\n  }\n  var phase = upwards ? PropagationPhases.bubbled : PropagationPhases.captured;\n  var listener = listenerAtPhase(domID, event, phase);\n  if (listener) {\n    event._dispatchListeners = accumulateInto(event._dispatchListeners, listener);\n    event._dispatchIDs = accumulateInto(event._dispatchIDs, domID);\n  }\n}\n\n/**\n * Collect dispatches (must be entirely collected before dispatching - see unit\n * tests). Lazily allocate the array to conserve memory.  We must loop through\n * each event and perform the traversal for each one. We cannot perform a\n * single traversal for the entire collection of events because each event may\n * have a different target.\n */\nfunction accumulateTwoPhaseDispatchesSingle(event) {\n  if (event && event.dispatchConfig.phasedRegistrationNames) {\n    EventPluginHub.injection.getInstanceHandle().traverseTwoPhase(event.dispatchMarker, accumulateDirectionalDispatches, event);\n  }\n}\n\n/**\n * Same as `accumulateTwoPhaseDispatchesSingle`, but skips over the targetID.\n */\nfunction accumulateTwoPhaseDispatchesSingleSkipTarget(event) {\n  if (event && event.dispatchConfig.phasedRegistrationNames) {\n    EventPluginHub.injection.getInstanceHandle().traverseTwoPhaseSkipTarget(event.dispatchMarker, accumulateDirectionalDispatches, event);\n  }\n}\n\n/**\n * Accumulates without regard to direction, does not look for phased\n * registration names. Same as `accumulateDirectDispatchesSingle` but without\n * requiring that the `dispatchMarker` be the same as the dispatched ID.\n */\nfunction accumulateDispatches(id, ignoredDirection, event) {\n  if (event && event.dispatchConfig.registrationName) {\n    var registrationName = event.dispatchConfig.registrationName;\n    var listener = getListener(id, registrationName);\n    if (listener) {\n      event._dispatchListeners = accumulateInto(event._dispatchListeners, listener);\n      event._dispatchIDs = accumulateInto(event._dispatchIDs, id);\n    }\n  }\n}\n\n/**\n * Accumulates dispatches on an `SyntheticEvent`, but only for the\n * `dispatchMarker`.\n * @param {SyntheticEvent} event\n */\nfunction accumulateDirectDispatchesSingle(event) {\n  if (event && event.dispatchConfig.registrationName) {\n    accumulateDispatches(event.dispatchMarker, null, event);\n  }\n}\n\nfunction accumulateTwoPhaseDispatches(events) {\n  forEachAccumulated(events, accumulateTwoPhaseDispatchesSingle);\n}\n\nfunction accumulateTwoPhaseDispatchesSkipTarget(events) {\n  forEachAccumulated(events, accumulateTwoPhaseDispatchesSingleSkipTarget);\n}\n\nfunction accumulateEnterLeaveDispatches(leave, enter, fromID, toID) {\n  EventPluginHub.injection.getInstanceHandle().traverseEnterLeave(fromID, toID, accumulateDispatches, leave, enter);\n}\n\nfunction accumulateDirectDispatches(events) {\n  forEachAccumulated(events, accumulateDirectDispatchesSingle);\n}\n\n/**\n * A small set of propagation patterns, each of which will accept a small amount\n * of information, and generate a set of \"dispatch ready event objects\" - which\n * are sets of events that have already been annotated with a set of dispatched\n * listener functions/ids. The API is designed this way to discourage these\n * propagation strategies from actually executing the dispatches, since we\n * always want to collect the entire set of dispatches before executing event a\n * single one.\n *\n * @constructor EventPropagators\n */\nvar EventPropagators = {\n  accumulateTwoPhaseDispatches: accumulateTwoPhaseDispatches,\n  accumulateTwoPhaseDispatchesSkipTarget: accumulateTwoPhaseDispatchesSkipTarget,\n  accumulateDirectDispatches: accumulateDirectDispatches,\n  accumulateEnterLeaveDispatches: accumulateEnterLeaveDispatches\n};\n\nmodule.exports = EventPropagators;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/EventPropagators.js\n ** module id = 75\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule FallbackCompositionState\n * @typechecks static-only\n */\n\n'use strict';\n\nvar PooledClass = require('./PooledClass');\n\nvar assign = require('./Object.assign');\nvar getTextContentAccessor = require('./getTextContentAccessor');\n\n/**\n * This helper class stores information about text content of a target node,\n * allowing comparison of content before and after a given event.\n *\n * Identify the node where selection currently begins, then observe\n * both its text content and its current position in the DOM. Since the\n * browser may natively replace the target node during composition, we can\n * use its position to find its replacement.\n *\n * @param {DOMEventTarget} root\n */\nfunction FallbackCompositionState(root) {\n  this._root = root;\n  this._startText = this.getText();\n  this._fallbackText = null;\n}\n\nassign(FallbackCompositionState.prototype, {\n  destructor: function () {\n    this._root = null;\n    this._startText = null;\n    this._fallbackText = null;\n  },\n\n  /**\n   * Get current text of input.\n   *\n   * @return {string}\n   */\n  getText: function () {\n    if ('value' in this._root) {\n      return this._root.value;\n    }\n    return this._root[getTextContentAccessor()];\n  },\n\n  /**\n   * Determine the differing substring between the initially stored\n   * text content and the current content.\n   *\n   * @return {string}\n   */\n  getData: function () {\n    if (this._fallbackText) {\n      return this._fallbackText;\n    }\n\n    var start;\n    var startValue = this._startText;\n    var startLength = startValue.length;\n    var end;\n    var endValue = this.getText();\n    var endLength = endValue.length;\n\n    for (start = 0; start < startLength; start++) {\n      if (startValue[start] !== endValue[start]) {\n        break;\n      }\n    }\n\n    var minEnd = startLength - start;\n    for (end = 1; end <= minEnd; end++) {\n      if (startValue[startLength - end] !== endValue[endLength - end]) {\n        break;\n      }\n    }\n\n    var sliceTail = end > 1 ? 1 - end : undefined;\n    this._fallbackText = endValue.slice(start, sliceTail);\n    return this._fallbackText;\n  }\n});\n\nPooledClass.addPoolingTo(FallbackCompositionState);\n\nmodule.exports = FallbackCompositionState;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/FallbackCompositionState.js\n ** module id = 76\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getTextContentAccessor\n */\n\n'use strict';\n\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\n\nvar contentKey = null;\n\n/**\n * Gets the key used to access text content on a DOM node.\n *\n * @return {?string} Key used to access text content.\n * @internal\n */\nfunction getTextContentAccessor() {\n  if (!contentKey && ExecutionEnvironment.canUseDOM) {\n    // Prefer textContent to innerText because many browsers support both but\n    // SVG <text> elements don't support innerText even when <div> does.\n    contentKey = 'textContent' in document.documentElement ? 'textContent' : 'innerText';\n  }\n  return contentKey;\n}\n\nmodule.exports = getTextContentAccessor;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/getTextContentAccessor.js\n ** module id = 77\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticCompositionEvent\n * @typechecks static-only\n */\n\n'use strict';\n\nvar SyntheticEvent = require('./SyntheticEvent');\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/DOM-Level-3-Events/#events-compositionevents\n */\nvar CompositionEventInterface = {\n  data: null\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticCompositionEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n  SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticEvent.augmentClass(SyntheticCompositionEvent, CompositionEventInterface);\n\nmodule.exports = SyntheticCompositionEvent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SyntheticCompositionEvent.js\n ** module id = 78\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticEvent\n * @typechecks static-only\n */\n\n'use strict';\n\nvar PooledClass = require('./PooledClass');\n\nvar assign = require('./Object.assign');\nvar emptyFunction = require('fbjs/lib/emptyFunction');\nvar warning = require('fbjs/lib/warning');\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar EventInterface = {\n  type: null,\n  // currentTarget is set when dispatching; no use in copying it here\n  currentTarget: emptyFunction.thatReturnsNull,\n  eventPhase: null,\n  bubbles: null,\n  cancelable: null,\n  timeStamp: function (event) {\n    return event.timeStamp || Date.now();\n  },\n  defaultPrevented: null,\n  isTrusted: null\n};\n\n/**\n * Synthetic events are dispatched by event plugins, typically in response to a\n * top-level event delegation handler.\n *\n * These systems should generally use pooling to reduce the frequency of garbage\n * collection. The system should check `isPersistent` to determine whether the\n * event should be released into the pool after being dispatched. Users that\n * need a persisted event should invoke `persist`.\n *\n * Synthetic events (and subclasses) implement the DOM Level 3 Events API by\n * normalizing browser quirks. Subclasses do not necessarily have to implement a\n * DOM interface; custom application-specific events can also subclass this.\n *\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n */\nfunction SyntheticEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n  this.dispatchConfig = dispatchConfig;\n  this.dispatchMarker = dispatchMarker;\n  this.nativeEvent = nativeEvent;\n  this.target = nativeEventTarget;\n  this.currentTarget = nativeEventTarget;\n\n  var Interface = this.constructor.Interface;\n  for (var propName in Interface) {\n    if (!Interface.hasOwnProperty(propName)) {\n      continue;\n    }\n    var normalize = Interface[propName];\n    if (normalize) {\n      this[propName] = normalize(nativeEvent);\n    } else {\n      this[propName] = nativeEvent[propName];\n    }\n  }\n\n  var defaultPrevented = nativeEvent.defaultPrevented != null ? nativeEvent.defaultPrevented : nativeEvent.returnValue === false;\n  if (defaultPrevented) {\n    this.isDefaultPrevented = emptyFunction.thatReturnsTrue;\n  } else {\n    this.isDefaultPrevented = emptyFunction.thatReturnsFalse;\n  }\n  this.isPropagationStopped = emptyFunction.thatReturnsFalse;\n}\n\nassign(SyntheticEvent.prototype, {\n\n  preventDefault: function () {\n    this.defaultPrevented = true;\n    var event = this.nativeEvent;\n    if (process.env.NODE_ENV !== 'production') {\n      process.env.NODE_ENV !== 'production' ? warning(event, 'This synthetic event is reused for performance reasons. If you\\'re ' + 'seeing this, you\\'re calling `preventDefault` on a ' + 'released/nullified synthetic event. This is a no-op. See ' + 'https://fb.me/react-event-pooling for more information.') : undefined;\n    }\n    if (!event) {\n      return;\n    }\n\n    if (event.preventDefault) {\n      event.preventDefault();\n    } else {\n      event.returnValue = false;\n    }\n    this.isDefaultPrevented = emptyFunction.thatReturnsTrue;\n  },\n\n  stopPropagation: function () {\n    var event = this.nativeEvent;\n    if (process.env.NODE_ENV !== 'production') {\n      process.env.NODE_ENV !== 'production' ? warning(event, 'This synthetic event is reused for performance reasons. If you\\'re ' + 'seeing this, you\\'re calling `stopPropagation` on a ' + 'released/nullified synthetic event. This is a no-op. See ' + 'https://fb.me/react-event-pooling for more information.') : undefined;\n    }\n    if (!event) {\n      return;\n    }\n\n    if (event.stopPropagation) {\n      event.stopPropagation();\n    } else {\n      event.cancelBubble = true;\n    }\n    this.isPropagationStopped = emptyFunction.thatReturnsTrue;\n  },\n\n  /**\n   * We release all dispatched `SyntheticEvent`s after each event loop, adding\n   * them back into the pool. This allows a way to hold onto a reference that\n   * won't be added back into the pool.\n   */\n  persist: function () {\n    this.isPersistent = emptyFunction.thatReturnsTrue;\n  },\n\n  /**\n   * Checks if this event should be released back into the pool.\n   *\n   * @return {boolean} True if this should not be released, false otherwise.\n   */\n  isPersistent: emptyFunction.thatReturnsFalse,\n\n  /**\n   * `PooledClass` looks for `destructor` on each instance it releases.\n   */\n  destructor: function () {\n    var Interface = this.constructor.Interface;\n    for (var propName in Interface) {\n      this[propName] = null;\n    }\n    this.dispatchConfig = null;\n    this.dispatchMarker = null;\n    this.nativeEvent = null;\n  }\n\n});\n\nSyntheticEvent.Interface = EventInterface;\n\n/**\n * Helper to reduce boilerplate when creating subclasses.\n *\n * @param {function} Class\n * @param {?object} Interface\n */\nSyntheticEvent.augmentClass = function (Class, Interface) {\n  var Super = this;\n\n  var prototype = Object.create(Super.prototype);\n  assign(prototype, Class.prototype);\n  Class.prototype = prototype;\n  Class.prototype.constructor = Class;\n\n  Class.Interface = assign({}, Super.Interface, Interface);\n  Class.augmentClass = Super.augmentClass;\n\n  PooledClass.addPoolingTo(Class, PooledClass.fourArgumentPooler);\n};\n\nPooledClass.addPoolingTo(SyntheticEvent, PooledClass.fourArgumentPooler);\n\nmodule.exports = SyntheticEvent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SyntheticEvent.js\n ** module id = 79\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticInputEvent\n * @typechecks static-only\n */\n\n'use strict';\n\nvar SyntheticEvent = require('./SyntheticEvent');\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105\n *      /#events-inputevents\n */\nvar InputEventInterface = {\n  data: null\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticInputEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n  SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticEvent.augmentClass(SyntheticInputEvent, InputEventInterface);\n\nmodule.exports = SyntheticInputEvent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SyntheticInputEvent.js\n ** module id = 80\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule keyOf\n */\n\n/**\n * Allows extraction of a minified key. Let's the build system minify keys\n * without losing the ability to dynamically use key strings as values\n * themselves. Pass in an object with a single key/val pair and it will return\n * you the string key of that single record. Suppose you want to grab the\n * value for a key 'className' inside of an object. Key/val minification may\n * have aliased that key to be 'xa12'. keyOf({className: null}) will return\n * 'xa12' in that case. Resolve keys you want to use once at startup time, then\n * reuse those resolutions.\n */\n\"use strict\";\n\nvar keyOf = function (oneKeyObj) {\n  var key;\n  for (key in oneKeyObj) {\n    if (!oneKeyObj.hasOwnProperty(key)) {\n      continue;\n    }\n    return key;\n  }\n  return null;\n};\n\nmodule.exports = keyOf;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/fbjs/lib/keyOf.js\n ** module id = 81\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ChangeEventPlugin\n */\n\n'use strict';\n\nvar EventConstants = require('./EventConstants');\nvar EventPluginHub = require('./EventPluginHub');\nvar EventPropagators = require('./EventPropagators');\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\nvar ReactUpdates = require('./ReactUpdates');\nvar SyntheticEvent = require('./SyntheticEvent');\n\nvar getEventTarget = require('./getEventTarget');\nvar isEventSupported = require('./isEventSupported');\nvar isTextInputElement = require('./isTextInputElement');\nvar keyOf = require('fbjs/lib/keyOf');\n\nvar topLevelTypes = EventConstants.topLevelTypes;\n\nvar eventTypes = {\n  change: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onChange: null }),\n      captured: keyOf({ onChangeCapture: null })\n    },\n    dependencies: [topLevelTypes.topBlur, topLevelTypes.topChange, topLevelTypes.topClick, topLevelTypes.topFocus, topLevelTypes.topInput, topLevelTypes.topKeyDown, topLevelTypes.topKeyUp, topLevelTypes.topSelectionChange]\n  }\n};\n\n/**\n * For IE shims\n */\nvar activeElement = null;\nvar activeElementID = null;\nvar activeElementValue = null;\nvar activeElementValueProp = null;\n\n/**\n * SECTION: handle `change` event\n */\nfunction shouldUseChangeEvent(elem) {\n  var nodeName = elem.nodeName && elem.nodeName.toLowerCase();\n  return nodeName === 'select' || nodeName === 'input' && elem.type === 'file';\n}\n\nvar doesChangeEventBubble = false;\nif (ExecutionEnvironment.canUseDOM) {\n  // See `handleChange` comment below\n  doesChangeEventBubble = isEventSupported('change') && (!('documentMode' in document) || document.documentMode > 8);\n}\n\nfunction manualDispatchChangeEvent(nativeEvent) {\n  var event = SyntheticEvent.getPooled(eventTypes.change, activeElementID, nativeEvent, getEventTarget(nativeEvent));\n  EventPropagators.accumulateTwoPhaseDispatches(event);\n\n  // If change and propertychange bubbled, we'd just bind to it like all the\n  // other events and have it go through ReactBrowserEventEmitter. Since it\n  // doesn't, we manually listen for the events and so we have to enqueue and\n  // process the abstract event manually.\n  //\n  // Batching is necessary here in order to ensure that all event handlers run\n  // before the next rerender (including event handlers attached to ancestor\n  // elements instead of directly on the input). Without this, controlled\n  // components don't work properly in conjunction with event bubbling because\n  // the component is rerendered and the value reverted before all the event\n  // handlers can run. See https://github.com/facebook/react/issues/708.\n  ReactUpdates.batchedUpdates(runEventInBatch, event);\n}\n\nfunction runEventInBatch(event) {\n  EventPluginHub.enqueueEvents(event);\n  EventPluginHub.processEventQueue(false);\n}\n\nfunction startWatchingForChangeEventIE8(target, targetID) {\n  activeElement = target;\n  activeElementID = targetID;\n  activeElement.attachEvent('onchange', manualDispatchChangeEvent);\n}\n\nfunction stopWatchingForChangeEventIE8() {\n  if (!activeElement) {\n    return;\n  }\n  activeElement.detachEvent('onchange', manualDispatchChangeEvent);\n  activeElement = null;\n  activeElementID = null;\n}\n\nfunction getTargetIDForChangeEvent(topLevelType, topLevelTarget, topLevelTargetID) {\n  if (topLevelType === topLevelTypes.topChange) {\n    return topLevelTargetID;\n  }\n}\nfunction handleEventsForChangeEventIE8(topLevelType, topLevelTarget, topLevelTargetID) {\n  if (topLevelType === topLevelTypes.topFocus) {\n    // stopWatching() should be a noop here but we call it just in case we\n    // missed a blur event somehow.\n    stopWatchingForChangeEventIE8();\n    startWatchingForChangeEventIE8(topLevelTarget, topLevelTargetID);\n  } else if (topLevelType === topLevelTypes.topBlur) {\n    stopWatchingForChangeEventIE8();\n  }\n}\n\n/**\n * SECTION: handle `input` event\n */\nvar isInputEventSupported = false;\nif (ExecutionEnvironment.canUseDOM) {\n  // IE9 claims to support the input event but fails to trigger it when\n  // deleting text, so we ignore its input events\n  isInputEventSupported = isEventSupported('input') && (!('documentMode' in document) || document.documentMode > 9);\n}\n\n/**\n * (For old IE.) Replacement getter/setter for the `value` property that gets\n * set on the active element.\n */\nvar newValueProp = {\n  get: function () {\n    return activeElementValueProp.get.call(this);\n  },\n  set: function (val) {\n    // Cast to a string so we can do equality checks.\n    activeElementValue = '' + val;\n    activeElementValueProp.set.call(this, val);\n  }\n};\n\n/**\n * (For old IE.) Starts tracking propertychange events on the passed-in element\n * and override the value property so that we can distinguish user events from\n * value changes in JS.\n */\nfunction startWatchingForValueChange(target, targetID) {\n  activeElement = target;\n  activeElementID = targetID;\n  activeElementValue = target.value;\n  activeElementValueProp = Object.getOwnPropertyDescriptor(target.constructor.prototype, 'value');\n\n  // Not guarded in a canDefineProperty check: IE8 supports defineProperty only\n  // on DOM elements\n  Object.defineProperty(activeElement, 'value', newValueProp);\n  activeElement.attachEvent('onpropertychange', handlePropertyChange);\n}\n\n/**\n * (For old IE.) Removes the event listeners from the currently-tracked element,\n * if any exists.\n */\nfunction stopWatchingForValueChange() {\n  if (!activeElement) {\n    return;\n  }\n\n  // delete restores the original property definition\n  delete activeElement.value;\n  activeElement.detachEvent('onpropertychange', handlePropertyChange);\n\n  activeElement = null;\n  activeElementID = null;\n  activeElementValue = null;\n  activeElementValueProp = null;\n}\n\n/**\n * (For old IE.) Handles a propertychange event, sending a `change` event if\n * the value of the active element has changed.\n */\nfunction handlePropertyChange(nativeEvent) {\n  if (nativeEvent.propertyName !== 'value') {\n    return;\n  }\n  var value = nativeEvent.srcElement.value;\n  if (value === activeElementValue) {\n    return;\n  }\n  activeElementValue = value;\n\n  manualDispatchChangeEvent(nativeEvent);\n}\n\n/**\n * If a `change` event should be fired, returns the target's ID.\n */\nfunction getTargetIDForInputEvent(topLevelType, topLevelTarget, topLevelTargetID) {\n  if (topLevelType === topLevelTypes.topInput) {\n    // In modern browsers (i.e., not IE8 or IE9), the input event is exactly\n    // what we want so fall through here and trigger an abstract event\n    return topLevelTargetID;\n  }\n}\n\n// For IE8 and IE9.\nfunction handleEventsForInputEventIE(topLevelType, topLevelTarget, topLevelTargetID) {\n  if (topLevelType === topLevelTypes.topFocus) {\n    // In IE8, we can capture almost all .value changes by adding a\n    // propertychange handler and looking for events with propertyName\n    // equal to 'value'\n    // In IE9, propertychange fires for most input events but is buggy and\n    // doesn't fire when text is deleted, but conveniently, selectionchange\n    // appears to fire in all of the remaining cases so we catch those and\n    // forward the event if the value has changed\n    // In either case, we don't want to call the event handler if the value\n    // is changed from JS so we redefine a setter for `.value` that updates\n    // our activeElementValue variable, allowing us to ignore those changes\n    //\n    // stopWatching() should be a noop here but we call it just in case we\n    // missed a blur event somehow.\n    stopWatchingForValueChange();\n    startWatchingForValueChange(topLevelTarget, topLevelTargetID);\n  } else if (topLevelType === topLevelTypes.topBlur) {\n    stopWatchingForValueChange();\n  }\n}\n\n// For IE8 and IE9.\nfunction getTargetIDForInputEventIE(topLevelType, topLevelTarget, topLevelTargetID) {\n  if (topLevelType === topLevelTypes.topSelectionChange || topLevelType === topLevelTypes.topKeyUp || topLevelType === topLevelTypes.topKeyDown) {\n    // On the selectionchange event, the target is just document which isn't\n    // helpful for us so just check activeElement instead.\n    //\n    // 99% of the time, keydown and keyup aren't necessary. IE8 fails to fire\n    // propertychange on the first input event after setting `value` from a\n    // script and fires only keydown, keypress, keyup. Catching keyup usually\n    // gets it and catching keydown lets us fire an event for the first\n    // keystroke if user does a key repeat (it'll be a little delayed: right\n    // before the second keystroke). Other input methods (e.g., paste) seem to\n    // fire selectionchange normally.\n    if (activeElement && activeElement.value !== activeElementValue) {\n      activeElementValue = activeElement.value;\n      return activeElementID;\n    }\n  }\n}\n\n/**\n * SECTION: handle `click` event\n */\nfunction shouldUseClickEvent(elem) {\n  // Use the `click` event to detect changes to checkbox and radio inputs.\n  // This approach works across all browsers, whereas `change` does not fire\n  // until `blur` in IE8.\n  return elem.nodeName && elem.nodeName.toLowerCase() === 'input' && (elem.type === 'checkbox' || elem.type === 'radio');\n}\n\nfunction getTargetIDForClickEvent(topLevelType, topLevelTarget, topLevelTargetID) {\n  if (topLevelType === topLevelTypes.topClick) {\n    return topLevelTargetID;\n  }\n}\n\n/**\n * This plugin creates an `onChange` event that normalizes change events\n * across form elements. This event fires at a time when it's possible to\n * change the element's value without seeing a flicker.\n *\n * Supported elements are:\n * - input (see `isTextInputElement`)\n * - textarea\n * - select\n */\nvar ChangeEventPlugin = {\n\n  eventTypes: eventTypes,\n\n  /**\n   * @param {string} topLevelType Record from `EventConstants`.\n   * @param {DOMEventTarget} topLevelTarget The listening component root node.\n   * @param {string} topLevelTargetID ID of `topLevelTarget`.\n   * @param {object} nativeEvent Native browser event.\n   * @return {*} An accumulation of synthetic events.\n   * @see {EventPluginHub.extractEvents}\n   */\n  extractEvents: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) {\n\n    var getTargetIDFunc, handleEventFunc;\n    if (shouldUseChangeEvent(topLevelTarget)) {\n      if (doesChangeEventBubble) {\n        getTargetIDFunc = getTargetIDForChangeEvent;\n      } else {\n        handleEventFunc = handleEventsForChangeEventIE8;\n      }\n    } else if (isTextInputElement(topLevelTarget)) {\n      if (isInputEventSupported) {\n        getTargetIDFunc = getTargetIDForInputEvent;\n      } else {\n        getTargetIDFunc = getTargetIDForInputEventIE;\n        handleEventFunc = handleEventsForInputEventIE;\n      }\n    } else if (shouldUseClickEvent(topLevelTarget)) {\n      getTargetIDFunc = getTargetIDForClickEvent;\n    }\n\n    if (getTargetIDFunc) {\n      var targetID = getTargetIDFunc(topLevelType, topLevelTarget, topLevelTargetID);\n      if (targetID) {\n        var event = SyntheticEvent.getPooled(eventTypes.change, targetID, nativeEvent, nativeEventTarget);\n        event.type = 'change';\n        EventPropagators.accumulateTwoPhaseDispatches(event);\n        return event;\n      }\n    }\n\n    if (handleEventFunc) {\n      handleEventFunc(topLevelType, topLevelTarget, topLevelTargetID);\n    }\n  }\n\n};\n\nmodule.exports = ChangeEventPlugin;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ChangeEventPlugin.js\n ** module id = 82\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getEventTarget\n * @typechecks static-only\n */\n\n'use strict';\n\n/**\n * Gets the target node from a native browser event by accounting for\n * inconsistencies in browser DOM APIs.\n *\n * @param {object} nativeEvent Native browser event.\n * @return {DOMEventTarget} Target node.\n */\nfunction getEventTarget(nativeEvent) {\n  var target = nativeEvent.target || nativeEvent.srcElement || window;\n  // Safari may fire events on text nodes (Node.TEXT_NODE is 3).\n  // @see http://www.quirksmode.org/js/events_properties.html\n  return target.nodeType === 3 ? target.parentNode : target;\n}\n\nmodule.exports = getEventTarget;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/getEventTarget.js\n ** module id = 83\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule isTextInputElement\n */\n\n'use strict';\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary\n */\nvar supportedInputTypes = {\n  'color': true,\n  'date': true,\n  'datetime': true,\n  'datetime-local': true,\n  'email': true,\n  'month': true,\n  'number': true,\n  'password': true,\n  'range': true,\n  'search': true,\n  'tel': true,\n  'text': true,\n  'time': true,\n  'url': true,\n  'week': true\n};\n\nfunction isTextInputElement(elem) {\n  var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n  return nodeName && (nodeName === 'input' && supportedInputTypes[elem.type] || nodeName === 'textarea');\n}\n\nmodule.exports = isTextInputElement;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/isTextInputElement.js\n ** module id = 84\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ClientReactRootIndex\n * @typechecks\n */\n\n'use strict';\n\nvar nextReactRootIndex = 0;\n\nvar ClientReactRootIndex = {\n  createReactRootIndex: function () {\n    return nextReactRootIndex++;\n  }\n};\n\nmodule.exports = ClientReactRootIndex;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ClientReactRootIndex.js\n ** module id = 85\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule DefaultEventPluginOrder\n */\n\n'use strict';\n\nvar keyOf = require('fbjs/lib/keyOf');\n\n/**\n * Module that is injectable into `EventPluginHub`, that specifies a\n * deterministic ordering of `EventPlugin`s. A convenient way to reason about\n * plugins, without having to package every one of them. This is better than\n * having plugins be ordered in the same order that they are injected because\n * that ordering would be influenced by the packaging order.\n * `ResponderEventPlugin` must occur before `SimpleEventPlugin` so that\n * preventing default on events is convenient in `SimpleEventPlugin` handlers.\n */\nvar DefaultEventPluginOrder = [keyOf({ ResponderEventPlugin: null }), keyOf({ SimpleEventPlugin: null }), keyOf({ TapEventPlugin: null }), keyOf({ EnterLeaveEventPlugin: null }), keyOf({ ChangeEventPlugin: null }), keyOf({ SelectEventPlugin: null }), keyOf({ BeforeInputEventPlugin: null })];\n\nmodule.exports = DefaultEventPluginOrder;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/DefaultEventPluginOrder.js\n ** module id = 86\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule EnterLeaveEventPlugin\n * @typechecks static-only\n */\n\n'use strict';\n\nvar EventConstants = require('./EventConstants');\nvar EventPropagators = require('./EventPropagators');\nvar SyntheticMouseEvent = require('./SyntheticMouseEvent');\n\nvar ReactMount = require('./ReactMount');\nvar keyOf = require('fbjs/lib/keyOf');\n\nvar topLevelTypes = EventConstants.topLevelTypes;\nvar getFirstReactDOM = ReactMount.getFirstReactDOM;\n\nvar eventTypes = {\n  mouseEnter: {\n    registrationName: keyOf({ onMouseEnter: null }),\n    dependencies: [topLevelTypes.topMouseOut, topLevelTypes.topMouseOver]\n  },\n  mouseLeave: {\n    registrationName: keyOf({ onMouseLeave: null }),\n    dependencies: [topLevelTypes.topMouseOut, topLevelTypes.topMouseOver]\n  }\n};\n\nvar extractedEvents = [null, null];\n\nvar EnterLeaveEventPlugin = {\n\n  eventTypes: eventTypes,\n\n  /**\n   * For almost every interaction we care about, there will be both a top-level\n   * `mouseover` and `mouseout` event that occurs. Only use `mouseout` so that\n   * we do not extract duplicate events. However, moving the mouse into the\n   * browser from outside will not fire a `mouseout` event. In this case, we use\n   * the `mouseover` top-level event.\n   *\n   * @param {string} topLevelType Record from `EventConstants`.\n   * @param {DOMEventTarget} topLevelTarget The listening component root node.\n   * @param {string} topLevelTargetID ID of `topLevelTarget`.\n   * @param {object} nativeEvent Native browser event.\n   * @return {*} An accumulation of synthetic events.\n   * @see {EventPluginHub.extractEvents}\n   */\n  extractEvents: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) {\n    if (topLevelType === topLevelTypes.topMouseOver && (nativeEvent.relatedTarget || nativeEvent.fromElement)) {\n      return null;\n    }\n    if (topLevelType !== topLevelTypes.topMouseOut && topLevelType !== topLevelTypes.topMouseOver) {\n      // Must not be a mouse in or mouse out - ignoring.\n      return null;\n    }\n\n    var win;\n    if (topLevelTarget.window === topLevelTarget) {\n      // `topLevelTarget` is probably a window object.\n      win = topLevelTarget;\n    } else {\n      // TODO: Figure out why `ownerDocument` is sometimes undefined in IE8.\n      var doc = topLevelTarget.ownerDocument;\n      if (doc) {\n        win = doc.defaultView || doc.parentWindow;\n      } else {\n        win = window;\n      }\n    }\n\n    var from;\n    var to;\n    var fromID = '';\n    var toID = '';\n    if (topLevelType === topLevelTypes.topMouseOut) {\n      from = topLevelTarget;\n      fromID = topLevelTargetID;\n      to = getFirstReactDOM(nativeEvent.relatedTarget || nativeEvent.toElement);\n      if (to) {\n        toID = ReactMount.getID(to);\n      } else {\n        to = win;\n      }\n      to = to || win;\n    } else {\n      from = win;\n      to = topLevelTarget;\n      toID = topLevelTargetID;\n    }\n\n    if (from === to) {\n      // Nothing pertains to our managed components.\n      return null;\n    }\n\n    var leave = SyntheticMouseEvent.getPooled(eventTypes.mouseLeave, fromID, nativeEvent, nativeEventTarget);\n    leave.type = 'mouseleave';\n    leave.target = from;\n    leave.relatedTarget = to;\n\n    var enter = SyntheticMouseEvent.getPooled(eventTypes.mouseEnter, toID, nativeEvent, nativeEventTarget);\n    enter.type = 'mouseenter';\n    enter.target = to;\n    enter.relatedTarget = from;\n\n    EventPropagators.accumulateEnterLeaveDispatches(leave, enter, fromID, toID);\n\n    extractedEvents[0] = leave;\n    extractedEvents[1] = enter;\n\n    return extractedEvents;\n  }\n\n};\n\nmodule.exports = EnterLeaveEventPlugin;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/EnterLeaveEventPlugin.js\n ** module id = 87\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticMouseEvent\n * @typechecks static-only\n */\n\n'use strict';\n\nvar SyntheticUIEvent = require('./SyntheticUIEvent');\nvar ViewportMetrics = require('./ViewportMetrics');\n\nvar getEventModifierState = require('./getEventModifierState');\n\n/**\n * @interface MouseEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar MouseEventInterface = {\n  screenX: null,\n  screenY: null,\n  clientX: null,\n  clientY: null,\n  ctrlKey: null,\n  shiftKey: null,\n  altKey: null,\n  metaKey: null,\n  getModifierState: getEventModifierState,\n  button: function (event) {\n    // Webkit, Firefox, IE9+\n    // which:  1 2 3\n    // button: 0 1 2 (standard)\n    var button = event.button;\n    if ('which' in event) {\n      return button;\n    }\n    // IE<9\n    // which:  undefined\n    // button: 0 0 0\n    // button: 1 4 2 (onmouseup)\n    return button === 2 ? 2 : button === 4 ? 1 : 0;\n  },\n  buttons: null,\n  relatedTarget: function (event) {\n    return event.relatedTarget || (event.fromElement === event.srcElement ? event.toElement : event.fromElement);\n  },\n  // \"Proprietary\" Interface.\n  pageX: function (event) {\n    return 'pageX' in event ? event.pageX : event.clientX + ViewportMetrics.currentScrollLeft;\n  },\n  pageY: function (event) {\n    return 'pageY' in event ? event.pageY : event.clientY + ViewportMetrics.currentScrollTop;\n  }\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticMouseEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n  SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticUIEvent.augmentClass(SyntheticMouseEvent, MouseEventInterface);\n\nmodule.exports = SyntheticMouseEvent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SyntheticMouseEvent.js\n ** module id = 88\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticUIEvent\n * @typechecks static-only\n */\n\n'use strict';\n\nvar SyntheticEvent = require('./SyntheticEvent');\n\nvar getEventTarget = require('./getEventTarget');\n\n/**\n * @interface UIEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar UIEventInterface = {\n  view: function (event) {\n    if (event.view) {\n      return event.view;\n    }\n\n    var target = getEventTarget(event);\n    if (target != null && target.window === target) {\n      // target is a window object\n      return target;\n    }\n\n    var doc = target.ownerDocument;\n    // TODO: Figure out why `ownerDocument` is sometimes undefined in IE8.\n    if (doc) {\n      return doc.defaultView || doc.parentWindow;\n    } else {\n      return window;\n    }\n  },\n  detail: function (event) {\n    return event.detail || 0;\n  }\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticEvent}\n */\nfunction SyntheticUIEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n  SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticEvent.augmentClass(SyntheticUIEvent, UIEventInterface);\n\nmodule.exports = SyntheticUIEvent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SyntheticUIEvent.js\n ** module id = 89\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getEventModifierState\n * @typechecks static-only\n */\n\n'use strict';\n\n/**\n * Translation from modifier key to the associated property in the event.\n * @see http://www.w3.org/TR/DOM-Level-3-Events/#keys-Modifiers\n */\n\nvar modifierKeyToProp = {\n  'Alt': 'altKey',\n  'Control': 'ctrlKey',\n  'Meta': 'metaKey',\n  'Shift': 'shiftKey'\n};\n\n// IE8 does not implement getModifierState so we simply map it to the only\n// modifier keys exposed by the event itself, does not support Lock-keys.\n// Currently, all major browsers except Chrome seems to support Lock-keys.\nfunction modifierStateGetter(keyArg) {\n  var syntheticEvent = this;\n  var nativeEvent = syntheticEvent.nativeEvent;\n  if (nativeEvent.getModifierState) {\n    return nativeEvent.getModifierState(keyArg);\n  }\n  var keyProp = modifierKeyToProp[keyArg];\n  return keyProp ? !!nativeEvent[keyProp] : false;\n}\n\nfunction getEventModifierState(nativeEvent) {\n  return modifierStateGetter;\n}\n\nmodule.exports = getEventModifierState;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/getEventModifierState.js\n ** module id = 90\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule HTMLDOMPropertyConfig\n */\n\n'use strict';\n\nvar DOMProperty = require('./DOMProperty');\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\n\nvar MUST_USE_ATTRIBUTE = DOMProperty.injection.MUST_USE_ATTRIBUTE;\nvar MUST_USE_PROPERTY = DOMProperty.injection.MUST_USE_PROPERTY;\nvar HAS_BOOLEAN_VALUE = DOMProperty.injection.HAS_BOOLEAN_VALUE;\nvar HAS_SIDE_EFFECTS = DOMProperty.injection.HAS_SIDE_EFFECTS;\nvar HAS_NUMERIC_VALUE = DOMProperty.injection.HAS_NUMERIC_VALUE;\nvar HAS_POSITIVE_NUMERIC_VALUE = DOMProperty.injection.HAS_POSITIVE_NUMERIC_VALUE;\nvar HAS_OVERLOADED_BOOLEAN_VALUE = DOMProperty.injection.HAS_OVERLOADED_BOOLEAN_VALUE;\n\nvar hasSVG;\nif (ExecutionEnvironment.canUseDOM) {\n  var implementation = document.implementation;\n  hasSVG = implementation && implementation.hasFeature && implementation.hasFeature('http://www.w3.org/TR/SVG11/feature#BasicStructure', '1.1');\n}\n\nvar HTMLDOMPropertyConfig = {\n  isCustomAttribute: RegExp.prototype.test.bind(/^(data|aria)-[a-z_][a-z\\d_.\\-]*$/),\n  Properties: {\n    /**\n     * Standard Properties\n     */\n    accept: null,\n    acceptCharset: null,\n    accessKey: null,\n    action: null,\n    allowFullScreen: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,\n    allowTransparency: MUST_USE_ATTRIBUTE,\n    alt: null,\n    async: HAS_BOOLEAN_VALUE,\n    autoComplete: null,\n    // autoFocus is polyfilled/normalized by AutoFocusUtils\n    // autoFocus: HAS_BOOLEAN_VALUE,\n    autoPlay: HAS_BOOLEAN_VALUE,\n    capture: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,\n    cellPadding: null,\n    cellSpacing: null,\n    charSet: MUST_USE_ATTRIBUTE,\n    challenge: MUST_USE_ATTRIBUTE,\n    checked: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\n    classID: MUST_USE_ATTRIBUTE,\n    // To set className on SVG elements, it's necessary to use .setAttribute;\n    // this works on HTML elements too in all browsers except IE8. Conveniently,\n    // IE8 doesn't support SVG and so we can simply use the attribute in\n    // browsers that support SVG and the property in browsers that don't,\n    // regardless of whether the element is HTML or SVG.\n    className: hasSVG ? MUST_USE_ATTRIBUTE : MUST_USE_PROPERTY,\n    cols: MUST_USE_ATTRIBUTE | HAS_POSITIVE_NUMERIC_VALUE,\n    colSpan: null,\n    content: null,\n    contentEditable: null,\n    contextMenu: MUST_USE_ATTRIBUTE,\n    controls: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\n    coords: null,\n    crossOrigin: null,\n    data: null, // For `<object />` acts as `src`.\n    dateTime: MUST_USE_ATTRIBUTE,\n    'default': HAS_BOOLEAN_VALUE,\n    defer: HAS_BOOLEAN_VALUE,\n    dir: null,\n    disabled: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,\n    download: HAS_OVERLOADED_BOOLEAN_VALUE,\n    draggable: null,\n    encType: null,\n    form: MUST_USE_ATTRIBUTE,\n    formAction: MUST_USE_ATTRIBUTE,\n    formEncType: MUST_USE_ATTRIBUTE,\n    formMethod: MUST_USE_ATTRIBUTE,\n    formNoValidate: HAS_BOOLEAN_VALUE,\n    formTarget: MUST_USE_ATTRIBUTE,\n    frameBorder: MUST_USE_ATTRIBUTE,\n    headers: null,\n    height: MUST_USE_ATTRIBUTE,\n    hidden: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,\n    high: null,\n    href: null,\n    hrefLang: null,\n    htmlFor: null,\n    httpEquiv: null,\n    icon: null,\n    id: MUST_USE_PROPERTY,\n    inputMode: MUST_USE_ATTRIBUTE,\n    integrity: null,\n    is: MUST_USE_ATTRIBUTE,\n    keyParams: MUST_USE_ATTRIBUTE,\n    keyType: MUST_USE_ATTRIBUTE,\n    kind: null,\n    label: null,\n    lang: null,\n    list: MUST_USE_ATTRIBUTE,\n    loop: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\n    low: null,\n    manifest: MUST_USE_ATTRIBUTE,\n    marginHeight: null,\n    marginWidth: null,\n    max: null,\n    maxLength: MUST_USE_ATTRIBUTE,\n    media: MUST_USE_ATTRIBUTE,\n    mediaGroup: null,\n    method: null,\n    min: null,\n    minLength: MUST_USE_ATTRIBUTE,\n    multiple: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\n    muted: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\n    name: null,\n    nonce: MUST_USE_ATTRIBUTE,\n    noValidate: HAS_BOOLEAN_VALUE,\n    open: HAS_BOOLEAN_VALUE,\n    optimum: null,\n    pattern: null,\n    placeholder: null,\n    poster: null,\n    preload: null,\n    radioGroup: null,\n    readOnly: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\n    rel: null,\n    required: HAS_BOOLEAN_VALUE,\n    reversed: HAS_BOOLEAN_VALUE,\n    role: MUST_USE_ATTRIBUTE,\n    rows: MUST_USE_ATTRIBUTE | HAS_POSITIVE_NUMERIC_VALUE,\n    rowSpan: null,\n    sandbox: null,\n    scope: null,\n    scoped: HAS_BOOLEAN_VALUE,\n    scrolling: null,\n    seamless: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,\n    selected: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\n    shape: null,\n    size: MUST_USE_ATTRIBUTE | HAS_POSITIVE_NUMERIC_VALUE,\n    sizes: MUST_USE_ATTRIBUTE,\n    span: HAS_POSITIVE_NUMERIC_VALUE,\n    spellCheck: null,\n    src: null,\n    srcDoc: MUST_USE_PROPERTY,\n    srcLang: null,\n    srcSet: MUST_USE_ATTRIBUTE,\n    start: HAS_NUMERIC_VALUE,\n    step: null,\n    style: null,\n    summary: null,\n    tabIndex: null,\n    target: null,\n    title: null,\n    type: null,\n    useMap: null,\n    value: MUST_USE_PROPERTY | HAS_SIDE_EFFECTS,\n    width: MUST_USE_ATTRIBUTE,\n    wmode: MUST_USE_ATTRIBUTE,\n    wrap: null,\n\n    /**\n     * RDFa Properties\n     */\n    about: MUST_USE_ATTRIBUTE,\n    datatype: MUST_USE_ATTRIBUTE,\n    inlist: MUST_USE_ATTRIBUTE,\n    prefix: MUST_USE_ATTRIBUTE,\n    // property is also supported for OpenGraph in meta tags.\n    property: MUST_USE_ATTRIBUTE,\n    resource: MUST_USE_ATTRIBUTE,\n    'typeof': MUST_USE_ATTRIBUTE,\n    vocab: MUST_USE_ATTRIBUTE,\n\n    /**\n     * Non-standard Properties\n     */\n    // autoCapitalize and autoCorrect are supported in Mobile Safari for\n    // keyboard hints.\n    autoCapitalize: null,\n    autoCorrect: null,\n    // autoSave allows WebKit/Blink to persist values of input fields on page reloads\n    autoSave: null,\n    // color is for Safari mask-icon link\n    color: null,\n    // itemProp, itemScope, itemType are for\n    // Microdata support. See http://schema.org/docs/gs.html\n    itemProp: MUST_USE_ATTRIBUTE,\n    itemScope: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,\n    itemType: MUST_USE_ATTRIBUTE,\n    // itemID and itemRef are for Microdata support as well but\n    // only specified in the the WHATWG spec document. See\n    // https://html.spec.whatwg.org/multipage/microdata.html#microdata-dom-api\n    itemID: MUST_USE_ATTRIBUTE,\n    itemRef: MUST_USE_ATTRIBUTE,\n    // results show looking glass icon and recent searches on input\n    // search fields in WebKit/Blink\n    results: null,\n    // IE-only attribute that specifies security restrictions on an iframe\n    // as an alternative to the sandbox attribute on IE<10\n    security: MUST_USE_ATTRIBUTE,\n    // IE-only attribute that controls focus behavior\n    unselectable: MUST_USE_ATTRIBUTE\n  },\n  DOMAttributeNames: {\n    acceptCharset: 'accept-charset',\n    className: 'class',\n    htmlFor: 'for',\n    httpEquiv: 'http-equiv'\n  },\n  DOMPropertyNames: {\n    autoCapitalize: 'autocapitalize',\n    autoComplete: 'autocomplete',\n    autoCorrect: 'autocorrect',\n    autoFocus: 'autofocus',\n    autoPlay: 'autoplay',\n    autoSave: 'autosave',\n    // `encoding` is equivalent to `enctype`, IE8 lacks an `enctype` setter.\n    // http://www.w3.org/TR/html5/forms.html#dom-fs-encoding\n    encType: 'encoding',\n    hrefLang: 'hreflang',\n    radioGroup: 'radiogroup',\n    spellCheck: 'spellcheck',\n    srcDoc: 'srcdoc',\n    srcSet: 'srcset'\n  }\n};\n\nmodule.exports = HTMLDOMPropertyConfig;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/HTMLDOMPropertyConfig.js\n ** module id = 91\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactBrowserComponentMixin\n */\n\n'use strict';\n\nvar ReactInstanceMap = require('./ReactInstanceMap');\n\nvar findDOMNode = require('./findDOMNode');\nvar warning = require('fbjs/lib/warning');\n\nvar didWarnKey = '_getDOMNodeDidWarn';\n\nvar ReactBrowserComponentMixin = {\n  /**\n   * Returns the DOM node rendered by this component.\n   *\n   * @return {DOMElement} The root node of this component.\n   * @final\n   * @protected\n   */\n  getDOMNode: function () {\n    process.env.NODE_ENV !== 'production' ? warning(this.constructor[didWarnKey], '%s.getDOMNode(...) is deprecated. Please use ' + 'ReactDOM.findDOMNode(instance) instead.', ReactInstanceMap.get(this).getName() || this.tagName || 'Unknown') : undefined;\n    this.constructor[didWarnKey] = true;\n    return findDOMNode(this);\n  }\n};\n\nmodule.exports = ReactBrowserComponentMixin;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactBrowserComponentMixin.js\n ** module id = 92\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule findDOMNode\n * @typechecks static-only\n */\n\n'use strict';\n\nvar ReactCurrentOwner = require('./ReactCurrentOwner');\nvar ReactInstanceMap = require('./ReactInstanceMap');\nvar ReactMount = require('./ReactMount');\n\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\n/**\n * Returns the DOM node rendered by this element.\n *\n * @param {ReactComponent|DOMElement} componentOrElement\n * @return {?DOMElement} The root node of this element.\n */\nfunction findDOMNode(componentOrElement) {\n  if (process.env.NODE_ENV !== 'production') {\n    var owner = ReactCurrentOwner.current;\n    if (owner !== null) {\n      process.env.NODE_ENV !== 'production' ? warning(owner._warnedAboutRefsInRender, '%s is accessing getDOMNode or findDOMNode inside its render(). ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', owner.getName() || 'A component') : undefined;\n      owner._warnedAboutRefsInRender = true;\n    }\n  }\n  if (componentOrElement == null) {\n    return null;\n  }\n  if (componentOrElement.nodeType === 1) {\n    return componentOrElement;\n  }\n  if (ReactInstanceMap.has(componentOrElement)) {\n    return ReactMount.getNodeFromInstance(componentOrElement);\n  }\n  !(componentOrElement.render == null || typeof componentOrElement.render !== 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'findDOMNode was called on an unmounted component.') : invariant(false) : undefined;\n  !false ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Element appears to be neither ReactComponent nor DOMNode (keys: %s)', Object.keys(componentOrElement)) : invariant(false) : undefined;\n}\n\nmodule.exports = findDOMNode;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/findDOMNode.js\n ** module id = 93\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDefaultBatchingStrategy\n */\n\n'use strict';\n\nvar ReactUpdates = require('./ReactUpdates');\nvar Transaction = require('./Transaction');\n\nvar assign = require('./Object.assign');\nvar emptyFunction = require('fbjs/lib/emptyFunction');\n\nvar RESET_BATCHED_UPDATES = {\n  initialize: emptyFunction,\n  close: function () {\n    ReactDefaultBatchingStrategy.isBatchingUpdates = false;\n  }\n};\n\nvar FLUSH_BATCHED_UPDATES = {\n  initialize: emptyFunction,\n  close: ReactUpdates.flushBatchedUpdates.bind(ReactUpdates)\n};\n\nvar TRANSACTION_WRAPPERS = [FLUSH_BATCHED_UPDATES, RESET_BATCHED_UPDATES];\n\nfunction ReactDefaultBatchingStrategyTransaction() {\n  this.reinitializeTransaction();\n}\n\nassign(ReactDefaultBatchingStrategyTransaction.prototype, Transaction.Mixin, {\n  getTransactionWrappers: function () {\n    return TRANSACTION_WRAPPERS;\n  }\n});\n\nvar transaction = new ReactDefaultBatchingStrategyTransaction();\n\nvar ReactDefaultBatchingStrategy = {\n  isBatchingUpdates: false,\n\n  /**\n   * Call the provided function in a context within which calls to `setState`\n   * and friends are batched such that components aren't updated unnecessarily.\n   */\n  batchedUpdates: function (callback, a, b, c, d, e) {\n    var alreadyBatchingUpdates = ReactDefaultBatchingStrategy.isBatchingUpdates;\n\n    ReactDefaultBatchingStrategy.isBatchingUpdates = true;\n\n    // The code is written this way to avoid extra allocations\n    if (alreadyBatchingUpdates) {\n      callback(a, b, c, d, e);\n    } else {\n      transaction.perform(callback, null, a, b, c, d, e);\n    }\n  }\n};\n\nmodule.exports = ReactDefaultBatchingStrategy;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDefaultBatchingStrategy.js\n ** module id = 94\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMComponent\n * @typechecks static-only\n */\n\n/* global hasOwnProperty:true */\n\n'use strict';\n\nvar AutoFocusUtils = require('./AutoFocusUtils');\nvar CSSPropertyOperations = require('./CSSPropertyOperations');\nvar DOMProperty = require('./DOMProperty');\nvar DOMPropertyOperations = require('./DOMPropertyOperations');\nvar EventConstants = require('./EventConstants');\nvar ReactBrowserEventEmitter = require('./ReactBrowserEventEmitter');\nvar ReactComponentBrowserEnvironment = require('./ReactComponentBrowserEnvironment');\nvar ReactDOMButton = require('./ReactDOMButton');\nvar ReactDOMInput = require('./ReactDOMInput');\nvar ReactDOMOption = require('./ReactDOMOption');\nvar ReactDOMSelect = require('./ReactDOMSelect');\nvar ReactDOMTextarea = require('./ReactDOMTextarea');\nvar ReactMount = require('./ReactMount');\nvar ReactMultiChild = require('./ReactMultiChild');\nvar ReactPerf = require('./ReactPerf');\nvar ReactUpdateQueue = require('./ReactUpdateQueue');\n\nvar assign = require('./Object.assign');\nvar canDefineProperty = require('./canDefineProperty');\nvar escapeTextContentForBrowser = require('./escapeTextContentForBrowser');\nvar invariant = require('fbjs/lib/invariant');\nvar isEventSupported = require('./isEventSupported');\nvar keyOf = require('fbjs/lib/keyOf');\nvar setInnerHTML = require('./setInnerHTML');\nvar setTextContent = require('./setTextContent');\nvar shallowEqual = require('fbjs/lib/shallowEqual');\nvar validateDOMNesting = require('./validateDOMNesting');\nvar warning = require('fbjs/lib/warning');\n\nvar deleteListener = ReactBrowserEventEmitter.deleteListener;\nvar listenTo = ReactBrowserEventEmitter.listenTo;\nvar registrationNameModules = ReactBrowserEventEmitter.registrationNameModules;\n\n// For quickly matching children type, to test if can be treated as content.\nvar CONTENT_TYPES = { 'string': true, 'number': true };\n\nvar CHILDREN = keyOf({ children: null });\nvar STYLE = keyOf({ style: null });\nvar HTML = keyOf({ __html: null });\n\nvar ELEMENT_NODE_TYPE = 1;\n\nfunction getDeclarationErrorAddendum(internalInstance) {\n  if (internalInstance) {\n    var owner = internalInstance._currentElement._owner || null;\n    if (owner) {\n      var name = owner.getName();\n      if (name) {\n        return ' This DOM node was rendered by `' + name + '`.';\n      }\n    }\n  }\n  return '';\n}\n\nvar legacyPropsDescriptor;\nif (process.env.NODE_ENV !== 'production') {\n  legacyPropsDescriptor = {\n    props: {\n      enumerable: false,\n      get: function () {\n        var component = this._reactInternalComponent;\n        process.env.NODE_ENV !== 'production' ? warning(false, 'ReactDOMComponent: Do not access .props of a DOM node; instead, ' + 'recreate the props as `render` did originally or read the DOM ' + 'properties/attributes directly from this node (e.g., ' + 'this.refs.box.className).%s', getDeclarationErrorAddendum(component)) : undefined;\n        return component._currentElement.props;\n      }\n    }\n  };\n}\n\nfunction legacyGetDOMNode() {\n  if (process.env.NODE_ENV !== 'production') {\n    var component = this._reactInternalComponent;\n    process.env.NODE_ENV !== 'production' ? warning(false, 'ReactDOMComponent: Do not access .getDOMNode() of a DOM node; ' + 'instead, use the node directly.%s', getDeclarationErrorAddendum(component)) : undefined;\n  }\n  return this;\n}\n\nfunction legacyIsMounted() {\n  var component = this._reactInternalComponent;\n  if (process.env.NODE_ENV !== 'production') {\n    process.env.NODE_ENV !== 'production' ? warning(false, 'ReactDOMComponent: Do not access .isMounted() of a DOM node.%s', getDeclarationErrorAddendum(component)) : undefined;\n  }\n  return !!component;\n}\n\nfunction legacySetStateEtc() {\n  if (process.env.NODE_ENV !== 'production') {\n    var component = this._reactInternalComponent;\n    process.env.NODE_ENV !== 'production' ? warning(false, 'ReactDOMComponent: Do not access .setState(), .replaceState(), or ' + '.forceUpdate() of a DOM node. This is a no-op.%s', getDeclarationErrorAddendum(component)) : undefined;\n  }\n}\n\nfunction legacySetProps(partialProps, callback) {\n  var component = this._reactInternalComponent;\n  if (process.env.NODE_ENV !== 'production') {\n    process.env.NODE_ENV !== 'production' ? warning(false, 'ReactDOMComponent: Do not access .setProps() of a DOM node. ' + 'Instead, call ReactDOM.render again at the top level.%s', getDeclarationErrorAddendum(component)) : undefined;\n  }\n  if (!component) {\n    return;\n  }\n  ReactUpdateQueue.enqueueSetPropsInternal(component, partialProps);\n  if (callback) {\n    ReactUpdateQueue.enqueueCallbackInternal(component, callback);\n  }\n}\n\nfunction legacyReplaceProps(partialProps, callback) {\n  var component = this._reactInternalComponent;\n  if (process.env.NODE_ENV !== 'production') {\n    process.env.NODE_ENV !== 'production' ? warning(false, 'ReactDOMComponent: Do not access .replaceProps() of a DOM node. ' + 'Instead, call ReactDOM.render again at the top level.%s', getDeclarationErrorAddendum(component)) : undefined;\n  }\n  if (!component) {\n    return;\n  }\n  ReactUpdateQueue.enqueueReplacePropsInternal(component, partialProps);\n  if (callback) {\n    ReactUpdateQueue.enqueueCallbackInternal(component, callback);\n  }\n}\n\nfunction friendlyStringify(obj) {\n  if (typeof obj === 'object') {\n    if (Array.isArray(obj)) {\n      return '[' + obj.map(friendlyStringify).join(', ') + ']';\n    } else {\n      var pairs = [];\n      for (var key in obj) {\n        if (Object.prototype.hasOwnProperty.call(obj, key)) {\n          var keyEscaped = /^[a-z$_][\\w$_]*$/i.test(key) ? key : JSON.stringify(key);\n          pairs.push(keyEscaped + ': ' + friendlyStringify(obj[key]));\n        }\n      }\n      return '{' + pairs.join(', ') + '}';\n    }\n  } else if (typeof obj === 'string') {\n    return JSON.stringify(obj);\n  } else if (typeof obj === 'function') {\n    return '[function object]';\n  }\n  // Differs from JSON.stringify in that undefined becauses undefined and that\n  // inf and nan don't become null\n  return String(obj);\n}\n\nvar styleMutationWarning = {};\n\nfunction checkAndWarnForMutatedStyle(style1, style2, component) {\n  if (style1 == null || style2 == null) {\n    return;\n  }\n  if (shallowEqual(style1, style2)) {\n    return;\n  }\n\n  var componentName = component._tag;\n  var owner = component._currentElement._owner;\n  var ownerName;\n  if (owner) {\n    ownerName = owner.getName();\n  }\n\n  var hash = ownerName + '|' + componentName;\n\n  if (styleMutationWarning.hasOwnProperty(hash)) {\n    return;\n  }\n\n  styleMutationWarning[hash] = true;\n\n  process.env.NODE_ENV !== 'production' ? warning(false, '`%s` was passed a style object that has previously been mutated. ' + 'Mutating `style` is deprecated. Consider cloning it beforehand. Check ' + 'the `render` %s. Previous style: %s. Mutated style: %s.', componentName, owner ? 'of `' + ownerName + '`' : 'using <' + componentName + '>', friendlyStringify(style1), friendlyStringify(style2)) : undefined;\n}\n\n/**\n * @param {object} component\n * @param {?object} props\n */\nfunction assertValidProps(component, props) {\n  if (!props) {\n    return;\n  }\n  // Note the use of `==` which checks for null or undefined.\n  if (process.env.NODE_ENV !== 'production') {\n    if (voidElementTags[component._tag]) {\n      process.env.NODE_ENV !== 'production' ? warning(props.children == null && props.dangerouslySetInnerHTML == null, '%s is a void element tag and must not have `children` or ' + 'use `props.dangerouslySetInnerHTML`.%s', component._tag, component._currentElement._owner ? ' Check the render method of ' + component._currentElement._owner.getName() + '.' : '') : undefined;\n    }\n  }\n  if (props.dangerouslySetInnerHTML != null) {\n    !(props.children == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Can only set one of `children` or `props.dangerouslySetInnerHTML`.') : invariant(false) : undefined;\n    !(typeof props.dangerouslySetInnerHTML === 'object' && HTML in props.dangerouslySetInnerHTML) ? process.env.NODE_ENV !== 'production' ? invariant(false, '`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. ' + 'Please visit https://fb.me/react-invariant-dangerously-set-inner-html ' + 'for more information.') : invariant(false) : undefined;\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    process.env.NODE_ENV !== 'production' ? warning(props.innerHTML == null, 'Directly setting property `innerHTML` is not permitted. ' + 'For more information, lookup documentation on `dangerouslySetInnerHTML`.') : undefined;\n    process.env.NODE_ENV !== 'production' ? warning(!props.contentEditable || props.children == null, 'A component is `contentEditable` and contains `children` managed by ' + 'React. It is now your responsibility to guarantee that none of ' + 'those nodes are unexpectedly modified or duplicated. This is ' + 'probably not intentional.') : undefined;\n  }\n  !(props.style == null || typeof props.style === 'object') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'The `style` prop expects a mapping from style properties to values, ' + 'not a string. For example, style={{marginRight: spacing + \\'em\\'}} when ' + 'using JSX.%s', getDeclarationErrorAddendum(component)) : invariant(false) : undefined;\n}\n\nfunction enqueuePutListener(id, registrationName, listener, transaction) {\n  if (process.env.NODE_ENV !== 'production') {\n    // IE8 has no API for event capturing and the `onScroll` event doesn't\n    // bubble.\n    process.env.NODE_ENV !== 'production' ? warning(registrationName !== 'onScroll' || isEventSupported('scroll', true), 'This browser doesn\\'t support the `onScroll` event') : undefined;\n  }\n  var container = ReactMount.findReactContainerForID(id);\n  if (container) {\n    var doc = container.nodeType === ELEMENT_NODE_TYPE ? container.ownerDocument : container;\n    listenTo(registrationName, doc);\n  }\n  transaction.getReactMountReady().enqueue(putListener, {\n    id: id,\n    registrationName: registrationName,\n    listener: listener\n  });\n}\n\nfunction putListener() {\n  var listenerToPut = this;\n  ReactBrowserEventEmitter.putListener(listenerToPut.id, listenerToPut.registrationName, listenerToPut.listener);\n}\n\n// There are so many media events, it makes sense to just\n// maintain a list rather than create a `trapBubbledEvent` for each\nvar mediaEvents = {\n  topAbort: 'abort',\n  topCanPlay: 'canplay',\n  topCanPlayThrough: 'canplaythrough',\n  topDurationChange: 'durationchange',\n  topEmptied: 'emptied',\n  topEncrypted: 'encrypted',\n  topEnded: 'ended',\n  topError: 'error',\n  topLoadedData: 'loadeddata',\n  topLoadedMetadata: 'loadedmetadata',\n  topLoadStart: 'loadstart',\n  topPause: 'pause',\n  topPlay: 'play',\n  topPlaying: 'playing',\n  topProgress: 'progress',\n  topRateChange: 'ratechange',\n  topSeeked: 'seeked',\n  topSeeking: 'seeking',\n  topStalled: 'stalled',\n  topSuspend: 'suspend',\n  topTimeUpdate: 'timeupdate',\n  topVolumeChange: 'volumechange',\n  topWaiting: 'waiting'\n};\n\nfunction trapBubbledEventsLocal() {\n  var inst = this;\n  // If a component renders to null or if another component fatals and causes\n  // the state of the tree to be corrupted, `node` here can be null.\n  !inst._rootNodeID ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Must be mounted to trap events') : invariant(false) : undefined;\n  var node = ReactMount.getNode(inst._rootNodeID);\n  !node ? process.env.NODE_ENV !== 'production' ? invariant(false, 'trapBubbledEvent(...): Requires node to be rendered.') : invariant(false) : undefined;\n\n  switch (inst._tag) {\n    case 'iframe':\n      inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topLoad, 'load', node)];\n      break;\n    case 'video':\n    case 'audio':\n\n      inst._wrapperState.listeners = [];\n      // create listener for each media event\n      for (var event in mediaEvents) {\n        if (mediaEvents.hasOwnProperty(event)) {\n          inst._wrapperState.listeners.push(ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes[event], mediaEvents[event], node));\n        }\n      }\n\n      break;\n    case 'img':\n      inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topError, 'error', node), ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topLoad, 'load', node)];\n      break;\n    case 'form':\n      inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topReset, 'reset', node), ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topSubmit, 'submit', node)];\n      break;\n  }\n}\n\nfunction mountReadyInputWrapper() {\n  ReactDOMInput.mountReadyWrapper(this);\n}\n\nfunction postUpdateSelectWrapper() {\n  ReactDOMSelect.postUpdateWrapper(this);\n}\n\n// For HTML, certain tags should omit their close tag. We keep a whitelist for\n// those special cased tags.\n\nvar omittedCloseTags = {\n  'area': true,\n  'base': true,\n  'br': true,\n  'col': true,\n  'embed': true,\n  'hr': true,\n  'img': true,\n  'input': true,\n  'keygen': true,\n  'link': true,\n  'meta': true,\n  'param': true,\n  'source': true,\n  'track': true,\n  'wbr': true\n};\n\n// NOTE: menuitem's close tag should be omitted, but that causes problems.\nvar newlineEatingTags = {\n  'listing': true,\n  'pre': true,\n  'textarea': true\n};\n\n// For HTML, certain tags cannot have children. This has the same purpose as\n// `omittedCloseTags` except that `menuitem` should still have its closing tag.\n\nvar voidElementTags = assign({\n  'menuitem': true\n}, omittedCloseTags);\n\n// We accept any tag to be rendered but since this gets injected into arbitrary\n// HTML, we want to make sure that it's a safe tag.\n// http://www.w3.org/TR/REC-xml/#NT-Name\n\nvar VALID_TAG_REGEX = /^[a-zA-Z][a-zA-Z:_\\.\\-\\d]*$/; // Simplified subset\nvar validatedTagCache = {};\nvar hasOwnProperty = ({}).hasOwnProperty;\n\nfunction validateDangerousTag(tag) {\n  if (!hasOwnProperty.call(validatedTagCache, tag)) {\n    !VALID_TAG_REGEX.test(tag) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Invalid tag: %s', tag) : invariant(false) : undefined;\n    validatedTagCache[tag] = true;\n  }\n}\n\nfunction processChildContextDev(context, inst) {\n  // Pass down our tag name to child components for validation purposes\n  context = assign({}, context);\n  var info = context[validateDOMNesting.ancestorInfoContextKey];\n  context[validateDOMNesting.ancestorInfoContextKey] = validateDOMNesting.updatedAncestorInfo(info, inst._tag, inst);\n  return context;\n}\n\nfunction isCustomComponent(tagName, props) {\n  return tagName.indexOf('-') >= 0 || props.is != null;\n}\n\n/**\n * Creates a new React class that is idempotent and capable of containing other\n * React components. It accepts event listeners and DOM properties that are\n * valid according to `DOMProperty`.\n *\n *  - Event listeners: `onClick`, `onMouseDown`, etc.\n *  - DOM properties: `className`, `name`, `title`, etc.\n *\n * The `style` property functions differently from the DOM API. It accepts an\n * object mapping of style properties to values.\n *\n * @constructor ReactDOMComponent\n * @extends ReactMultiChild\n */\nfunction ReactDOMComponent(tag) {\n  validateDangerousTag(tag);\n  this._tag = tag.toLowerCase();\n  this._renderedChildren = null;\n  this._previousStyle = null;\n  this._previousStyleCopy = null;\n  this._rootNodeID = null;\n  this._wrapperState = null;\n  this._topLevelWrapper = null;\n  this._nodeWithLegacyProperties = null;\n  if (process.env.NODE_ENV !== 'production') {\n    this._unprocessedContextDev = null;\n    this._processedContextDev = null;\n  }\n}\n\nReactDOMComponent.displayName = 'ReactDOMComponent';\n\nReactDOMComponent.Mixin = {\n\n  construct: function (element) {\n    this._currentElement = element;\n  },\n\n  /**\n   * Generates root tag markup then recurses. This method has side effects and\n   * is not idempotent.\n   *\n   * @internal\n   * @param {string} rootID The root DOM ID for this node.\n   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\n   * @param {object} context\n   * @return {string} The computed markup.\n   */\n  mountComponent: function (rootID, transaction, context) {\n    this._rootNodeID = rootID;\n\n    var props = this._currentElement.props;\n\n    switch (this._tag) {\n      case 'iframe':\n      case 'img':\n      case 'form':\n      case 'video':\n      case 'audio':\n        this._wrapperState = {\n          listeners: null\n        };\n        transaction.getReactMountReady().enqueue(trapBubbledEventsLocal, this);\n        break;\n      case 'button':\n        props = ReactDOMButton.getNativeProps(this, props, context);\n        break;\n      case 'input':\n        ReactDOMInput.mountWrapper(this, props, context);\n        props = ReactDOMInput.getNativeProps(this, props, context);\n        break;\n      case 'option':\n        ReactDOMOption.mountWrapper(this, props, context);\n        props = ReactDOMOption.getNativeProps(this, props, context);\n        break;\n      case 'select':\n        ReactDOMSelect.mountWrapper(this, props, context);\n        props = ReactDOMSelect.getNativeProps(this, props, context);\n        context = ReactDOMSelect.processChildContext(this, props, context);\n        break;\n      case 'textarea':\n        ReactDOMTextarea.mountWrapper(this, props, context);\n        props = ReactDOMTextarea.getNativeProps(this, props, context);\n        break;\n    }\n\n    assertValidProps(this, props);\n    if (process.env.NODE_ENV !== 'production') {\n      if (context[validateDOMNesting.ancestorInfoContextKey]) {\n        validateDOMNesting(this._tag, this, context[validateDOMNesting.ancestorInfoContextKey]);\n      }\n    }\n\n    if (process.env.NODE_ENV !== 'production') {\n      this._unprocessedContextDev = context;\n      this._processedContextDev = processChildContextDev(context, this);\n      context = this._processedContextDev;\n    }\n\n    var mountImage;\n    if (transaction.useCreateElement) {\n      var ownerDocument = context[ReactMount.ownerDocumentContextKey];\n      var el = ownerDocument.createElement(this._currentElement.type);\n      DOMPropertyOperations.setAttributeForID(el, this._rootNodeID);\n      // Populate node cache\n      ReactMount.getID(el);\n      this._updateDOMProperties({}, props, transaction, el);\n      this._createInitialChildren(transaction, props, context, el);\n      mountImage = el;\n    } else {\n      var tagOpen = this._createOpenTagMarkupAndPutListeners(transaction, props);\n      var tagContent = this._createContentMarkup(transaction, props, context);\n      if (!tagContent && omittedCloseTags[this._tag]) {\n        mountImage = tagOpen + '/>';\n      } else {\n        mountImage = tagOpen + '>' + tagContent + '</' + this._currentElement.type + '>';\n      }\n    }\n\n    switch (this._tag) {\n      case 'input':\n        transaction.getReactMountReady().enqueue(mountReadyInputWrapper, this);\n      // falls through\n      case 'button':\n      case 'select':\n      case 'textarea':\n        if (props.autoFocus) {\n          transaction.getReactMountReady().enqueue(AutoFocusUtils.focusDOMComponent, this);\n        }\n        break;\n    }\n\n    return mountImage;\n  },\n\n  /**\n   * Creates markup for the open tag and all attributes.\n   *\n   * This method has side effects because events get registered.\n   *\n   * Iterating over object properties is faster than iterating over arrays.\n   * @see http://jsperf.com/obj-vs-arr-iteration\n   *\n   * @private\n   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\n   * @param {object} props\n   * @return {string} Markup of opening tag.\n   */\n  _createOpenTagMarkupAndPutListeners: function (transaction, props) {\n    var ret = '<' + this._currentElement.type;\n\n    for (var propKey in props) {\n      if (!props.hasOwnProperty(propKey)) {\n        continue;\n      }\n      var propValue = props[propKey];\n      if (propValue == null) {\n        continue;\n      }\n      if (registrationNameModules.hasOwnProperty(propKey)) {\n        if (propValue) {\n          enqueuePutListener(this._rootNodeID, propKey, propValue, transaction);\n        }\n      } else {\n        if (propKey === STYLE) {\n          if (propValue) {\n            if (process.env.NODE_ENV !== 'production') {\n              // See `_updateDOMProperties`. style block\n              this._previousStyle = propValue;\n            }\n            propValue = this._previousStyleCopy = assign({}, props.style);\n          }\n          propValue = CSSPropertyOperations.createMarkupForStyles(propValue);\n        }\n        var markup = null;\n        if (this._tag != null && isCustomComponent(this._tag, props)) {\n          if (propKey !== CHILDREN) {\n            markup = DOMPropertyOperations.createMarkupForCustomAttribute(propKey, propValue);\n          }\n        } else {\n          markup = DOMPropertyOperations.createMarkupForProperty(propKey, propValue);\n        }\n        if (markup) {\n          ret += ' ' + markup;\n        }\n      }\n    }\n\n    // For static pages, no need to put React ID and checksum. Saves lots of\n    // bytes.\n    if (transaction.renderToStaticMarkup) {\n      return ret;\n    }\n\n    var markupForID = DOMPropertyOperations.createMarkupForID(this._rootNodeID);\n    return ret + ' ' + markupForID;\n  },\n\n  /**\n   * Creates markup for the content between the tags.\n   *\n   * @private\n   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\n   * @param {object} props\n   * @param {object} context\n   * @return {string} Content markup.\n   */\n  _createContentMarkup: function (transaction, props, context) {\n    var ret = '';\n\n    // Intentional use of != to avoid catching zero/false.\n    var innerHTML = props.dangerouslySetInnerHTML;\n    if (innerHTML != null) {\n      if (innerHTML.__html != null) {\n        ret = innerHTML.__html;\n      }\n    } else {\n      var contentToUse = CONTENT_TYPES[typeof props.children] ? props.children : null;\n      var childrenToUse = contentToUse != null ? null : props.children;\n      if (contentToUse != null) {\n        // TODO: Validate that text is allowed as a child of this node\n        ret = escapeTextContentForBrowser(contentToUse);\n      } else if (childrenToUse != null) {\n        var mountImages = this.mountChildren(childrenToUse, transaction, context);\n        ret = mountImages.join('');\n      }\n    }\n    if (newlineEatingTags[this._tag] && ret.charAt(0) === '\\n') {\n      // text/html ignores the first character in these tags if it's a newline\n      // Prefer to break application/xml over text/html (for now) by adding\n      // a newline specifically to get eaten by the parser. (Alternately for\n      // textareas, replacing \"^\\n\" with \"\\r\\n\" doesn't get eaten, and the first\n      // \\r is normalized out by HTMLTextAreaElement#value.)\n      // See: <http://www.w3.org/TR/html-polyglot/#newlines-in-textarea-and-pre>\n      // See: <http://www.w3.org/TR/html5/syntax.html#element-restrictions>\n      // See: <http://www.w3.org/TR/html5/syntax.html#newlines>\n      // See: Parsing of \"textarea\" \"listing\" and \"pre\" elements\n      //  from <http://www.w3.org/TR/html5/syntax.html#parsing-main-inbody>\n      return '\\n' + ret;\n    } else {\n      return ret;\n    }\n  },\n\n  _createInitialChildren: function (transaction, props, context, el) {\n    // Intentional use of != to avoid catching zero/false.\n    var innerHTML = props.dangerouslySetInnerHTML;\n    if (innerHTML != null) {\n      if (innerHTML.__html != null) {\n        setInnerHTML(el, innerHTML.__html);\n      }\n    } else {\n      var contentToUse = CONTENT_TYPES[typeof props.children] ? props.children : null;\n      var childrenToUse = contentToUse != null ? null : props.children;\n      if (contentToUse != null) {\n        // TODO: Validate that text is allowed as a child of this node\n        setTextContent(el, contentToUse);\n      } else if (childrenToUse != null) {\n        var mountImages = this.mountChildren(childrenToUse, transaction, context);\n        for (var i = 0; i < mountImages.length; i++) {\n          el.appendChild(mountImages[i]);\n        }\n      }\n    }\n  },\n\n  /**\n   * Receives a next element and updates the component.\n   *\n   * @internal\n   * @param {ReactElement} nextElement\n   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\n   * @param {object} context\n   */\n  receiveComponent: function (nextElement, transaction, context) {\n    var prevElement = this._currentElement;\n    this._currentElement = nextElement;\n    this.updateComponent(transaction, prevElement, nextElement, context);\n  },\n\n  /**\n   * Updates a native DOM component after it has already been allocated and\n   * attached to the DOM. Reconciles the root DOM node, then recurses.\n   *\n   * @param {ReactReconcileTransaction} transaction\n   * @param {ReactElement} prevElement\n   * @param {ReactElement} nextElement\n   * @internal\n   * @overridable\n   */\n  updateComponent: function (transaction, prevElement, nextElement, context) {\n    var lastProps = prevElement.props;\n    var nextProps = this._currentElement.props;\n\n    switch (this._tag) {\n      case 'button':\n        lastProps = ReactDOMButton.getNativeProps(this, lastProps);\n        nextProps = ReactDOMButton.getNativeProps(this, nextProps);\n        break;\n      case 'input':\n        ReactDOMInput.updateWrapper(this);\n        lastProps = ReactDOMInput.getNativeProps(this, lastProps);\n        nextProps = ReactDOMInput.getNativeProps(this, nextProps);\n        break;\n      case 'option':\n        lastProps = ReactDOMOption.getNativeProps(this, lastProps);\n        nextProps = ReactDOMOption.getNativeProps(this, nextProps);\n        break;\n      case 'select':\n        lastProps = ReactDOMSelect.getNativeProps(this, lastProps);\n        nextProps = ReactDOMSelect.getNativeProps(this, nextProps);\n        break;\n      case 'textarea':\n        ReactDOMTextarea.updateWrapper(this);\n        lastProps = ReactDOMTextarea.getNativeProps(this, lastProps);\n        nextProps = ReactDOMTextarea.getNativeProps(this, nextProps);\n        break;\n    }\n\n    if (process.env.NODE_ENV !== 'production') {\n      // If the context is reference-equal to the old one, pass down the same\n      // processed object so the update bailout in ReactReconciler behaves\n      // correctly (and identically in dev and prod). See #5005.\n      if (this._unprocessedContextDev !== context) {\n        this._unprocessedContextDev = context;\n        this._processedContextDev = processChildContextDev(context, this);\n      }\n      context = this._processedContextDev;\n    }\n\n    assertValidProps(this, nextProps);\n    this._updateDOMProperties(lastProps, nextProps, transaction, null);\n    this._updateDOMChildren(lastProps, nextProps, transaction, context);\n\n    if (!canDefineProperty && this._nodeWithLegacyProperties) {\n      this._nodeWithLegacyProperties.props = nextProps;\n    }\n\n    if (this._tag === 'select') {\n      // <select> value update needs to occur after <option> children\n      // reconciliation\n      transaction.getReactMountReady().enqueue(postUpdateSelectWrapper, this);\n    }\n  },\n\n  /**\n   * Reconciles the properties by detecting differences in property values and\n   * updating the DOM as necessary. This function is probably the single most\n   * critical path for performance optimization.\n   *\n   * TODO: Benchmark whether checking for changed values in memory actually\n   *       improves performance (especially statically positioned elements).\n   * TODO: Benchmark the effects of putting this at the top since 99% of props\n   *       do not change for a given reconciliation.\n   * TODO: Benchmark areas that can be improved with caching.\n   *\n   * @private\n   * @param {object} lastProps\n   * @param {object} nextProps\n   * @param {ReactReconcileTransaction} transaction\n   * @param {?DOMElement} node\n   */\n  _updateDOMProperties: function (lastProps, nextProps, transaction, node) {\n    var propKey;\n    var styleName;\n    var styleUpdates;\n    for (propKey in lastProps) {\n      if (nextProps.hasOwnProperty(propKey) || !lastProps.hasOwnProperty(propKey)) {\n        continue;\n      }\n      if (propKey === STYLE) {\n        var lastStyle = this._previousStyleCopy;\n        for (styleName in lastStyle) {\n          if (lastStyle.hasOwnProperty(styleName)) {\n            styleUpdates = styleUpdates || {};\n            styleUpdates[styleName] = '';\n          }\n        }\n        this._previousStyleCopy = null;\n      } else if (registrationNameModules.hasOwnProperty(propKey)) {\n        if (lastProps[propKey]) {\n          // Only call deleteListener if there was a listener previously or\n          // else willDeleteListener gets called when there wasn't actually a\n          // listener (e.g., onClick={null})\n          deleteListener(this._rootNodeID, propKey);\n        }\n      } else if (DOMProperty.properties[propKey] || DOMProperty.isCustomAttribute(propKey)) {\n        if (!node) {\n          node = ReactMount.getNode(this._rootNodeID);\n        }\n        DOMPropertyOperations.deleteValueForProperty(node, propKey);\n      }\n    }\n    for (propKey in nextProps) {\n      var nextProp = nextProps[propKey];\n      var lastProp = propKey === STYLE ? this._previousStyleCopy : lastProps[propKey];\n      if (!nextProps.hasOwnProperty(propKey) || nextProp === lastProp) {\n        continue;\n      }\n      if (propKey === STYLE) {\n        if (nextProp) {\n          if (process.env.NODE_ENV !== 'production') {\n            checkAndWarnForMutatedStyle(this._previousStyleCopy, this._previousStyle, this);\n            this._previousStyle = nextProp;\n          }\n          nextProp = this._previousStyleCopy = assign({}, nextProp);\n        } else {\n          this._previousStyleCopy = null;\n        }\n        if (lastProp) {\n          // Unset styles on `lastProp` but not on `nextProp`.\n          for (styleName in lastProp) {\n            if (lastProp.hasOwnProperty(styleName) && (!nextProp || !nextProp.hasOwnProperty(styleName))) {\n              styleUpdates = styleUpdates || {};\n              styleUpdates[styleName] = '';\n            }\n          }\n          // Update styles that changed since `lastProp`.\n          for (styleName in nextProp) {\n            if (nextProp.hasOwnProperty(styleName) && lastProp[styleName] !== nextProp[styleName]) {\n              styleUpdates = styleUpdates || {};\n              styleUpdates[styleName] = nextProp[styleName];\n            }\n          }\n        } else {\n          // Relies on `updateStylesByID` not mutating `styleUpdates`.\n          styleUpdates = nextProp;\n        }\n      } else if (registrationNameModules.hasOwnProperty(propKey)) {\n        if (nextProp) {\n          enqueuePutListener(this._rootNodeID, propKey, nextProp, transaction);\n        } else if (lastProp) {\n          deleteListener(this._rootNodeID, propKey);\n        }\n      } else if (isCustomComponent(this._tag, nextProps)) {\n        if (!node) {\n          node = ReactMount.getNode(this._rootNodeID);\n        }\n        if (propKey === CHILDREN) {\n          nextProp = null;\n        }\n        DOMPropertyOperations.setValueForAttribute(node, propKey, nextProp);\n      } else if (DOMProperty.properties[propKey] || DOMProperty.isCustomAttribute(propKey)) {\n        if (!node) {\n          node = ReactMount.getNode(this._rootNodeID);\n        }\n        // If we're updating to null or undefined, we should remove the property\n        // from the DOM node instead of inadvertantly setting to a string. This\n        // brings us in line with the same behavior we have on initial render.\n        if (nextProp != null) {\n          DOMPropertyOperations.setValueForProperty(node, propKey, nextProp);\n        } else {\n          DOMPropertyOperations.deleteValueForProperty(node, propKey);\n        }\n      }\n    }\n    if (styleUpdates) {\n      if (!node) {\n        node = ReactMount.getNode(this._rootNodeID);\n      }\n      CSSPropertyOperations.setValueForStyles(node, styleUpdates);\n    }\n  },\n\n  /**\n   * Reconciles the children with the various properties that affect the\n   * children content.\n   *\n   * @param {object} lastProps\n   * @param {object} nextProps\n   * @param {ReactReconcileTransaction} transaction\n   * @param {object} context\n   */\n  _updateDOMChildren: function (lastProps, nextProps, transaction, context) {\n    var lastContent = CONTENT_TYPES[typeof lastProps.children] ? lastProps.children : null;\n    var nextContent = CONTENT_TYPES[typeof nextProps.children] ? nextProps.children : null;\n\n    var lastHtml = lastProps.dangerouslySetInnerHTML && lastProps.dangerouslySetInnerHTML.__html;\n    var nextHtml = nextProps.dangerouslySetInnerHTML && nextProps.dangerouslySetInnerHTML.__html;\n\n    // Note the use of `!=` which checks for null or undefined.\n    var lastChildren = lastContent != null ? null : lastProps.children;\n    var nextChildren = nextContent != null ? null : nextProps.children;\n\n    // If we're switching from children to content/html or vice versa, remove\n    // the old content\n    var lastHasContentOrHtml = lastContent != null || lastHtml != null;\n    var nextHasContentOrHtml = nextContent != null || nextHtml != null;\n    if (lastChildren != null && nextChildren == null) {\n      this.updateChildren(null, transaction, context);\n    } else if (lastHasContentOrHtml && !nextHasContentOrHtml) {\n      this.updateTextContent('');\n    }\n\n    if (nextContent != null) {\n      if (lastContent !== nextContent) {\n        this.updateTextContent('' + nextContent);\n      }\n    } else if (nextHtml != null) {\n      if (lastHtml !== nextHtml) {\n        this.updateMarkup('' + nextHtml);\n      }\n    } else if (nextChildren != null) {\n      this.updateChildren(nextChildren, transaction, context);\n    }\n  },\n\n  /**\n   * Destroys all event registrations for this instance. Does not remove from\n   * the DOM. That must be done by the parent.\n   *\n   * @internal\n   */\n  unmountComponent: function () {\n    switch (this._tag) {\n      case 'iframe':\n      case 'img':\n      case 'form':\n      case 'video':\n      case 'audio':\n        var listeners = this._wrapperState.listeners;\n        if (listeners) {\n          for (var i = 0; i < listeners.length; i++) {\n            listeners[i].remove();\n          }\n        }\n        break;\n      case 'input':\n        ReactDOMInput.unmountWrapper(this);\n        break;\n      case 'html':\n      case 'head':\n      case 'body':\n        /**\n         * Components like <html> <head> and <body> can't be removed or added\n         * easily in a cross-browser way, however it's valuable to be able to\n         * take advantage of React's reconciliation for styling and <title>\n         * management. So we just document it and throw in dangerous cases.\n         */\n        !false ? process.env.NODE_ENV !== 'production' ? invariant(false, '<%s> tried to unmount. Because of cross-browser quirks it is ' + 'impossible to unmount some top-level components (eg <html>, ' + '<head>, and <body>) reliably and efficiently. To fix this, have a ' + 'single top-level component that never unmounts render these ' + 'elements.', this._tag) : invariant(false) : undefined;\n        break;\n    }\n\n    this.unmountChildren();\n    ReactBrowserEventEmitter.deleteAllListeners(this._rootNodeID);\n    ReactComponentBrowserEnvironment.unmountIDFromEnvironment(this._rootNodeID);\n    this._rootNodeID = null;\n    this._wrapperState = null;\n    if (this._nodeWithLegacyProperties) {\n      var node = this._nodeWithLegacyProperties;\n      node._reactInternalComponent = null;\n      this._nodeWithLegacyProperties = null;\n    }\n  },\n\n  getPublicInstance: function () {\n    if (!this._nodeWithLegacyProperties) {\n      var node = ReactMount.getNode(this._rootNodeID);\n\n      node._reactInternalComponent = this;\n      node.getDOMNode = legacyGetDOMNode;\n      node.isMounted = legacyIsMounted;\n      node.setState = legacySetStateEtc;\n      node.replaceState = legacySetStateEtc;\n      node.forceUpdate = legacySetStateEtc;\n      node.setProps = legacySetProps;\n      node.replaceProps = legacyReplaceProps;\n\n      if (process.env.NODE_ENV !== 'production') {\n        if (canDefineProperty) {\n          Object.defineProperties(node, legacyPropsDescriptor);\n        } else {\n          // updateComponent will update this property on subsequent renders\n          node.props = this._currentElement.props;\n        }\n      } else {\n        // updateComponent will update this property on subsequent renders\n        node.props = this._currentElement.props;\n      }\n\n      this._nodeWithLegacyProperties = node;\n    }\n    return this._nodeWithLegacyProperties;\n  }\n\n};\n\nReactPerf.measureMethods(ReactDOMComponent, 'ReactDOMComponent', {\n  mountComponent: 'mountComponent',\n  updateComponent: 'updateComponent'\n});\n\nassign(ReactDOMComponent.prototype, ReactDOMComponent.Mixin, ReactMultiChild.Mixin);\n\nmodule.exports = ReactDOMComponent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMComponent.js\n ** module id = 95\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule AutoFocusUtils\n * @typechecks static-only\n */\n\n'use strict';\n\nvar ReactMount = require('./ReactMount');\n\nvar findDOMNode = require('./findDOMNode');\nvar focusNode = require('fbjs/lib/focusNode');\n\nvar Mixin = {\n  componentDidMount: function () {\n    if (this.props.autoFocus) {\n      focusNode(findDOMNode(this));\n    }\n  }\n};\n\nvar AutoFocusUtils = {\n  Mixin: Mixin,\n\n  focusDOMComponent: function () {\n    focusNode(ReactMount.getNode(this._rootNodeID));\n  }\n};\n\nmodule.exports = AutoFocusUtils;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/AutoFocusUtils.js\n ** module id = 96\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule focusNode\n */\n\n'use strict';\n\n/**\n * @param {DOMElement} node input/textarea to focus\n */\nfunction focusNode(node) {\n  // IE8 can throw \"Can't move focus to the control because it is invisible,\n  // not enabled, or of a type that does not accept the focus.\" for all kinds of\n  // reasons that are too expensive and fragile to test.\n  try {\n    node.focus();\n  } catch (e) {}\n}\n\nmodule.exports = focusNode;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/fbjs/lib/focusNode.js\n ** module id = 97\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule CSSPropertyOperations\n * @typechecks static-only\n */\n\n'use strict';\n\nvar CSSProperty = require('./CSSProperty');\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\nvar ReactPerf = require('./ReactPerf');\n\nvar camelizeStyleName = require('fbjs/lib/camelizeStyleName');\nvar dangerousStyleValue = require('./dangerousStyleValue');\nvar hyphenateStyleName = require('fbjs/lib/hyphenateStyleName');\nvar memoizeStringOnly = require('fbjs/lib/memoizeStringOnly');\nvar warning = require('fbjs/lib/warning');\n\nvar processStyleName = memoizeStringOnly(function (styleName) {\n  return hyphenateStyleName(styleName);\n});\n\nvar hasShorthandPropertyBug = false;\nvar styleFloatAccessor = 'cssFloat';\nif (ExecutionEnvironment.canUseDOM) {\n  var tempStyle = document.createElement('div').style;\n  try {\n    // IE8 throws \"Invalid argument.\" if resetting shorthand style properties.\n    tempStyle.font = '';\n  } catch (e) {\n    hasShorthandPropertyBug = true;\n  }\n  // IE8 only supports accessing cssFloat (standard) as styleFloat\n  if (document.documentElement.style.cssFloat === undefined) {\n    styleFloatAccessor = 'styleFloat';\n  }\n}\n\nif (process.env.NODE_ENV !== 'production') {\n  // 'msTransform' is correct, but the other prefixes should be capitalized\n  var badVendoredStyleNamePattern = /^(?:webkit|moz|o)[A-Z]/;\n\n  // style values shouldn't contain a semicolon\n  var badStyleValueWithSemicolonPattern = /;\\s*$/;\n\n  var warnedStyleNames = {};\n  var warnedStyleValues = {};\n\n  var warnHyphenatedStyleName = function (name) {\n    if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {\n      return;\n    }\n\n    warnedStyleNames[name] = true;\n    process.env.NODE_ENV !== 'production' ? warning(false, 'Unsupported style property %s. Did you mean %s?', name, camelizeStyleName(name)) : undefined;\n  };\n\n  var warnBadVendoredStyleName = function (name) {\n    if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {\n      return;\n    }\n\n    warnedStyleNames[name] = true;\n    process.env.NODE_ENV !== 'production' ? warning(false, 'Unsupported vendor-prefixed style property %s. Did you mean %s?', name, name.charAt(0).toUpperCase() + name.slice(1)) : undefined;\n  };\n\n  var warnStyleValueWithSemicolon = function (name, value) {\n    if (warnedStyleValues.hasOwnProperty(value) && warnedStyleValues[value]) {\n      return;\n    }\n\n    warnedStyleValues[value] = true;\n    process.env.NODE_ENV !== 'production' ? warning(false, 'Style property values shouldn\\'t contain a semicolon. ' + 'Try \"%s: %s\" instead.', name, value.replace(badStyleValueWithSemicolonPattern, '')) : undefined;\n  };\n\n  /**\n   * @param {string} name\n   * @param {*} value\n   */\n  var warnValidStyle = function (name, value) {\n    if (name.indexOf('-') > -1) {\n      warnHyphenatedStyleName(name);\n    } else if (badVendoredStyleNamePattern.test(name)) {\n      warnBadVendoredStyleName(name);\n    } else if (badStyleValueWithSemicolonPattern.test(value)) {\n      warnStyleValueWithSemicolon(name, value);\n    }\n  };\n}\n\n/**\n * Operations for dealing with CSS properties.\n */\nvar CSSPropertyOperations = {\n\n  /**\n   * Serializes a mapping of style properties for use as inline styles:\n   *\n   *   > createMarkupForStyles({width: '200px', height: 0})\n   *   \"width:200px;height:0;\"\n   *\n   * Undefined values are ignored so that declarative programming is easier.\n   * The result should be HTML-escaped before insertion into the DOM.\n   *\n   * @param {object} styles\n   * @return {?string}\n   */\n  createMarkupForStyles: function (styles) {\n    var serialized = '';\n    for (var styleName in styles) {\n      if (!styles.hasOwnProperty(styleName)) {\n        continue;\n      }\n      var styleValue = styles[styleName];\n      if (process.env.NODE_ENV !== 'production') {\n        warnValidStyle(styleName, styleValue);\n      }\n      if (styleValue != null) {\n        serialized += processStyleName(styleName) + ':';\n        serialized += dangerousStyleValue(styleName, styleValue) + ';';\n      }\n    }\n    return serialized || null;\n  },\n\n  /**\n   * Sets the value for multiple styles on a node.  If a value is specified as\n   * '' (empty string), the corresponding style property will be unset.\n   *\n   * @param {DOMElement} node\n   * @param {object} styles\n   */\n  setValueForStyles: function (node, styles) {\n    var style = node.style;\n    for (var styleName in styles) {\n      if (!styles.hasOwnProperty(styleName)) {\n        continue;\n      }\n      if (process.env.NODE_ENV !== 'production') {\n        warnValidStyle(styleName, styles[styleName]);\n      }\n      var styleValue = dangerousStyleValue(styleName, styles[styleName]);\n      if (styleName === 'float') {\n        styleName = styleFloatAccessor;\n      }\n      if (styleValue) {\n        style[styleName] = styleValue;\n      } else {\n        var expansion = hasShorthandPropertyBug && CSSProperty.shorthandPropertyExpansions[styleName];\n        if (expansion) {\n          // Shorthand property that IE8 won't like unsetting, so unset each\n          // component to placate it\n          for (var individualStyleName in expansion) {\n            style[individualStyleName] = '';\n          }\n        } else {\n          style[styleName] = '';\n        }\n      }\n    }\n  }\n\n};\n\nReactPerf.measureMethods(CSSPropertyOperations, 'CSSPropertyOperations', {\n  setValueForStyles: 'setValueForStyles'\n});\n\nmodule.exports = CSSPropertyOperations;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/CSSPropertyOperations.js\n ** module id = 98\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule CSSProperty\n */\n\n'use strict';\n\n/**\n * CSS properties which accept numbers but are not in units of \"px\".\n */\nvar isUnitlessNumber = {\n  animationIterationCount: true,\n  boxFlex: true,\n  boxFlexGroup: true,\n  boxOrdinalGroup: true,\n  columnCount: true,\n  flex: true,\n  flexGrow: true,\n  flexPositive: true,\n  flexShrink: true,\n  flexNegative: true,\n  flexOrder: true,\n  fontWeight: true,\n  lineClamp: true,\n  lineHeight: true,\n  opacity: true,\n  order: true,\n  orphans: true,\n  tabSize: true,\n  widows: true,\n  zIndex: true,\n  zoom: true,\n\n  // SVG-related properties\n  fillOpacity: true,\n  stopOpacity: true,\n  strokeDashoffset: true,\n  strokeOpacity: true,\n  strokeWidth: true\n};\n\n/**\n * @param {string} prefix vendor-specific prefix, eg: Webkit\n * @param {string} key style name, eg: transitionDuration\n * @return {string} style name prefixed with `prefix`, properly camelCased, eg:\n * WebkitTransitionDuration\n */\nfunction prefixKey(prefix, key) {\n  return prefix + key.charAt(0).toUpperCase() + key.substring(1);\n}\n\n/**\n * Support style names that may come passed in prefixed by adding permutations\n * of vendor prefixes.\n */\nvar prefixes = ['Webkit', 'ms', 'Moz', 'O'];\n\n// Using Object.keys here, or else the vanilla for-in loop makes IE8 go into an\n// infinite loop, because it iterates over the newly added props too.\nObject.keys(isUnitlessNumber).forEach(function (prop) {\n  prefixes.forEach(function (prefix) {\n    isUnitlessNumber[prefixKey(prefix, prop)] = isUnitlessNumber[prop];\n  });\n});\n\n/**\n * Most style properties can be unset by doing .style[prop] = '' but IE8\n * doesn't like doing that with shorthand properties so for the properties that\n * IE8 breaks on, which are listed here, we instead unset each of the\n * individual properties. See http://bugs.jquery.com/ticket/12385.\n * The 4-value 'clock' properties like margin, padding, border-width seem to\n * behave without any problems. Curiously, list-style works too without any\n * special prodding.\n */\nvar shorthandPropertyExpansions = {\n  background: {\n    backgroundAttachment: true,\n    backgroundColor: true,\n    backgroundImage: true,\n    backgroundPositionX: true,\n    backgroundPositionY: true,\n    backgroundRepeat: true\n  },\n  backgroundPosition: {\n    backgroundPositionX: true,\n    backgroundPositionY: true\n  },\n  border: {\n    borderWidth: true,\n    borderStyle: true,\n    borderColor: true\n  },\n  borderBottom: {\n    borderBottomWidth: true,\n    borderBottomStyle: true,\n    borderBottomColor: true\n  },\n  borderLeft: {\n    borderLeftWidth: true,\n    borderLeftStyle: true,\n    borderLeftColor: true\n  },\n  borderRight: {\n    borderRightWidth: true,\n    borderRightStyle: true,\n    borderRightColor: true\n  },\n  borderTop: {\n    borderTopWidth: true,\n    borderTopStyle: true,\n    borderTopColor: true\n  },\n  font: {\n    fontStyle: true,\n    fontVariant: true,\n    fontWeight: true,\n    fontSize: true,\n    lineHeight: true,\n    fontFamily: true\n  },\n  outline: {\n    outlineWidth: true,\n    outlineStyle: true,\n    outlineColor: true\n  }\n};\n\nvar CSSProperty = {\n  isUnitlessNumber: isUnitlessNumber,\n  shorthandPropertyExpansions: shorthandPropertyExpansions\n};\n\nmodule.exports = CSSProperty;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/CSSProperty.js\n ** module id = 99\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule camelizeStyleName\n * @typechecks\n */\n\n'use strict';\n\nvar camelize = require('./camelize');\n\nvar msPattern = /^-ms-/;\n\n/**\n * Camelcases a hyphenated CSS property name, for example:\n *\n *   > camelizeStyleName('background-color')\n *   < \"backgroundColor\"\n *   > camelizeStyleName('-moz-transition')\n *   < \"MozTransition\"\n *   > camelizeStyleName('-ms-transition')\n *   < \"msTransition\"\n *\n * As Andi Smith suggests\n * (http://www.andismith.com/blog/2012/02/modernizr-prefixed/), an `-ms` prefix\n * is converted to lowercase `ms`.\n *\n * @param {string} string\n * @return {string}\n */\nfunction camelizeStyleName(string) {\n  return camelize(string.replace(msPattern, 'ms-'));\n}\n\nmodule.exports = camelizeStyleName;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/fbjs/lib/camelizeStyleName.js\n ** module id = 100\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule camelize\n * @typechecks\n */\n\n\"use strict\";\n\nvar _hyphenPattern = /-(.)/g;\n\n/**\n * Camelcases a hyphenated string, for example:\n *\n *   > camelize('background-color')\n *   < \"backgroundColor\"\n *\n * @param {string} string\n * @return {string}\n */\nfunction camelize(string) {\n  return string.replace(_hyphenPattern, function (_, character) {\n    return character.toUpperCase();\n  });\n}\n\nmodule.exports = camelize;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/fbjs/lib/camelize.js\n ** module id = 101\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule dangerousStyleValue\n * @typechecks static-only\n */\n\n'use strict';\n\nvar CSSProperty = require('./CSSProperty');\n\nvar isUnitlessNumber = CSSProperty.isUnitlessNumber;\n\n/**\n * Convert a value into the proper css writable value. The style name `name`\n * should be logical (no hyphens), as specified\n * in `CSSProperty.isUnitlessNumber`.\n *\n * @param {string} name CSS property name such as `topMargin`.\n * @param {*} value CSS property value such as `10px`.\n * @return {string} Normalized style value with dimensions applied.\n */\nfunction dangerousStyleValue(name, value) {\n  // Note that we've removed escapeTextForBrowser() calls here since the\n  // whole string will be escaped when the attribute is injected into\n  // the markup. If you provide unsafe user data here they can inject\n  // arbitrary CSS which may be problematic (I couldn't repro this):\n  // https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet\n  // http://www.thespanner.co.uk/2007/11/26/ultimate-xss-css-injection/\n  // This is not an XSS hole but instead a potential CSS injection issue\n  // which has lead to a greater discussion about how we're going to\n  // trust URLs moving forward. See #2115901\n\n  var isEmpty = value == null || typeof value === 'boolean' || value === '';\n  if (isEmpty) {\n    return '';\n  }\n\n  var isNonNumeric = isNaN(value);\n  if (isNonNumeric || value === 0 || isUnitlessNumber.hasOwnProperty(name) && isUnitlessNumber[name]) {\n    return '' + value; // cast to string\n  }\n\n  if (typeof value === 'string') {\n    value = value.trim();\n  }\n  return value + 'px';\n}\n\nmodule.exports = dangerousStyleValue;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/dangerousStyleValue.js\n ** module id = 102\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule hyphenateStyleName\n * @typechecks\n */\n\n'use strict';\n\nvar hyphenate = require('./hyphenate');\n\nvar msPattern = /^ms-/;\n\n/**\n * Hyphenates a camelcased CSS property name, for example:\n *\n *   > hyphenateStyleName('backgroundColor')\n *   < \"background-color\"\n *   > hyphenateStyleName('MozTransition')\n *   < \"-moz-transition\"\n *   > hyphenateStyleName('msTransition')\n *   < \"-ms-transition\"\n *\n * As Modernizr suggests (http://modernizr.com/docs/#prefixed), an `ms` prefix\n * is converted to `-ms-`.\n *\n * @param {string} string\n * @return {string}\n */\nfunction hyphenateStyleName(string) {\n  return hyphenate(string).replace(msPattern, '-ms-');\n}\n\nmodule.exports = hyphenateStyleName;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/fbjs/lib/hyphenateStyleName.js\n ** module id = 103\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule hyphenate\n * @typechecks\n */\n\n'use strict';\n\nvar _uppercasePattern = /([A-Z])/g;\n\n/**\n * Hyphenates a camelcased string, for example:\n *\n *   > hyphenate('backgroundColor')\n *   < \"background-color\"\n *\n * For CSS style names, use `hyphenateStyleName` instead which works properly\n * with all vendor prefixes, including `ms`.\n *\n * @param {string} string\n * @return {string}\n */\nfunction hyphenate(string) {\n  return string.replace(_uppercasePattern, '-$1').toLowerCase();\n}\n\nmodule.exports = hyphenate;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/fbjs/lib/hyphenate.js\n ** module id = 104\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule memoizeStringOnly\n * @typechecks static-only\n */\n\n'use strict';\n\n/**\n * Memoizes the return value of a function that accepts one string argument.\n *\n * @param {function} callback\n * @return {function}\n */\nfunction memoizeStringOnly(callback) {\n  var cache = {};\n  return function (string) {\n    if (!cache.hasOwnProperty(string)) {\n      cache[string] = callback.call(this, string);\n    }\n    return cache[string];\n  };\n}\n\nmodule.exports = memoizeStringOnly;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/fbjs/lib/memoizeStringOnly.js\n ** module id = 105\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMButton\n */\n\n'use strict';\n\nvar mouseListenerNames = {\n  onClick: true,\n  onDoubleClick: true,\n  onMouseDown: true,\n  onMouseMove: true,\n  onMouseUp: true,\n\n  onClickCapture: true,\n  onDoubleClickCapture: true,\n  onMouseDownCapture: true,\n  onMouseMoveCapture: true,\n  onMouseUpCapture: true\n};\n\n/**\n * Implements a <button> native component that does not receive mouse events\n * when `disabled` is set.\n */\nvar ReactDOMButton = {\n  getNativeProps: function (inst, props, context) {\n    if (!props.disabled) {\n      return props;\n    }\n\n    // Copy the props, except the mouse listeners\n    var nativeProps = {};\n    for (var key in props) {\n      if (props.hasOwnProperty(key) && !mouseListenerNames[key]) {\n        nativeProps[key] = props[key];\n      }\n    }\n\n    return nativeProps;\n  }\n};\n\nmodule.exports = ReactDOMButton;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMButton.js\n ** module id = 106\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMInput\n */\n\n'use strict';\n\nvar ReactDOMIDOperations = require('./ReactDOMIDOperations');\nvar LinkedValueUtils = require('./LinkedValueUtils');\nvar ReactMount = require('./ReactMount');\nvar ReactUpdates = require('./ReactUpdates');\n\nvar assign = require('./Object.assign');\nvar invariant = require('fbjs/lib/invariant');\n\nvar instancesByReactID = {};\n\nfunction forceUpdateIfMounted() {\n  if (this._rootNodeID) {\n    // DOM component is still mounted; update\n    ReactDOMInput.updateWrapper(this);\n  }\n}\n\n/**\n * Implements an <input> native component that allows setting these optional\n * props: `checked`, `value`, `defaultChecked`, and `defaultValue`.\n *\n * If `checked` or `value` are not supplied (or null/undefined), user actions\n * that affect the checked state or value will trigger updates to the element.\n *\n * If they are supplied (and not null/undefined), the rendered element will not\n * trigger updates to the element. Instead, the props must change in order for\n * the rendered element to be updated.\n *\n * The rendered element will be initialized as unchecked (or `defaultChecked`)\n * with an empty value (or `defaultValue`).\n *\n * @see http://www.w3.org/TR/2012/WD-html5-20121025/the-input-element.html\n */\nvar ReactDOMInput = {\n  getNativeProps: function (inst, props, context) {\n    var value = LinkedValueUtils.getValue(props);\n    var checked = LinkedValueUtils.getChecked(props);\n\n    var nativeProps = assign({}, props, {\n      defaultChecked: undefined,\n      defaultValue: undefined,\n      value: value != null ? value : inst._wrapperState.initialValue,\n      checked: checked != null ? checked : inst._wrapperState.initialChecked,\n      onChange: inst._wrapperState.onChange\n    });\n\n    return nativeProps;\n  },\n\n  mountWrapper: function (inst, props) {\n    if (process.env.NODE_ENV !== 'production') {\n      LinkedValueUtils.checkPropTypes('input', props, inst._currentElement._owner);\n    }\n\n    var defaultValue = props.defaultValue;\n    inst._wrapperState = {\n      initialChecked: props.defaultChecked || false,\n      initialValue: defaultValue != null ? defaultValue : null,\n      onChange: _handleChange.bind(inst)\n    };\n  },\n\n  mountReadyWrapper: function (inst) {\n    // Can't be in mountWrapper or else server rendering leaks.\n    instancesByReactID[inst._rootNodeID] = inst;\n  },\n\n  unmountWrapper: function (inst) {\n    delete instancesByReactID[inst._rootNodeID];\n  },\n\n  updateWrapper: function (inst) {\n    var props = inst._currentElement.props;\n\n    // TODO: Shouldn't this be getChecked(props)?\n    var checked = props.checked;\n    if (checked != null) {\n      ReactDOMIDOperations.updatePropertyByID(inst._rootNodeID, 'checked', checked || false);\n    }\n\n    var value = LinkedValueUtils.getValue(props);\n    if (value != null) {\n      // Cast `value` to a string to ensure the value is set correctly. While\n      // browsers typically do this as necessary, jsdom doesn't.\n      ReactDOMIDOperations.updatePropertyByID(inst._rootNodeID, 'value', '' + value);\n    }\n  }\n};\n\nfunction _handleChange(event) {\n  var props = this._currentElement.props;\n\n  var returnValue = LinkedValueUtils.executeOnChange(props, event);\n\n  // Here we use asap to wait until all updates have propagated, which\n  // is important when using controlled components within layers:\n  // https://github.com/facebook/react/issues/1698\n  ReactUpdates.asap(forceUpdateIfMounted, this);\n\n  var name = props.name;\n  if (props.type === 'radio' && name != null) {\n    var rootNode = ReactMount.getNode(this._rootNodeID);\n    var queryRoot = rootNode;\n\n    while (queryRoot.parentNode) {\n      queryRoot = queryRoot.parentNode;\n    }\n\n    // If `rootNode.form` was non-null, then we could try `form.elements`,\n    // but that sometimes behaves strangely in IE8. We could also try using\n    // `form.getElementsByName`, but that will only return direct children\n    // and won't include inputs that use the HTML5 `form=` attribute. Since\n    // the input might not even be in a form, let's just use the global\n    // `querySelectorAll` to ensure we don't miss anything.\n    var group = queryRoot.querySelectorAll('input[name=' + JSON.stringify('' + name) + '][type=\"radio\"]');\n\n    for (var i = 0; i < group.length; i++) {\n      var otherNode = group[i];\n      if (otherNode === rootNode || otherNode.form !== rootNode.form) {\n        continue;\n      }\n      // This will throw if radio buttons rendered by different copies of React\n      // and the same name are rendered into the same form (same as #1939).\n      // That's probably okay; we don't support it just as we don't support\n      // mixing React with non-React.\n      var otherID = ReactMount.getID(otherNode);\n      !otherID ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactDOMInput: Mixing React and non-React radio inputs with the ' + 'same `name` is not supported.') : invariant(false) : undefined;\n      var otherInstance = instancesByReactID[otherID];\n      !otherInstance ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactDOMInput: Unknown radio button ID %s.', otherID) : invariant(false) : undefined;\n      // If this is a controlled radio button group, forcing the input that\n      // was previously checked to update will cause it to be come re-checked\n      // as appropriate.\n      ReactUpdates.asap(forceUpdateIfMounted, otherInstance);\n    }\n  }\n\n  return returnValue;\n}\n\nmodule.exports = ReactDOMInput;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMInput.js\n ** module id = 107\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule LinkedValueUtils\n * @typechecks static-only\n */\n\n'use strict';\n\nvar ReactPropTypes = require('./ReactPropTypes');\nvar ReactPropTypeLocations = require('./ReactPropTypeLocations');\n\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\nvar hasReadOnlyValue = {\n  'button': true,\n  'checkbox': true,\n  'image': true,\n  'hidden': true,\n  'radio': true,\n  'reset': true,\n  'submit': true\n};\n\nfunction _assertSingleLink(inputProps) {\n  !(inputProps.checkedLink == null || inputProps.valueLink == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Cannot provide a checkedLink and a valueLink. If you want to use ' + 'checkedLink, you probably don\\'t want to use valueLink and vice versa.') : invariant(false) : undefined;\n}\nfunction _assertValueLink(inputProps) {\n  _assertSingleLink(inputProps);\n  !(inputProps.value == null && inputProps.onChange == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Cannot provide a valueLink and a value or onChange event. If you want ' + 'to use value or onChange, you probably don\\'t want to use valueLink.') : invariant(false) : undefined;\n}\n\nfunction _assertCheckedLink(inputProps) {\n  _assertSingleLink(inputProps);\n  !(inputProps.checked == null && inputProps.onChange == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Cannot provide a checkedLink and a checked property or onChange event. ' + 'If you want to use checked or onChange, you probably don\\'t want to ' + 'use checkedLink') : invariant(false) : undefined;\n}\n\nvar propTypes = {\n  value: function (props, propName, componentName) {\n    if (!props[propName] || hasReadOnlyValue[props.type] || props.onChange || props.readOnly || props.disabled) {\n      return null;\n    }\n    return new Error('You provided a `value` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultValue`. Otherwise, ' + 'set either `onChange` or `readOnly`.');\n  },\n  checked: function (props, propName, componentName) {\n    if (!props[propName] || props.onChange || props.readOnly || props.disabled) {\n      return null;\n    }\n    return new Error('You provided a `checked` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultChecked`. Otherwise, ' + 'set either `onChange` or `readOnly`.');\n  },\n  onChange: ReactPropTypes.func\n};\n\nvar loggedTypeFailures = {};\nfunction getDeclarationErrorAddendum(owner) {\n  if (owner) {\n    var name = owner.getName();\n    if (name) {\n      return ' Check the render method of `' + name + '`.';\n    }\n  }\n  return '';\n}\n\n/**\n * Provide a linked `value` attribute for controlled forms. You should not use\n * this outside of the ReactDOM controlled form components.\n */\nvar LinkedValueUtils = {\n  checkPropTypes: function (tagName, props, owner) {\n    for (var propName in propTypes) {\n      if (propTypes.hasOwnProperty(propName)) {\n        var error = propTypes[propName](props, propName, tagName, ReactPropTypeLocations.prop);\n      }\n      if (error instanceof Error && !(error.message in loggedTypeFailures)) {\n        // Only monitor this failure once because there tends to be a lot of the\n        // same error.\n        loggedTypeFailures[error.message] = true;\n\n        var addendum = getDeclarationErrorAddendum(owner);\n        process.env.NODE_ENV !== 'production' ? warning(false, 'Failed form propType: %s%s', error.message, addendum) : undefined;\n      }\n    }\n  },\n\n  /**\n   * @param {object} inputProps Props for form component\n   * @return {*} current value of the input either from value prop or link.\n   */\n  getValue: function (inputProps) {\n    if (inputProps.valueLink) {\n      _assertValueLink(inputProps);\n      return inputProps.valueLink.value;\n    }\n    return inputProps.value;\n  },\n\n  /**\n   * @param {object} inputProps Props for form component\n   * @return {*} current checked status of the input either from checked prop\n   *             or link.\n   */\n  getChecked: function (inputProps) {\n    if (inputProps.checkedLink) {\n      _assertCheckedLink(inputProps);\n      return inputProps.checkedLink.value;\n    }\n    return inputProps.checked;\n  },\n\n  /**\n   * @param {object} inputProps Props for form component\n   * @param {SyntheticEvent} event change event to handle\n   */\n  executeOnChange: function (inputProps, event) {\n    if (inputProps.valueLink) {\n      _assertValueLink(inputProps);\n      return inputProps.valueLink.requestChange(event.target.value);\n    } else if (inputProps.checkedLink) {\n      _assertCheckedLink(inputProps);\n      return inputProps.checkedLink.requestChange(event.target.checked);\n    } else if (inputProps.onChange) {\n      return inputProps.onChange.call(undefined, event);\n    }\n  }\n};\n\nmodule.exports = LinkedValueUtils;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/LinkedValueUtils.js\n ** module id = 108\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactPropTypes\n */\n\n'use strict';\n\nvar ReactElement = require('./ReactElement');\nvar ReactPropTypeLocationNames = require('./ReactPropTypeLocationNames');\n\nvar emptyFunction = require('fbjs/lib/emptyFunction');\nvar getIteratorFn = require('./getIteratorFn');\n\n/**\n * Collection of methods that allow declaration and validation of props that are\n * supplied to React components. Example usage:\n *\n *   var Props = require('ReactPropTypes');\n *   var MyArticle = React.createClass({\n *     propTypes: {\n *       // An optional string prop named \"description\".\n *       description: Props.string,\n *\n *       // A required enum prop named \"category\".\n *       category: Props.oneOf(['News','Photos']).isRequired,\n *\n *       // A prop named \"dialog\" that requires an instance of Dialog.\n *       dialog: Props.instanceOf(Dialog).isRequired\n *     },\n *     render: function() { ... }\n *   });\n *\n * A more formal specification of how these methods are used:\n *\n *   type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)\n *   decl := ReactPropTypes.{type}(.isRequired)?\n *\n * Each and every declaration produces a function with the same signature. This\n * allows the creation of custom validation functions. For example:\n *\n *  var MyLink = React.createClass({\n *    propTypes: {\n *      // An optional string or URI prop named \"href\".\n *      href: function(props, propName, componentName) {\n *        var propValue = props[propName];\n *        if (propValue != null && typeof propValue !== 'string' &&\n *            !(propValue instanceof URI)) {\n *          return new Error(\n *            'Expected a string or an URI for ' + propName + ' in ' +\n *            componentName\n *          );\n *        }\n *      }\n *    },\n *    render: function() {...}\n *  });\n *\n * @internal\n */\n\nvar ANONYMOUS = '<<anonymous>>';\n\nvar ReactPropTypes = {\n  array: createPrimitiveTypeChecker('array'),\n  bool: createPrimitiveTypeChecker('boolean'),\n  func: createPrimitiveTypeChecker('function'),\n  number: createPrimitiveTypeChecker('number'),\n  object: createPrimitiveTypeChecker('object'),\n  string: createPrimitiveTypeChecker('string'),\n\n  any: createAnyTypeChecker(),\n  arrayOf: createArrayOfTypeChecker,\n  element: createElementTypeChecker(),\n  instanceOf: createInstanceTypeChecker,\n  node: createNodeChecker(),\n  objectOf: createObjectOfTypeChecker,\n  oneOf: createEnumTypeChecker,\n  oneOfType: createUnionTypeChecker,\n  shape: createShapeTypeChecker\n};\n\nfunction createChainableTypeChecker(validate) {\n  function checkType(isRequired, props, propName, componentName, location, propFullName) {\n    componentName = componentName || ANONYMOUS;\n    propFullName = propFullName || propName;\n    if (props[propName] == null) {\n      var locationName = ReactPropTypeLocationNames[location];\n      if (isRequired) {\n        return new Error('Required ' + locationName + ' `' + propFullName + '` was not specified in ' + ('`' + componentName + '`.'));\n      }\n      return null;\n    } else {\n      return validate(props, propName, componentName, location, propFullName);\n    }\n  }\n\n  var chainedCheckType = checkType.bind(null, false);\n  chainedCheckType.isRequired = checkType.bind(null, true);\n\n  return chainedCheckType;\n}\n\nfunction createPrimitiveTypeChecker(expectedType) {\n  function validate(props, propName, componentName, location, propFullName) {\n    var propValue = props[propName];\n    var propType = getPropType(propValue);\n    if (propType !== expectedType) {\n      var locationName = ReactPropTypeLocationNames[location];\n      // `propValue` being instance of, say, date/regexp, pass the 'object'\n      // check, but we can offer a more precise error message here rather than\n      // 'of type `object`'.\n      var preciseType = getPreciseType(propValue);\n\n      return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'));\n    }\n    return null;\n  }\n  return createChainableTypeChecker(validate);\n}\n\nfunction createAnyTypeChecker() {\n  return createChainableTypeChecker(emptyFunction.thatReturns(null));\n}\n\nfunction createArrayOfTypeChecker(typeChecker) {\n  function validate(props, propName, componentName, location, propFullName) {\n    var propValue = props[propName];\n    if (!Array.isArray(propValue)) {\n      var locationName = ReactPropTypeLocationNames[location];\n      var propType = getPropType(propValue);\n      return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));\n    }\n    for (var i = 0; i < propValue.length; i++) {\n      var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']');\n      if (error instanceof Error) {\n        return error;\n      }\n    }\n    return null;\n  }\n  return createChainableTypeChecker(validate);\n}\n\nfunction createElementTypeChecker() {\n  function validate(props, propName, componentName, location, propFullName) {\n    if (!ReactElement.isValidElement(props[propName])) {\n      var locationName = ReactPropTypeLocationNames[location];\n      return new Error('Invalid ' + locationName + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a single ReactElement.'));\n    }\n    return null;\n  }\n  return createChainableTypeChecker(validate);\n}\n\nfunction createInstanceTypeChecker(expectedClass) {\n  function validate(props, propName, componentName, location, propFullName) {\n    if (!(props[propName] instanceof expectedClass)) {\n      var locationName = ReactPropTypeLocationNames[location];\n      var expectedClassName = expectedClass.name || ANONYMOUS;\n      var actualClassName = getClassName(props[propName]);\n      return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));\n    }\n    return null;\n  }\n  return createChainableTypeChecker(validate);\n}\n\nfunction createEnumTypeChecker(expectedValues) {\n  if (!Array.isArray(expectedValues)) {\n    return createChainableTypeChecker(function () {\n      return new Error('Invalid argument supplied to oneOf, expected an instance of array.');\n    });\n  }\n\n  function validate(props, propName, componentName, location, propFullName) {\n    var propValue = props[propName];\n    for (var i = 0; i < expectedValues.length; i++) {\n      if (propValue === expectedValues[i]) {\n        return null;\n      }\n    }\n\n    var locationName = ReactPropTypeLocationNames[location];\n    var valuesString = JSON.stringify(expectedValues);\n    return new Error('Invalid ' + locationName + ' `' + propFullName + '` of value `' + propValue + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));\n  }\n  return createChainableTypeChecker(validate);\n}\n\nfunction createObjectOfTypeChecker(typeChecker) {\n  function validate(props, propName, componentName, location, propFullName) {\n    var propValue = props[propName];\n    var propType = getPropType(propValue);\n    if (propType !== 'object') {\n      var locationName = ReactPropTypeLocationNames[location];\n      return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));\n    }\n    for (var key in propValue) {\n      if (propValue.hasOwnProperty(key)) {\n        var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key);\n        if (error instanceof Error) {\n          return error;\n        }\n      }\n    }\n    return null;\n  }\n  return createChainableTypeChecker(validate);\n}\n\nfunction createUnionTypeChecker(arrayOfTypeCheckers) {\n  if (!Array.isArray(arrayOfTypeCheckers)) {\n    return createChainableTypeChecker(function () {\n      return new Error('Invalid argument supplied to oneOfType, expected an instance of array.');\n    });\n  }\n\n  function validate(props, propName, componentName, location, propFullName) {\n    for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n      var checker = arrayOfTypeCheckers[i];\n      if (checker(props, propName, componentName, location, propFullName) == null) {\n        return null;\n      }\n    }\n\n    var locationName = ReactPropTypeLocationNames[location];\n    return new Error('Invalid ' + locationName + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`.'));\n  }\n  return createChainableTypeChecker(validate);\n}\n\nfunction createNodeChecker() {\n  function validate(props, propName, componentName, location, propFullName) {\n    if (!isNode(props[propName])) {\n      var locationName = ReactPropTypeLocationNames[location];\n      return new Error('Invalid ' + locationName + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));\n    }\n    return null;\n  }\n  return createChainableTypeChecker(validate);\n}\n\nfunction createShapeTypeChecker(shapeTypes) {\n  function validate(props, propName, componentName, location, propFullName) {\n    var propValue = props[propName];\n    var propType = getPropType(propValue);\n    if (propType !== 'object') {\n      var locationName = ReactPropTypeLocationNames[location];\n      return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n    }\n    for (var key in shapeTypes) {\n      var checker = shapeTypes[key];\n      if (!checker) {\n        continue;\n      }\n      var error = checker(propValue, key, componentName, location, propFullName + '.' + key);\n      if (error) {\n        return error;\n      }\n    }\n    return null;\n  }\n  return createChainableTypeChecker(validate);\n}\n\nfunction isNode(propValue) {\n  switch (typeof propValue) {\n    case 'number':\n    case 'string':\n    case 'undefined':\n      return true;\n    case 'boolean':\n      return !propValue;\n    case 'object':\n      if (Array.isArray(propValue)) {\n        return propValue.every(isNode);\n      }\n      if (propValue === null || ReactElement.isValidElement(propValue)) {\n        return true;\n      }\n\n      var iteratorFn = getIteratorFn(propValue);\n      if (iteratorFn) {\n        var iterator = iteratorFn.call(propValue);\n        var step;\n        if (iteratorFn !== propValue.entries) {\n          while (!(step = iterator.next()).done) {\n            if (!isNode(step.value)) {\n              return false;\n            }\n          }\n        } else {\n          // Iterator will provide entry [k,v] tuples rather than values.\n          while (!(step = iterator.next()).done) {\n            var entry = step.value;\n            if (entry) {\n              if (!isNode(entry[1])) {\n                return false;\n              }\n            }\n          }\n        }\n      } else {\n        return false;\n      }\n\n      return true;\n    default:\n      return false;\n  }\n}\n\n// Equivalent of `typeof` but with special handling for array and regexp.\nfunction getPropType(propValue) {\n  var propType = typeof propValue;\n  if (Array.isArray(propValue)) {\n    return 'array';\n  }\n  if (propValue instanceof RegExp) {\n    // Old webkits (at least until Android 4.0) return 'function' rather than\n    // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\n    // passes PropTypes.object.\n    return 'object';\n  }\n  return propType;\n}\n\n// This handles more types than `getPropType`. Only used for error messages.\n// See `createPrimitiveTypeChecker`.\nfunction getPreciseType(propValue) {\n  var propType = getPropType(propValue);\n  if (propType === 'object') {\n    if (propValue instanceof Date) {\n      return 'date';\n    } else if (propValue instanceof RegExp) {\n      return 'regexp';\n    }\n  }\n  return propType;\n}\n\n// Returns class name of the object, if any.\nfunction getClassName(propValue) {\n  if (!propValue.constructor || !propValue.constructor.name) {\n    return '<<anonymous>>';\n  }\n  return propValue.constructor.name;\n}\n\nmodule.exports = ReactPropTypes;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactPropTypes.js\n ** module id = 109\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getIteratorFn\n * @typechecks static-only\n */\n\n'use strict';\n\n/* global Symbol */\nvar ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.\n\n/**\n * Returns the iterator method function contained on the iterable object.\n *\n * Be sure to invoke the function with the iterable as context:\n *\n *     var iteratorFn = getIteratorFn(myIterable);\n *     if (iteratorFn) {\n *       var iterator = iteratorFn.call(myIterable);\n *       ...\n *     }\n *\n * @param {?object} maybeIterable\n * @return {?function}\n */\nfunction getIteratorFn(maybeIterable) {\n  var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);\n  if (typeof iteratorFn === 'function') {\n    return iteratorFn;\n  }\n}\n\nmodule.exports = getIteratorFn;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/getIteratorFn.js\n ** module id = 110\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMOption\n */\n\n'use strict';\n\nvar ReactChildren = require('./ReactChildren');\nvar ReactDOMSelect = require('./ReactDOMSelect');\n\nvar assign = require('./Object.assign');\nvar warning = require('fbjs/lib/warning');\n\nvar valueContextKey = ReactDOMSelect.valueContextKey;\n\n/**\n * Implements an <option> native component that warns when `selected` is set.\n */\nvar ReactDOMOption = {\n  mountWrapper: function (inst, props, context) {\n    // TODO (yungsters): Remove support for `selected` in <option>.\n    if (process.env.NODE_ENV !== 'production') {\n      process.env.NODE_ENV !== 'production' ? warning(props.selected == null, 'Use the `defaultValue` or `value` props on <select> instead of ' + 'setting `selected` on <option>.') : undefined;\n    }\n\n    // Look up whether this option is 'selected' via context\n    var selectValue = context[valueContextKey];\n\n    // If context key is null (e.g., no specified value or after initial mount)\n    // or missing (e.g., for <datalist>), we don't change props.selected\n    var selected = null;\n    if (selectValue != null) {\n      selected = false;\n      if (Array.isArray(selectValue)) {\n        // multiple\n        for (var i = 0; i < selectValue.length; i++) {\n          if ('' + selectValue[i] === '' + props.value) {\n            selected = true;\n            break;\n          }\n        }\n      } else {\n        selected = '' + selectValue === '' + props.value;\n      }\n    }\n\n    inst._wrapperState = { selected: selected };\n  },\n\n  getNativeProps: function (inst, props, context) {\n    var nativeProps = assign({ selected: undefined, children: undefined }, props);\n\n    // Read state only from initial mount because <select> updates value\n    // manually; we need the initial state only for server rendering\n    if (inst._wrapperState.selected != null) {\n      nativeProps.selected = inst._wrapperState.selected;\n    }\n\n    var content = '';\n\n    // Flatten children and warn if they aren't strings or numbers;\n    // invalid types are ignored.\n    ReactChildren.forEach(props.children, function (child) {\n      if (child == null) {\n        return;\n      }\n      if (typeof child === 'string' || typeof child === 'number') {\n        content += child;\n      } else {\n        process.env.NODE_ENV !== 'production' ? warning(false, 'Only strings and numbers are supported as <option> children.') : undefined;\n      }\n    });\n\n    nativeProps.children = content;\n    return nativeProps;\n  }\n\n};\n\nmodule.exports = ReactDOMOption;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMOption.js\n ** module id = 111\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactChildren\n */\n\n'use strict';\n\nvar PooledClass = require('./PooledClass');\nvar ReactElement = require('./ReactElement');\n\nvar emptyFunction = require('fbjs/lib/emptyFunction');\nvar traverseAllChildren = require('./traverseAllChildren');\n\nvar twoArgumentPooler = PooledClass.twoArgumentPooler;\nvar fourArgumentPooler = PooledClass.fourArgumentPooler;\n\nvar userProvidedKeyEscapeRegex = /\\/(?!\\/)/g;\nfunction escapeUserProvidedKey(text) {\n  return ('' + text).replace(userProvidedKeyEscapeRegex, '//');\n}\n\n/**\n * PooledClass representing the bookkeeping associated with performing a child\n * traversal. Allows avoiding binding callbacks.\n *\n * @constructor ForEachBookKeeping\n * @param {!function} forEachFunction Function to perform traversal with.\n * @param {?*} forEachContext Context to perform context with.\n */\nfunction ForEachBookKeeping(forEachFunction, forEachContext) {\n  this.func = forEachFunction;\n  this.context = forEachContext;\n  this.count = 0;\n}\nForEachBookKeeping.prototype.destructor = function () {\n  this.func = null;\n  this.context = null;\n  this.count = 0;\n};\nPooledClass.addPoolingTo(ForEachBookKeeping, twoArgumentPooler);\n\nfunction forEachSingleChild(bookKeeping, child, name) {\n  var func = bookKeeping.func;\n  var context = bookKeeping.context;\n\n  func.call(context, child, bookKeeping.count++);\n}\n\n/**\n * Iterates through children that are typically specified as `props.children`.\n *\n * The provided forEachFunc(child, index) will be called for each\n * leaf child.\n *\n * @param {?*} children Children tree container.\n * @param {function(*, int)} forEachFunc\n * @param {*} forEachContext Context for forEachContext.\n */\nfunction forEachChildren(children, forEachFunc, forEachContext) {\n  if (children == null) {\n    return children;\n  }\n  var traverseContext = ForEachBookKeeping.getPooled(forEachFunc, forEachContext);\n  traverseAllChildren(children, forEachSingleChild, traverseContext);\n  ForEachBookKeeping.release(traverseContext);\n}\n\n/**\n * PooledClass representing the bookkeeping associated with performing a child\n * mapping. Allows avoiding binding callbacks.\n *\n * @constructor MapBookKeeping\n * @param {!*} mapResult Object containing the ordered map of results.\n * @param {!function} mapFunction Function to perform mapping with.\n * @param {?*} mapContext Context to perform mapping with.\n */\nfunction MapBookKeeping(mapResult, keyPrefix, mapFunction, mapContext) {\n  this.result = mapResult;\n  this.keyPrefix = keyPrefix;\n  this.func = mapFunction;\n  this.context = mapContext;\n  this.count = 0;\n}\nMapBookKeeping.prototype.destructor = function () {\n  this.result = null;\n  this.keyPrefix = null;\n  this.func = null;\n  this.context = null;\n  this.count = 0;\n};\nPooledClass.addPoolingTo(MapBookKeeping, fourArgumentPooler);\n\nfunction mapSingleChildIntoContext(bookKeeping, child, childKey) {\n  var result = bookKeeping.result;\n  var keyPrefix = bookKeeping.keyPrefix;\n  var func = bookKeeping.func;\n  var context = bookKeeping.context;\n\n  var mappedChild = func.call(context, child, bookKeeping.count++);\n  if (Array.isArray(mappedChild)) {\n    mapIntoWithKeyPrefixInternal(mappedChild, result, childKey, emptyFunction.thatReturnsArgument);\n  } else if (mappedChild != null) {\n    if (ReactElement.isValidElement(mappedChild)) {\n      mappedChild = ReactElement.cloneAndReplaceKey(mappedChild,\n      // Keep both the (mapped) and old keys if they differ, just as\n      // traverseAllChildren used to do for objects as children\n      keyPrefix + (mappedChild !== child ? escapeUserProvidedKey(mappedChild.key || '') + '/' : '') + childKey);\n    }\n    result.push(mappedChild);\n  }\n}\n\nfunction mapIntoWithKeyPrefixInternal(children, array, prefix, func, context) {\n  var escapedPrefix = '';\n  if (prefix != null) {\n    escapedPrefix = escapeUserProvidedKey(prefix) + '/';\n  }\n  var traverseContext = MapBookKeeping.getPooled(array, escapedPrefix, func, context);\n  traverseAllChildren(children, mapSingleChildIntoContext, traverseContext);\n  MapBookKeeping.release(traverseContext);\n}\n\n/**\n * Maps children that are typically specified as `props.children`.\n *\n * The provided mapFunction(child, key, index) will be called for each\n * leaf child.\n *\n * @param {?*} children Children tree container.\n * @param {function(*, int)} func The map function.\n * @param {*} context Context for mapFunction.\n * @return {object} Object containing the ordered map of results.\n */\nfunction mapChildren(children, func, context) {\n  if (children == null) {\n    return children;\n  }\n  var result = [];\n  mapIntoWithKeyPrefixInternal(children, result, null, func, context);\n  return result;\n}\n\nfunction forEachSingleChildDummy(traverseContext, child, name) {\n  return null;\n}\n\n/**\n * Count the number of children that are typically specified as\n * `props.children`.\n *\n * @param {?*} children Children tree container.\n * @return {number} The number of children.\n */\nfunction countChildren(children, context) {\n  return traverseAllChildren(children, forEachSingleChildDummy, null);\n}\n\n/**\n * Flatten a children object (typically specified as `props.children`) and\n * return an array with appropriately re-keyed children.\n */\nfunction toArray(children) {\n  var result = [];\n  mapIntoWithKeyPrefixInternal(children, result, null, emptyFunction.thatReturnsArgument);\n  return result;\n}\n\nvar ReactChildren = {\n  forEach: forEachChildren,\n  map: mapChildren,\n  mapIntoWithKeyPrefixInternal: mapIntoWithKeyPrefixInternal,\n  count: countChildren,\n  toArray: toArray\n};\n\nmodule.exports = ReactChildren;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactChildren.js\n ** module id = 112\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule traverseAllChildren\n */\n\n'use strict';\n\nvar ReactCurrentOwner = require('./ReactCurrentOwner');\nvar ReactElement = require('./ReactElement');\nvar ReactInstanceHandles = require('./ReactInstanceHandles');\n\nvar getIteratorFn = require('./getIteratorFn');\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\nvar SEPARATOR = ReactInstanceHandles.SEPARATOR;\nvar SUBSEPARATOR = ':';\n\n/**\n * TODO: Test that a single child and an array with one item have the same key\n * pattern.\n */\n\nvar userProvidedKeyEscaperLookup = {\n  '=': '=0',\n  '.': '=1',\n  ':': '=2'\n};\n\nvar userProvidedKeyEscapeRegex = /[=.:]/g;\n\nvar didWarnAboutMaps = false;\n\nfunction userProvidedKeyEscaper(match) {\n  return userProvidedKeyEscaperLookup[match];\n}\n\n/**\n * Generate a key string that identifies a component within a set.\n *\n * @param {*} component A component that could contain a manual key.\n * @param {number} index Index that is used if a manual key is not provided.\n * @return {string}\n */\nfunction getComponentKey(component, index) {\n  if (component && component.key != null) {\n    // Explicit key\n    return wrapUserProvidedKey(component.key);\n  }\n  // Implicit key determined by the index in the set\n  return index.toString(36);\n}\n\n/**\n * Escape a component key so that it is safe to use in a reactid.\n *\n * @param {*} text Component key to be escaped.\n * @return {string} An escaped string.\n */\nfunction escapeUserProvidedKey(text) {\n  return ('' + text).replace(userProvidedKeyEscapeRegex, userProvidedKeyEscaper);\n}\n\n/**\n * Wrap a `key` value explicitly provided by the user to distinguish it from\n * implicitly-generated keys generated by a component's index in its parent.\n *\n * @param {string} key Value of a user-provided `key` attribute\n * @return {string}\n */\nfunction wrapUserProvidedKey(key) {\n  return '$' + escapeUserProvidedKey(key);\n}\n\n/**\n * @param {?*} children Children tree container.\n * @param {!string} nameSoFar Name of the key path so far.\n * @param {!function} callback Callback to invoke with each child found.\n * @param {?*} traverseContext Used to pass information throughout the traversal\n * process.\n * @return {!number} The number of children in this subtree.\n */\nfunction traverseAllChildrenImpl(children, nameSoFar, callback, traverseContext) {\n  var type = typeof children;\n\n  if (type === 'undefined' || type === 'boolean') {\n    // All of the above are perceived as null.\n    children = null;\n  }\n\n  if (children === null || type === 'string' || type === 'number' || ReactElement.isValidElement(children)) {\n    callback(traverseContext, children,\n    // If it's the only child, treat the name as if it was wrapped in an array\n    // so that it's consistent if the number of children grows.\n    nameSoFar === '' ? SEPARATOR + getComponentKey(children, 0) : nameSoFar);\n    return 1;\n  }\n\n  var child;\n  var nextName;\n  var subtreeCount = 0; // Count of children found in the current subtree.\n  var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR;\n\n  if (Array.isArray(children)) {\n    for (var i = 0; i < children.length; i++) {\n      child = children[i];\n      nextName = nextNamePrefix + getComponentKey(child, i);\n      subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\n    }\n  } else {\n    var iteratorFn = getIteratorFn(children);\n    if (iteratorFn) {\n      var iterator = iteratorFn.call(children);\n      var step;\n      if (iteratorFn !== children.entries) {\n        var ii = 0;\n        while (!(step = iterator.next()).done) {\n          child = step.value;\n          nextName = nextNamePrefix + getComponentKey(child, ii++);\n          subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\n        }\n      } else {\n        if (process.env.NODE_ENV !== 'production') {\n          process.env.NODE_ENV !== 'production' ? warning(didWarnAboutMaps, 'Using Maps as children is not yet fully supported. It is an ' + 'experimental feature that might be removed. Convert it to a ' + 'sequence / iterable of keyed ReactElements instead.') : undefined;\n          didWarnAboutMaps = true;\n        }\n        // Iterator will provide entry [k,v] tuples rather than values.\n        while (!(step = iterator.next()).done) {\n          var entry = step.value;\n          if (entry) {\n            child = entry[1];\n            nextName = nextNamePrefix + wrapUserProvidedKey(entry[0]) + SUBSEPARATOR + getComponentKey(child, 0);\n            subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\n          }\n        }\n      }\n    } else if (type === 'object') {\n      var addendum = '';\n      if (process.env.NODE_ENV !== 'production') {\n        addendum = ' If you meant to render a collection of children, use an array ' + 'instead or wrap the object using createFragment(object) from the ' + 'React add-ons.';\n        if (children._isReactElement) {\n          addendum = ' It looks like you\\'re using an element created by a different ' + 'version of React. Make sure to use only one copy of React.';\n        }\n        if (ReactCurrentOwner.current) {\n          var name = ReactCurrentOwner.current.getName();\n          if (name) {\n            addendum += ' Check the render method of `' + name + '`.';\n          }\n        }\n      }\n      var childrenString = String(children);\n      !false ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Objects are not valid as a React child (found: %s).%s', childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString, addendum) : invariant(false) : undefined;\n    }\n  }\n\n  return subtreeCount;\n}\n\n/**\n * Traverses children that are typically specified as `props.children`, but\n * might also be specified through attributes:\n *\n * - `traverseAllChildren(this.props.children, ...)`\n * - `traverseAllChildren(this.props.leftPanelChildren, ...)`\n *\n * The `traverseContext` is an optional argument that is passed through the\n * entire traversal. It can be used to store accumulations or anything else that\n * the callback might find relevant.\n *\n * @param {?*} children Children tree object.\n * @param {!function} callback To invoke upon traversing each child.\n * @param {?*} traverseContext Context for traversal.\n * @return {!number} The number of children in this subtree.\n */\nfunction traverseAllChildren(children, callback, traverseContext) {\n  if (children == null) {\n    return 0;\n  }\n\n  return traverseAllChildrenImpl(children, '', callback, traverseContext);\n}\n\nmodule.exports = traverseAllChildren;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/traverseAllChildren.js\n ** module id = 113\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMSelect\n */\n\n'use strict';\n\nvar LinkedValueUtils = require('./LinkedValueUtils');\nvar ReactMount = require('./ReactMount');\nvar ReactUpdates = require('./ReactUpdates');\n\nvar assign = require('./Object.assign');\nvar warning = require('fbjs/lib/warning');\n\nvar valueContextKey = '__ReactDOMSelect_value$' + Math.random().toString(36).slice(2);\n\nfunction updateOptionsIfPendingUpdateAndMounted() {\n  if (this._rootNodeID && this._wrapperState.pendingUpdate) {\n    this._wrapperState.pendingUpdate = false;\n\n    var props = this._currentElement.props;\n    var value = LinkedValueUtils.getValue(props);\n\n    if (value != null) {\n      updateOptions(this, props, value);\n    }\n  }\n}\n\nfunction getDeclarationErrorAddendum(owner) {\n  if (owner) {\n    var name = owner.getName();\n    if (name) {\n      return ' Check the render method of `' + name + '`.';\n    }\n  }\n  return '';\n}\n\nvar valuePropNames = ['value', 'defaultValue'];\n\n/**\n * Validation function for `value` and `defaultValue`.\n * @private\n */\nfunction checkSelectPropTypes(inst, props) {\n  var owner = inst._currentElement._owner;\n  LinkedValueUtils.checkPropTypes('select', props, owner);\n\n  for (var i = 0; i < valuePropNames.length; i++) {\n    var propName = valuePropNames[i];\n    if (props[propName] == null) {\n      continue;\n    }\n    if (props.multiple) {\n      process.env.NODE_ENV !== 'production' ? warning(Array.isArray(props[propName]), 'The `%s` prop supplied to <select> must be an array if ' + '`multiple` is true.%s', propName, getDeclarationErrorAddendum(owner)) : undefined;\n    } else {\n      process.env.NODE_ENV !== 'production' ? warning(!Array.isArray(props[propName]), 'The `%s` prop supplied to <select> must be a scalar ' + 'value if `multiple` is false.%s', propName, getDeclarationErrorAddendum(owner)) : undefined;\n    }\n  }\n}\n\n/**\n * @param {ReactDOMComponent} inst\n * @param {boolean} multiple\n * @param {*} propValue A stringable (with `multiple`, a list of stringables).\n * @private\n */\nfunction updateOptions(inst, multiple, propValue) {\n  var selectedValue, i;\n  var options = ReactMount.getNode(inst._rootNodeID).options;\n\n  if (multiple) {\n    selectedValue = {};\n    for (i = 0; i < propValue.length; i++) {\n      selectedValue['' + propValue[i]] = true;\n    }\n    for (i = 0; i < options.length; i++) {\n      var selected = selectedValue.hasOwnProperty(options[i].value);\n      if (options[i].selected !== selected) {\n        options[i].selected = selected;\n      }\n    }\n  } else {\n    // Do not set `select.value` as exact behavior isn't consistent across all\n    // browsers for all cases.\n    selectedValue = '' + propValue;\n    for (i = 0; i < options.length; i++) {\n      if (options[i].value === selectedValue) {\n        options[i].selected = true;\n        return;\n      }\n    }\n    if (options.length) {\n      options[0].selected = true;\n    }\n  }\n}\n\n/**\n * Implements a <select> native component that allows optionally setting the\n * props `value` and `defaultValue`. If `multiple` is false, the prop must be a\n * stringable. If `multiple` is true, the prop must be an array of stringables.\n *\n * If `value` is not supplied (or null/undefined), user actions that change the\n * selected option will trigger updates to the rendered options.\n *\n * If it is supplied (and not null/undefined), the rendered options will not\n * update in response to user actions. Instead, the `value` prop must change in\n * order for the rendered options to update.\n *\n * If `defaultValue` is provided, any options with the supplied values will be\n * selected.\n */\nvar ReactDOMSelect = {\n  valueContextKey: valueContextKey,\n\n  getNativeProps: function (inst, props, context) {\n    return assign({}, props, {\n      onChange: inst._wrapperState.onChange,\n      value: undefined\n    });\n  },\n\n  mountWrapper: function (inst, props) {\n    if (process.env.NODE_ENV !== 'production') {\n      checkSelectPropTypes(inst, props);\n    }\n\n    var value = LinkedValueUtils.getValue(props);\n    inst._wrapperState = {\n      pendingUpdate: false,\n      initialValue: value != null ? value : props.defaultValue,\n      onChange: _handleChange.bind(inst),\n      wasMultiple: Boolean(props.multiple)\n    };\n  },\n\n  processChildContext: function (inst, props, context) {\n    // Pass down initial value so initial generated markup has correct\n    // `selected` attributes\n    var childContext = assign({}, context);\n    childContext[valueContextKey] = inst._wrapperState.initialValue;\n    return childContext;\n  },\n\n  postUpdateWrapper: function (inst) {\n    var props = inst._currentElement.props;\n\n    // After the initial mount, we control selected-ness manually so don't pass\n    // the context value down\n    inst._wrapperState.initialValue = undefined;\n\n    var wasMultiple = inst._wrapperState.wasMultiple;\n    inst._wrapperState.wasMultiple = Boolean(props.multiple);\n\n    var value = LinkedValueUtils.getValue(props);\n    if (value != null) {\n      inst._wrapperState.pendingUpdate = false;\n      updateOptions(inst, Boolean(props.multiple), value);\n    } else if (wasMultiple !== Boolean(props.multiple)) {\n      // For simplicity, reapply `defaultValue` if `multiple` is toggled.\n      if (props.defaultValue != null) {\n        updateOptions(inst, Boolean(props.multiple), props.defaultValue);\n      } else {\n        // Revert the select back to its default unselected state.\n        updateOptions(inst, Boolean(props.multiple), props.multiple ? [] : '');\n      }\n    }\n  }\n};\n\nfunction _handleChange(event) {\n  var props = this._currentElement.props;\n  var returnValue = LinkedValueUtils.executeOnChange(props, event);\n\n  this._wrapperState.pendingUpdate = true;\n  ReactUpdates.asap(updateOptionsIfPendingUpdateAndMounted, this);\n  return returnValue;\n}\n\nmodule.exports = ReactDOMSelect;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMSelect.js\n ** module id = 114\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMTextarea\n */\n\n'use strict';\n\nvar LinkedValueUtils = require('./LinkedValueUtils');\nvar ReactDOMIDOperations = require('./ReactDOMIDOperations');\nvar ReactUpdates = require('./ReactUpdates');\n\nvar assign = require('./Object.assign');\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\nfunction forceUpdateIfMounted() {\n  if (this._rootNodeID) {\n    // DOM component is still mounted; update\n    ReactDOMTextarea.updateWrapper(this);\n  }\n}\n\n/**\n * Implements a <textarea> native component that allows setting `value`, and\n * `defaultValue`. This differs from the traditional DOM API because value is\n * usually set as PCDATA children.\n *\n * If `value` is not supplied (or null/undefined), user actions that affect the\n * value will trigger updates to the element.\n *\n * If `value` is supplied (and not null/undefined), the rendered element will\n * not trigger updates to the element. Instead, the `value` prop must change in\n * order for the rendered element to be updated.\n *\n * The rendered element will be initialized with an empty value, the prop\n * `defaultValue` if specified, or the children content (deprecated).\n */\nvar ReactDOMTextarea = {\n  getNativeProps: function (inst, props, context) {\n    !(props.dangerouslySetInnerHTML == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, '`dangerouslySetInnerHTML` does not make sense on <textarea>.') : invariant(false) : undefined;\n\n    // Always set children to the same thing. In IE9, the selection range will\n    // get reset if `textContent` is mutated.\n    var nativeProps = assign({}, props, {\n      defaultValue: undefined,\n      value: undefined,\n      children: inst._wrapperState.initialValue,\n      onChange: inst._wrapperState.onChange\n    });\n\n    return nativeProps;\n  },\n\n  mountWrapper: function (inst, props) {\n    if (process.env.NODE_ENV !== 'production') {\n      LinkedValueUtils.checkPropTypes('textarea', props, inst._currentElement._owner);\n    }\n\n    var defaultValue = props.defaultValue;\n    // TODO (yungsters): Remove support for children content in <textarea>.\n    var children = props.children;\n    if (children != null) {\n      if (process.env.NODE_ENV !== 'production') {\n        process.env.NODE_ENV !== 'production' ? warning(false, 'Use the `defaultValue` or `value` props instead of setting ' + 'children on <textarea>.') : undefined;\n      }\n      !(defaultValue == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'If you supply `defaultValue` on a <textarea>, do not pass children.') : invariant(false) : undefined;\n      if (Array.isArray(children)) {\n        !(children.length <= 1) ? process.env.NODE_ENV !== 'production' ? invariant(false, '<textarea> can only have at most one child.') : invariant(false) : undefined;\n        children = children[0];\n      }\n\n      defaultValue = '' + children;\n    }\n    if (defaultValue == null) {\n      defaultValue = '';\n    }\n    var value = LinkedValueUtils.getValue(props);\n\n    inst._wrapperState = {\n      // We save the initial value so that `ReactDOMComponent` doesn't update\n      // `textContent` (unnecessary since we update value).\n      // The initial value can be a boolean or object so that's why it's\n      // forced to be a string.\n      initialValue: '' + (value != null ? value : defaultValue),\n      onChange: _handleChange.bind(inst)\n    };\n  },\n\n  updateWrapper: function (inst) {\n    var props = inst._currentElement.props;\n    var value = LinkedValueUtils.getValue(props);\n    if (value != null) {\n      // Cast `value` to a string to ensure the value is set correctly. While\n      // browsers typically do this as necessary, jsdom doesn't.\n      ReactDOMIDOperations.updatePropertyByID(inst._rootNodeID, 'value', '' + value);\n    }\n  }\n};\n\nfunction _handleChange(event) {\n  var props = this._currentElement.props;\n  var returnValue = LinkedValueUtils.executeOnChange(props, event);\n  ReactUpdates.asap(forceUpdateIfMounted, this);\n  return returnValue;\n}\n\nmodule.exports = ReactDOMTextarea;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMTextarea.js\n ** module id = 115\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactMultiChild\n * @typechecks static-only\n */\n\n'use strict';\n\nvar ReactComponentEnvironment = require('./ReactComponentEnvironment');\nvar ReactMultiChildUpdateTypes = require('./ReactMultiChildUpdateTypes');\n\nvar ReactCurrentOwner = require('./ReactCurrentOwner');\nvar ReactReconciler = require('./ReactReconciler');\nvar ReactChildReconciler = require('./ReactChildReconciler');\n\nvar flattenChildren = require('./flattenChildren');\n\n/**\n * Updating children of a component may trigger recursive updates. The depth is\n * used to batch recursive updates to render markup more efficiently.\n *\n * @type {number}\n * @private\n */\nvar updateDepth = 0;\n\n/**\n * Queue of update configuration objects.\n *\n * Each object has a `type` property that is in `ReactMultiChildUpdateTypes`.\n *\n * @type {array<object>}\n * @private\n */\nvar updateQueue = [];\n\n/**\n * Queue of markup to be rendered.\n *\n * @type {array<string>}\n * @private\n */\nvar markupQueue = [];\n\n/**\n * Enqueues markup to be rendered and inserted at a supplied index.\n *\n * @param {string} parentID ID of the parent component.\n * @param {string} markup Markup that renders into an element.\n * @param {number} toIndex Destination index.\n * @private\n */\nfunction enqueueInsertMarkup(parentID, markup, toIndex) {\n  // NOTE: Null values reduce hidden classes.\n  updateQueue.push({\n    parentID: parentID,\n    parentNode: null,\n    type: ReactMultiChildUpdateTypes.INSERT_MARKUP,\n    markupIndex: markupQueue.push(markup) - 1,\n    content: null,\n    fromIndex: null,\n    toIndex: toIndex\n  });\n}\n\n/**\n * Enqueues moving an existing element to another index.\n *\n * @param {string} parentID ID of the parent component.\n * @param {number} fromIndex Source index of the existing element.\n * @param {number} toIndex Destination index of the element.\n * @private\n */\nfunction enqueueMove(parentID, fromIndex, toIndex) {\n  // NOTE: Null values reduce hidden classes.\n  updateQueue.push({\n    parentID: parentID,\n    parentNode: null,\n    type: ReactMultiChildUpdateTypes.MOVE_EXISTING,\n    markupIndex: null,\n    content: null,\n    fromIndex: fromIndex,\n    toIndex: toIndex\n  });\n}\n\n/**\n * Enqueues removing an element at an index.\n *\n * @param {string} parentID ID of the parent component.\n * @param {number} fromIndex Index of the element to remove.\n * @private\n */\nfunction enqueueRemove(parentID, fromIndex) {\n  // NOTE: Null values reduce hidden classes.\n  updateQueue.push({\n    parentID: parentID,\n    parentNode: null,\n    type: ReactMultiChildUpdateTypes.REMOVE_NODE,\n    markupIndex: null,\n    content: null,\n    fromIndex: fromIndex,\n    toIndex: null\n  });\n}\n\n/**\n * Enqueues setting the markup of a node.\n *\n * @param {string} parentID ID of the parent component.\n * @param {string} markup Markup that renders into an element.\n * @private\n */\nfunction enqueueSetMarkup(parentID, markup) {\n  // NOTE: Null values reduce hidden classes.\n  updateQueue.push({\n    parentID: parentID,\n    parentNode: null,\n    type: ReactMultiChildUpdateTypes.SET_MARKUP,\n    markupIndex: null,\n    content: markup,\n    fromIndex: null,\n    toIndex: null\n  });\n}\n\n/**\n * Enqueues setting the text content.\n *\n * @param {string} parentID ID of the parent component.\n * @param {string} textContent Text content to set.\n * @private\n */\nfunction enqueueTextContent(parentID, textContent) {\n  // NOTE: Null values reduce hidden classes.\n  updateQueue.push({\n    parentID: parentID,\n    parentNode: null,\n    type: ReactMultiChildUpdateTypes.TEXT_CONTENT,\n    markupIndex: null,\n    content: textContent,\n    fromIndex: null,\n    toIndex: null\n  });\n}\n\n/**\n * Processes any enqueued updates.\n *\n * @private\n */\nfunction processQueue() {\n  if (updateQueue.length) {\n    ReactComponentEnvironment.processChildrenUpdates(updateQueue, markupQueue);\n    clearQueue();\n  }\n}\n\n/**\n * Clears any enqueued updates.\n *\n * @private\n */\nfunction clearQueue() {\n  updateQueue.length = 0;\n  markupQueue.length = 0;\n}\n\n/**\n * ReactMultiChild are capable of reconciling multiple children.\n *\n * @class ReactMultiChild\n * @internal\n */\nvar ReactMultiChild = {\n\n  /**\n   * Provides common functionality for components that must reconcile multiple\n   * children. This is used by `ReactDOMComponent` to mount, update, and\n   * unmount child components.\n   *\n   * @lends {ReactMultiChild.prototype}\n   */\n  Mixin: {\n\n    _reconcilerInstantiateChildren: function (nestedChildren, transaction, context) {\n      if (process.env.NODE_ENV !== 'production') {\n        if (this._currentElement) {\n          try {\n            ReactCurrentOwner.current = this._currentElement._owner;\n            return ReactChildReconciler.instantiateChildren(nestedChildren, transaction, context);\n          } finally {\n            ReactCurrentOwner.current = null;\n          }\n        }\n      }\n      return ReactChildReconciler.instantiateChildren(nestedChildren, transaction, context);\n    },\n\n    _reconcilerUpdateChildren: function (prevChildren, nextNestedChildrenElements, transaction, context) {\n      var nextChildren;\n      if (process.env.NODE_ENV !== 'production') {\n        if (this._currentElement) {\n          try {\n            ReactCurrentOwner.current = this._currentElement._owner;\n            nextChildren = flattenChildren(nextNestedChildrenElements);\n          } finally {\n            ReactCurrentOwner.current = null;\n          }\n          return ReactChildReconciler.updateChildren(prevChildren, nextChildren, transaction, context);\n        }\n      }\n      nextChildren = flattenChildren(nextNestedChildrenElements);\n      return ReactChildReconciler.updateChildren(prevChildren, nextChildren, transaction, context);\n    },\n\n    /**\n     * Generates a \"mount image\" for each of the supplied children. In the case\n     * of `ReactDOMComponent`, a mount image is a string of markup.\n     *\n     * @param {?object} nestedChildren Nested child maps.\n     * @return {array} An array of mounted representations.\n     * @internal\n     */\n    mountChildren: function (nestedChildren, transaction, context) {\n      var children = this._reconcilerInstantiateChildren(nestedChildren, transaction, context);\n      this._renderedChildren = children;\n      var mountImages = [];\n      var index = 0;\n      for (var name in children) {\n        if (children.hasOwnProperty(name)) {\n          var child = children[name];\n          // Inlined for performance, see `ReactInstanceHandles.createReactID`.\n          var rootID = this._rootNodeID + name;\n          var mountImage = ReactReconciler.mountComponent(child, rootID, transaction, context);\n          child._mountIndex = index++;\n          mountImages.push(mountImage);\n        }\n      }\n      return mountImages;\n    },\n\n    /**\n     * Replaces any rendered children with a text content string.\n     *\n     * @param {string} nextContent String of content.\n     * @internal\n     */\n    updateTextContent: function (nextContent) {\n      updateDepth++;\n      var errorThrown = true;\n      try {\n        var prevChildren = this._renderedChildren;\n        // Remove any rendered children.\n        ReactChildReconciler.unmountChildren(prevChildren);\n        // TODO: The setTextContent operation should be enough\n        for (var name in prevChildren) {\n          if (prevChildren.hasOwnProperty(name)) {\n            this._unmountChild(prevChildren[name]);\n          }\n        }\n        // Set new text content.\n        this.setTextContent(nextContent);\n        errorThrown = false;\n      } finally {\n        updateDepth--;\n        if (!updateDepth) {\n          if (errorThrown) {\n            clearQueue();\n          } else {\n            processQueue();\n          }\n        }\n      }\n    },\n\n    /**\n     * Replaces any rendered children with a markup string.\n     *\n     * @param {string} nextMarkup String of markup.\n     * @internal\n     */\n    updateMarkup: function (nextMarkup) {\n      updateDepth++;\n      var errorThrown = true;\n      try {\n        var prevChildren = this._renderedChildren;\n        // Remove any rendered children.\n        ReactChildReconciler.unmountChildren(prevChildren);\n        for (var name in prevChildren) {\n          if (prevChildren.hasOwnProperty(name)) {\n            this._unmountChildByName(prevChildren[name], name);\n          }\n        }\n        this.setMarkup(nextMarkup);\n        errorThrown = false;\n      } finally {\n        updateDepth--;\n        if (!updateDepth) {\n          if (errorThrown) {\n            clearQueue();\n          } else {\n            processQueue();\n          }\n        }\n      }\n    },\n\n    /**\n     * Updates the rendered children with new children.\n     *\n     * @param {?object} nextNestedChildrenElements Nested child element maps.\n     * @param {ReactReconcileTransaction} transaction\n     * @internal\n     */\n    updateChildren: function (nextNestedChildrenElements, transaction, context) {\n      updateDepth++;\n      var errorThrown = true;\n      try {\n        this._updateChildren(nextNestedChildrenElements, transaction, context);\n        errorThrown = false;\n      } finally {\n        updateDepth--;\n        if (!updateDepth) {\n          if (errorThrown) {\n            clearQueue();\n          } else {\n            processQueue();\n          }\n        }\n      }\n    },\n\n    /**\n     * Improve performance by isolating this hot code path from the try/catch\n     * block in `updateChildren`.\n     *\n     * @param {?object} nextNestedChildrenElements Nested child element maps.\n     * @param {ReactReconcileTransaction} transaction\n     * @final\n     * @protected\n     */\n    _updateChildren: function (nextNestedChildrenElements, transaction, context) {\n      var prevChildren = this._renderedChildren;\n      var nextChildren = this._reconcilerUpdateChildren(prevChildren, nextNestedChildrenElements, transaction, context);\n      this._renderedChildren = nextChildren;\n      if (!nextChildren && !prevChildren) {\n        return;\n      }\n      var name;\n      // `nextIndex` will increment for each child in `nextChildren`, but\n      // `lastIndex` will be the last index visited in `prevChildren`.\n      var lastIndex = 0;\n      var nextIndex = 0;\n      for (name in nextChildren) {\n        if (!nextChildren.hasOwnProperty(name)) {\n          continue;\n        }\n        var prevChild = prevChildren && prevChildren[name];\n        var nextChild = nextChildren[name];\n        if (prevChild === nextChild) {\n          this.moveChild(prevChild, nextIndex, lastIndex);\n          lastIndex = Math.max(prevChild._mountIndex, lastIndex);\n          prevChild._mountIndex = nextIndex;\n        } else {\n          if (prevChild) {\n            // Update `lastIndex` before `_mountIndex` gets unset by unmounting.\n            lastIndex = Math.max(prevChild._mountIndex, lastIndex);\n            this._unmountChild(prevChild);\n          }\n          // The child must be instantiated before it's mounted.\n          this._mountChildByNameAtIndex(nextChild, name, nextIndex, transaction, context);\n        }\n        nextIndex++;\n      }\n      // Remove children that are no longer present.\n      for (name in prevChildren) {\n        if (prevChildren.hasOwnProperty(name) && !(nextChildren && nextChildren.hasOwnProperty(name))) {\n          this._unmountChild(prevChildren[name]);\n        }\n      }\n    },\n\n    /**\n     * Unmounts all rendered children. This should be used to clean up children\n     * when this component is unmounted.\n     *\n     * @internal\n     */\n    unmountChildren: function () {\n      var renderedChildren = this._renderedChildren;\n      ReactChildReconciler.unmountChildren(renderedChildren);\n      this._renderedChildren = null;\n    },\n\n    /**\n     * Moves a child component to the supplied index.\n     *\n     * @param {ReactComponent} child Component to move.\n     * @param {number} toIndex Destination index of the element.\n     * @param {number} lastIndex Last index visited of the siblings of `child`.\n     * @protected\n     */\n    moveChild: function (child, toIndex, lastIndex) {\n      // If the index of `child` is less than `lastIndex`, then it needs to\n      // be moved. Otherwise, we do not need to move it because a child will be\n      // inserted or moved before `child`.\n      if (child._mountIndex < lastIndex) {\n        enqueueMove(this._rootNodeID, child._mountIndex, toIndex);\n      }\n    },\n\n    /**\n     * Creates a child component.\n     *\n     * @param {ReactComponent} child Component to create.\n     * @param {string} mountImage Markup to insert.\n     * @protected\n     */\n    createChild: function (child, mountImage) {\n      enqueueInsertMarkup(this._rootNodeID, mountImage, child._mountIndex);\n    },\n\n    /**\n     * Removes a child component.\n     *\n     * @param {ReactComponent} child Child to remove.\n     * @protected\n     */\n    removeChild: function (child) {\n      enqueueRemove(this._rootNodeID, child._mountIndex);\n    },\n\n    /**\n     * Sets this text content string.\n     *\n     * @param {string} textContent Text content to set.\n     * @protected\n     */\n    setTextContent: function (textContent) {\n      enqueueTextContent(this._rootNodeID, textContent);\n    },\n\n    /**\n     * Sets this markup string.\n     *\n     * @param {string} markup Markup to set.\n     * @protected\n     */\n    setMarkup: function (markup) {\n      enqueueSetMarkup(this._rootNodeID, markup);\n    },\n\n    /**\n     * Mounts a child with the supplied name.\n     *\n     * NOTE: This is part of `updateChildren` and is here for readability.\n     *\n     * @param {ReactComponent} child Component to mount.\n     * @param {string} name Name of the child.\n     * @param {number} index Index at which to insert the child.\n     * @param {ReactReconcileTransaction} transaction\n     * @private\n     */\n    _mountChildByNameAtIndex: function (child, name, index, transaction, context) {\n      // Inlined for performance, see `ReactInstanceHandles.createReactID`.\n      var rootID = this._rootNodeID + name;\n      var mountImage = ReactReconciler.mountComponent(child, rootID, transaction, context);\n      child._mountIndex = index;\n      this.createChild(child, mountImage);\n    },\n\n    /**\n     * Unmounts a rendered child.\n     *\n     * NOTE: This is part of `updateChildren` and is here for readability.\n     *\n     * @param {ReactComponent} child Component to unmount.\n     * @private\n     */\n    _unmountChild: function (child) {\n      this.removeChild(child);\n      child._mountIndex = null;\n    }\n\n  }\n\n};\n\nmodule.exports = ReactMultiChild;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactMultiChild.js\n ** module id = 116\n ** module chunks = 4\n **/","/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactChildReconciler\n * @typechecks static-only\n */\n\n'use strict';\n\nvar ReactReconciler = require('./ReactReconciler');\n\nvar instantiateReactComponent = require('./instantiateReactComponent');\nvar shouldUpdateReactComponent = require('./shouldUpdateReactComponent');\nvar traverseAllChildren = require('./traverseAllChildren');\nvar warning = require('fbjs/lib/warning');\n\nfunction instantiateChild(childInstances, child, name) {\n  // We found a component instance.\n  var keyUnique = childInstances[name] === undefined;\n  if (process.env.NODE_ENV !== 'production') {\n    process.env.NODE_ENV !== 'production' ? warning(keyUnique, 'flattenChildren(...): Encountered two children with the same key, ' + '`%s`. Child keys must be unique; when two children share a key, only ' + 'the first child will be used.', name) : undefined;\n  }\n  if (child != null && keyUnique) {\n    childInstances[name] = instantiateReactComponent(child, null);\n  }\n}\n\n/**\n * ReactChildReconciler provides helpers for initializing or updating a set of\n * children. Its output is suitable for passing it onto ReactMultiChild which\n * does diffed reordering and insertion.\n */\nvar ReactChildReconciler = {\n  /**\n   * Generates a \"mount image\" for each of the supplied children. In the case\n   * of `ReactDOMComponent`, a mount image is a string of markup.\n   *\n   * @param {?object} nestedChildNodes Nested child maps.\n   * @return {?object} A set of child instances.\n   * @internal\n   */\n  instantiateChildren: function (nestedChildNodes, transaction, context) {\n    if (nestedChildNodes == null) {\n      return null;\n    }\n    var childInstances = {};\n    traverseAllChildren(nestedChildNodes, instantiateChild, childInstances);\n    return childInstances;\n  },\n\n  /**\n   * Updates the rendered children and returns a new set of children.\n   *\n   * @param {?object} prevChildren Previously initialized set of children.\n   * @param {?object} nextChildren Flat child element maps.\n   * @param {ReactReconcileTransaction} transaction\n   * @param {object} context\n   * @return {?object} A new set of child instances.\n   * @internal\n   */\n  updateChildren: function (prevChildren, nextChildren, transaction, context) {\n    // We currently don't have a way to track moves here but if we use iterators\n    // instead of for..in we can zip the iterators and check if an item has\n    // moved.\n    // TODO: If nothing has changed, return the prevChildren object so that we\n    // can quickly bailout if nothing has changed.\n    if (!nextChildren && !prevChildren) {\n      return null;\n    }\n    var name;\n    for (name in nextChildren) {\n      if (!nextChildren.hasOwnProperty(name)) {\n        continue;\n      }\n      var prevChild = prevChildren && prevChildren[name];\n      var prevElement = prevChild && prevChild._currentElement;\n      var nextElement = nextChildren[name];\n      if (prevChild != null && shouldUpdateReactComponent(prevElement, nextElement)) {\n        ReactReconciler.receiveComponent(prevChild, nextElement, transaction, context);\n        nextChildren[name] = prevChild;\n      } else {\n        if (prevChild) {\n          ReactReconciler.unmountComponent(prevChild, name);\n        }\n        // The child must be instantiated before it's mounted.\n        var nextChildInstance = instantiateReactComponent(nextElement, null);\n        nextChildren[name] = nextChildInstance;\n      }\n    }\n    // Unmount children that are no longer present.\n    for (name in prevChildren) {\n      if (prevChildren.hasOwnProperty(name) && !(nextChildren && nextChildren.hasOwnProperty(name))) {\n        ReactReconciler.unmountComponent(prevChildren[name]);\n      }\n    }\n    return nextChildren;\n  },\n\n  /**\n   * Unmounts all rendered children. This should be used to clean up children\n   * when this component is unmounted.\n   *\n   * @param {?object} renderedChildren Previously initialized set of children.\n   * @internal\n   */\n  unmountChildren: function (renderedChildren) {\n    for (var name in renderedChildren) {\n      if (renderedChildren.hasOwnProperty(name)) {\n        var renderedChild = renderedChildren[name];\n        ReactReconciler.unmountComponent(renderedChild);\n      }\n    }\n  }\n\n};\n\nmodule.exports = ReactChildReconciler;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactChildReconciler.js\n ** module id = 117\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule flattenChildren\n */\n\n'use strict';\n\nvar traverseAllChildren = require('./traverseAllChildren');\nvar warning = require('fbjs/lib/warning');\n\n/**\n * @param {function} traverseContext Context passed through traversal.\n * @param {?ReactComponent} child React child component.\n * @param {!string} name String name of key path to child.\n */\nfunction flattenSingleChildIntoContext(traverseContext, child, name) {\n  // We found a component instance.\n  var result = traverseContext;\n  var keyUnique = result[name] === undefined;\n  if (process.env.NODE_ENV !== 'production') {\n    process.env.NODE_ENV !== 'production' ? warning(keyUnique, 'flattenChildren(...): Encountered two children with the same key, ' + '`%s`. Child keys must be unique; when two children share a key, only ' + 'the first child will be used.', name) : undefined;\n  }\n  if (keyUnique && child != null) {\n    result[name] = child;\n  }\n}\n\n/**\n * Flattens children that are typically specified as `props.children`. Any null\n * children will not be included in the resulting object.\n * @return {!object} flattened children keyed by name.\n */\nfunction flattenChildren(children) {\n  if (children == null) {\n    return children;\n  }\n  var result = {};\n  traverseAllChildren(children, flattenSingleChildIntoContext, result);\n  return result;\n}\n\nmodule.exports = flattenChildren;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/flattenChildren.js\n ** module id = 118\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule shallowEqual\n * @typechecks\n * \n */\n\n'use strict';\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\n/**\n * Performs equality by iterating through keys on an object and returning false\n * when any key has values which are not strictly equal between the arguments.\n * Returns true when the values of all keys are strictly equal.\n */\nfunction shallowEqual(objA, objB) {\n  if (objA === objB) {\n    return true;\n  }\n\n  if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {\n    return false;\n  }\n\n  var keysA = Object.keys(objA);\n  var keysB = Object.keys(objB);\n\n  if (keysA.length !== keysB.length) {\n    return false;\n  }\n\n  // Test for A's keys different from B.\n  var bHasOwnProperty = hasOwnProperty.bind(objB);\n  for (var i = 0; i < keysA.length; i++) {\n    if (!bHasOwnProperty(keysA[i]) || objA[keysA[i]] !== objB[keysA[i]]) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nmodule.exports = shallowEqual;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/fbjs/lib/shallowEqual.js\n ** module id = 119\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactEventListener\n * @typechecks static-only\n */\n\n'use strict';\n\nvar EventListener = require('fbjs/lib/EventListener');\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\nvar PooledClass = require('./PooledClass');\nvar ReactInstanceHandles = require('./ReactInstanceHandles');\nvar ReactMount = require('./ReactMount');\nvar ReactUpdates = require('./ReactUpdates');\n\nvar assign = require('./Object.assign');\nvar getEventTarget = require('./getEventTarget');\nvar getUnboundedScrollPosition = require('fbjs/lib/getUnboundedScrollPosition');\n\nvar DOCUMENT_FRAGMENT_NODE_TYPE = 11;\n\n/**\n * Finds the parent React component of `node`.\n *\n * @param {*} node\n * @return {?DOMEventTarget} Parent container, or `null` if the specified node\n *                           is not nested.\n */\nfunction findParent(node) {\n  // TODO: It may be a good idea to cache this to prevent unnecessary DOM\n  // traversal, but caching is difficult to do correctly without using a\n  // mutation observer to listen for all DOM changes.\n  var nodeID = ReactMount.getID(node);\n  var rootID = ReactInstanceHandles.getReactRootIDFromNodeID(nodeID);\n  var container = ReactMount.findReactContainerForID(rootID);\n  var parent = ReactMount.getFirstReactDOM(container);\n  return parent;\n}\n\n// Used to store ancestor hierarchy in top level callback\nfunction TopLevelCallbackBookKeeping(topLevelType, nativeEvent) {\n  this.topLevelType = topLevelType;\n  this.nativeEvent = nativeEvent;\n  this.ancestors = [];\n}\nassign(TopLevelCallbackBookKeeping.prototype, {\n  destructor: function () {\n    this.topLevelType = null;\n    this.nativeEvent = null;\n    this.ancestors.length = 0;\n  }\n});\nPooledClass.addPoolingTo(TopLevelCallbackBookKeeping, PooledClass.twoArgumentPooler);\n\nfunction handleTopLevelImpl(bookKeeping) {\n  // TODO: Re-enable event.path handling\n  //\n  // if (bookKeeping.nativeEvent.path && bookKeeping.nativeEvent.path.length > 1) {\n  //   // New browsers have a path attribute on native events\n  //   handleTopLevelWithPath(bookKeeping);\n  // } else {\n  //   // Legacy browsers don't have a path attribute on native events\n  //   handleTopLevelWithoutPath(bookKeeping);\n  // }\n\n  void handleTopLevelWithPath; // temporarily unused\n  handleTopLevelWithoutPath(bookKeeping);\n}\n\n// Legacy browsers don't have a path attribute on native events\nfunction handleTopLevelWithoutPath(bookKeeping) {\n  var topLevelTarget = ReactMount.getFirstReactDOM(getEventTarget(bookKeeping.nativeEvent)) || window;\n\n  // Loop through the hierarchy, in case there's any nested components.\n  // It's important that we build the array of ancestors before calling any\n  // event handlers, because event handlers can modify the DOM, leading to\n  // inconsistencies with ReactMount's node cache. See #1105.\n  var ancestor = topLevelTarget;\n  while (ancestor) {\n    bookKeeping.ancestors.push(ancestor);\n    ancestor = findParent(ancestor);\n  }\n\n  for (var i = 0; i < bookKeeping.ancestors.length; i++) {\n    topLevelTarget = bookKeeping.ancestors[i];\n    var topLevelTargetID = ReactMount.getID(topLevelTarget) || '';\n    ReactEventListener._handleTopLevel(bookKeeping.topLevelType, topLevelTarget, topLevelTargetID, bookKeeping.nativeEvent, getEventTarget(bookKeeping.nativeEvent));\n  }\n}\n\n// New browsers have a path attribute on native events\nfunction handleTopLevelWithPath(bookKeeping) {\n  var path = bookKeeping.nativeEvent.path;\n  var currentNativeTarget = path[0];\n  var eventsFired = 0;\n  for (var i = 0; i < path.length; i++) {\n    var currentPathElement = path[i];\n    if (currentPathElement.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE) {\n      currentNativeTarget = path[i + 1];\n    }\n    // TODO: slow\n    var reactParent = ReactMount.getFirstReactDOM(currentPathElement);\n    if (reactParent === currentPathElement) {\n      var currentPathElementID = ReactMount.getID(currentPathElement);\n      var newRootID = ReactInstanceHandles.getReactRootIDFromNodeID(currentPathElementID);\n      bookKeeping.ancestors.push(currentPathElement);\n\n      var topLevelTargetID = ReactMount.getID(currentPathElement) || '';\n      eventsFired++;\n      ReactEventListener._handleTopLevel(bookKeeping.topLevelType, currentPathElement, topLevelTargetID, bookKeeping.nativeEvent, currentNativeTarget);\n\n      // Jump to the root of this React render tree\n      while (currentPathElementID !== newRootID) {\n        i++;\n        currentPathElement = path[i];\n        currentPathElementID = ReactMount.getID(currentPathElement);\n      }\n    }\n  }\n  if (eventsFired === 0) {\n    ReactEventListener._handleTopLevel(bookKeeping.topLevelType, window, '', bookKeeping.nativeEvent, getEventTarget(bookKeeping.nativeEvent));\n  }\n}\n\nfunction scrollValueMonitor(cb) {\n  var scrollPosition = getUnboundedScrollPosition(window);\n  cb(scrollPosition);\n}\n\nvar ReactEventListener = {\n  _enabled: true,\n  _handleTopLevel: null,\n\n  WINDOW_HANDLE: ExecutionEnvironment.canUseDOM ? window : null,\n\n  setHandleTopLevel: function (handleTopLevel) {\n    ReactEventListener._handleTopLevel = handleTopLevel;\n  },\n\n  setEnabled: function (enabled) {\n    ReactEventListener._enabled = !!enabled;\n  },\n\n  isEnabled: function () {\n    return ReactEventListener._enabled;\n  },\n\n  /**\n   * Traps top-level events by using event bubbling.\n   *\n   * @param {string} topLevelType Record from `EventConstants`.\n   * @param {string} handlerBaseName Event name (e.g. \"click\").\n   * @param {object} handle Element on which to attach listener.\n   * @return {?object} An object with a remove function which will forcefully\n   *                  remove the listener.\n   * @internal\n   */\n  trapBubbledEvent: function (topLevelType, handlerBaseName, handle) {\n    var element = handle;\n    if (!element) {\n      return null;\n    }\n    return EventListener.listen(element, handlerBaseName, ReactEventListener.dispatchEvent.bind(null, topLevelType));\n  },\n\n  /**\n   * Traps a top-level event by using event capturing.\n   *\n   * @param {string} topLevelType Record from `EventConstants`.\n   * @param {string} handlerBaseName Event name (e.g. \"click\").\n   * @param {object} handle Element on which to attach listener.\n   * @return {?object} An object with a remove function which will forcefully\n   *                  remove the listener.\n   * @internal\n   */\n  trapCapturedEvent: function (topLevelType, handlerBaseName, handle) {\n    var element = handle;\n    if (!element) {\n      return null;\n    }\n    return EventListener.capture(element, handlerBaseName, ReactEventListener.dispatchEvent.bind(null, topLevelType));\n  },\n\n  monitorScrollValue: function (refresh) {\n    var callback = scrollValueMonitor.bind(null, refresh);\n    EventListener.listen(window, 'scroll', callback);\n  },\n\n  dispatchEvent: function (topLevelType, nativeEvent) {\n    if (!ReactEventListener._enabled) {\n      return;\n    }\n\n    var bookKeeping = TopLevelCallbackBookKeeping.getPooled(topLevelType, nativeEvent);\n    try {\n      // Event queue being processed in the same cycle allows\n      // `preventDefault`.\n      ReactUpdates.batchedUpdates(handleTopLevelImpl, bookKeeping);\n    } finally {\n      TopLevelCallbackBookKeeping.release(bookKeeping);\n    }\n  }\n};\n\nmodule.exports = ReactEventListener;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactEventListener.js\n ** module id = 120\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * @providesModule EventListener\n * @typechecks\n */\n\n'use strict';\n\nvar emptyFunction = require('./emptyFunction');\n\n/**\n * Upstream version of event listener. Does not take into account specific\n * nature of platform.\n */\nvar EventListener = {\n  /**\n   * Listen to DOM events during the bubble phase.\n   *\n   * @param {DOMEventTarget} target DOM element to register listener on.\n   * @param {string} eventType Event type, e.g. 'click' or 'mouseover'.\n   * @param {function} callback Callback function.\n   * @return {object} Object with a `remove` method.\n   */\n  listen: function (target, eventType, callback) {\n    if (target.addEventListener) {\n      target.addEventListener(eventType, callback, false);\n      return {\n        remove: function () {\n          target.removeEventListener(eventType, callback, false);\n        }\n      };\n    } else if (target.attachEvent) {\n      target.attachEvent('on' + eventType, callback);\n      return {\n        remove: function () {\n          target.detachEvent('on' + eventType, callback);\n        }\n      };\n    }\n  },\n\n  /**\n   * Listen to DOM events during the capture phase.\n   *\n   * @param {DOMEventTarget} target DOM element to register listener on.\n   * @param {string} eventType Event type, e.g. 'click' or 'mouseover'.\n   * @param {function} callback Callback function.\n   * @return {object} Object with a `remove` method.\n   */\n  capture: function (target, eventType, callback) {\n    if (target.addEventListener) {\n      target.addEventListener(eventType, callback, true);\n      return {\n        remove: function () {\n          target.removeEventListener(eventType, callback, true);\n        }\n      };\n    } else {\n      if (process.env.NODE_ENV !== 'production') {\n        console.error('Attempted to listen to events during the capture phase on a ' + 'browser that does not support the capture phase. Your application ' + 'will not receive some events.');\n      }\n      return {\n        remove: emptyFunction\n      };\n    }\n  },\n\n  registerDefault: function () {}\n};\n\nmodule.exports = EventListener;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/fbjs/lib/EventListener.js\n ** module id = 121\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getUnboundedScrollPosition\n * @typechecks\n */\n\n'use strict';\n\n/**\n * Gets the scroll position of the supplied element or window.\n *\n * The return values are unbounded, unlike `getScrollPosition`. This means they\n * may be negative or exceed the element boundaries (which is possible using\n * inertial scrolling).\n *\n * @param {DOMWindow|DOMElement} scrollable\n * @return {object} Map with `x` and `y` keys.\n */\nfunction getUnboundedScrollPosition(scrollable) {\n  if (scrollable === window) {\n    return {\n      x: window.pageXOffset || document.documentElement.scrollLeft,\n      y: window.pageYOffset || document.documentElement.scrollTop\n    };\n  }\n  return {\n    x: scrollable.scrollLeft,\n    y: scrollable.scrollTop\n  };\n}\n\nmodule.exports = getUnboundedScrollPosition;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/fbjs/lib/getUnboundedScrollPosition.js\n ** module id = 122\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactInjection\n */\n\n'use strict';\n\nvar DOMProperty = require('./DOMProperty');\nvar EventPluginHub = require('./EventPluginHub');\nvar ReactComponentEnvironment = require('./ReactComponentEnvironment');\nvar ReactClass = require('./ReactClass');\nvar ReactEmptyComponent = require('./ReactEmptyComponent');\nvar ReactBrowserEventEmitter = require('./ReactBrowserEventEmitter');\nvar ReactNativeComponent = require('./ReactNativeComponent');\nvar ReactPerf = require('./ReactPerf');\nvar ReactRootIndex = require('./ReactRootIndex');\nvar ReactUpdates = require('./ReactUpdates');\n\nvar ReactInjection = {\n  Component: ReactComponentEnvironment.injection,\n  Class: ReactClass.injection,\n  DOMProperty: DOMProperty.injection,\n  EmptyComponent: ReactEmptyComponent.injection,\n  EventPluginHub: EventPluginHub.injection,\n  EventEmitter: ReactBrowserEventEmitter.injection,\n  NativeComponent: ReactNativeComponent.injection,\n  Perf: ReactPerf.injection,\n  RootIndex: ReactRootIndex.injection,\n  Updates: ReactUpdates.injection\n};\n\nmodule.exports = ReactInjection;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactInjection.js\n ** module id = 123\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactClass\n */\n\n'use strict';\n\nvar ReactComponent = require('./ReactComponent');\nvar ReactElement = require('./ReactElement');\nvar ReactPropTypeLocations = require('./ReactPropTypeLocations');\nvar ReactPropTypeLocationNames = require('./ReactPropTypeLocationNames');\nvar ReactNoopUpdateQueue = require('./ReactNoopUpdateQueue');\n\nvar assign = require('./Object.assign');\nvar emptyObject = require('fbjs/lib/emptyObject');\nvar invariant = require('fbjs/lib/invariant');\nvar keyMirror = require('fbjs/lib/keyMirror');\nvar keyOf = require('fbjs/lib/keyOf');\nvar warning = require('fbjs/lib/warning');\n\nvar MIXINS_KEY = keyOf({ mixins: null });\n\n/**\n * Policies that describe methods in `ReactClassInterface`.\n */\nvar SpecPolicy = keyMirror({\n  /**\n   * These methods may be defined only once by the class specification or mixin.\n   */\n  DEFINE_ONCE: null,\n  /**\n   * These methods may be defined by both the class specification and mixins.\n   * Subsequent definitions will be chained. These methods must return void.\n   */\n  DEFINE_MANY: null,\n  /**\n   * These methods are overriding the base class.\n   */\n  OVERRIDE_BASE: null,\n  /**\n   * These methods are similar to DEFINE_MANY, except we assume they return\n   * objects. We try to merge the keys of the return values of all the mixed in\n   * functions. If there is a key conflict we throw.\n   */\n  DEFINE_MANY_MERGED: null\n});\n\nvar injectedMixins = [];\n\nvar warnedSetProps = false;\nfunction warnSetProps() {\n  if (!warnedSetProps) {\n    warnedSetProps = true;\n    process.env.NODE_ENV !== 'production' ? warning(false, 'setProps(...) and replaceProps(...) are deprecated. ' + 'Instead, call render again at the top level.') : undefined;\n  }\n}\n\n/**\n * Composite components are higher-level components that compose other composite\n * or native components.\n *\n * To create a new type of `ReactClass`, pass a specification of\n * your new class to `React.createClass`. The only requirement of your class\n * specification is that you implement a `render` method.\n *\n *   var MyComponent = React.createClass({\n *     render: function() {\n *       return <div>Hello World</div>;\n *     }\n *   });\n *\n * The class specification supports a specific protocol of methods that have\n * special meaning (e.g. `render`). See `ReactClassInterface` for\n * more the comprehensive protocol. Any other properties and methods in the\n * class specification will be available on the prototype.\n *\n * @interface ReactClassInterface\n * @internal\n */\nvar ReactClassInterface = {\n\n  /**\n   * An array of Mixin objects to include when defining your component.\n   *\n   * @type {array}\n   * @optional\n   */\n  mixins: SpecPolicy.DEFINE_MANY,\n\n  /**\n   * An object containing properties and methods that should be defined on\n   * the component's constructor instead of its prototype (static methods).\n   *\n   * @type {object}\n   * @optional\n   */\n  statics: SpecPolicy.DEFINE_MANY,\n\n  /**\n   * Definition of prop types for this component.\n   *\n   * @type {object}\n   * @optional\n   */\n  propTypes: SpecPolicy.DEFINE_MANY,\n\n  /**\n   * Definition of context types for this component.\n   *\n   * @type {object}\n   * @optional\n   */\n  contextTypes: SpecPolicy.DEFINE_MANY,\n\n  /**\n   * Definition of context types this component sets for its children.\n   *\n   * @type {object}\n   * @optional\n   */\n  childContextTypes: SpecPolicy.DEFINE_MANY,\n\n  // ==== Definition methods ====\n\n  /**\n   * Invoked when the component is mounted. Values in the mapping will be set on\n   * `this.props` if that prop is not specified (i.e. using an `in` check).\n   *\n   * This method is invoked before `getInitialState` and therefore cannot rely\n   * on `this.state` or use `this.setState`.\n   *\n   * @return {object}\n   * @optional\n   */\n  getDefaultProps: SpecPolicy.DEFINE_MANY_MERGED,\n\n  /**\n   * Invoked once before the component is mounted. The return value will be used\n   * as the initial value of `this.state`.\n   *\n   *   getInitialState: function() {\n   *     return {\n   *       isOn: false,\n   *       fooBaz: new BazFoo()\n   *     }\n   *   }\n   *\n   * @return {object}\n   * @optional\n   */\n  getInitialState: SpecPolicy.DEFINE_MANY_MERGED,\n\n  /**\n   * @return {object}\n   * @optional\n   */\n  getChildContext: SpecPolicy.DEFINE_MANY_MERGED,\n\n  /**\n   * Uses props from `this.props` and state from `this.state` to render the\n   * structure of the component.\n   *\n   * No guarantees are made about when or how often this method is invoked, so\n   * it must not have side effects.\n   *\n   *   render: function() {\n   *     var name = this.props.name;\n   *     return <div>Hello, {name}!</div>;\n   *   }\n   *\n   * @return {ReactComponent}\n   * @nosideeffects\n   * @required\n   */\n  render: SpecPolicy.DEFINE_ONCE,\n\n  // ==== Delegate methods ====\n\n  /**\n   * Invoked when the component is initially created and about to be mounted.\n   * This may have side effects, but any external subscriptions or data created\n   * by this method must be cleaned up in `componentWillUnmount`.\n   *\n   * @optional\n   */\n  componentWillMount: SpecPolicy.DEFINE_MANY,\n\n  /**\n   * Invoked when the component has been mounted and has a DOM representation.\n   * However, there is no guarantee that the DOM node is in the document.\n   *\n   * Use this as an opportunity to operate on the DOM when the component has\n   * been mounted (initialized and rendered) for the first time.\n   *\n   * @param {DOMElement} rootNode DOM element representing the component.\n   * @optional\n   */\n  componentDidMount: SpecPolicy.DEFINE_MANY,\n\n  /**\n   * Invoked before the component receives new props.\n   *\n   * Use this as an opportunity to react to a prop transition by updating the\n   * state using `this.setState`. Current props are accessed via `this.props`.\n   *\n   *   componentWillReceiveProps: function(nextProps, nextContext) {\n   *     this.setState({\n   *       likesIncreasing: nextProps.likeCount > this.props.likeCount\n   *     });\n   *   }\n   *\n   * NOTE: There is no equivalent `componentWillReceiveState`. An incoming prop\n   * transition may cause a state change, but the opposite is not true. If you\n   * need it, you are probably looking for `componentWillUpdate`.\n   *\n   * @param {object} nextProps\n   * @optional\n   */\n  componentWillReceiveProps: SpecPolicy.DEFINE_MANY,\n\n  /**\n   * Invoked while deciding if the component should be updated as a result of\n   * receiving new props, state and/or context.\n   *\n   * Use this as an opportunity to `return false` when you're certain that the\n   * transition to the new props/state/context will not require a component\n   * update.\n   *\n   *   shouldComponentUpdate: function(nextProps, nextState, nextContext) {\n   *     return !equal(nextProps, this.props) ||\n   *       !equal(nextState, this.state) ||\n   *       !equal(nextContext, this.context);\n   *   }\n   *\n   * @param {object} nextProps\n   * @param {?object} nextState\n   * @param {?object} nextContext\n   * @return {boolean} True if the component should update.\n   * @optional\n   */\n  shouldComponentUpdate: SpecPolicy.DEFINE_ONCE,\n\n  /**\n   * Invoked when the component is about to update due to a transition from\n   * `this.props`, `this.state` and `this.context` to `nextProps`, `nextState`\n   * and `nextContext`.\n   *\n   * Use this as an opportunity to perform preparation before an update occurs.\n   *\n   * NOTE: You **cannot** use `this.setState()` in this method.\n   *\n   * @param {object} nextProps\n   * @param {?object} nextState\n   * @param {?object} nextContext\n   * @param {ReactReconcileTransaction} transaction\n   * @optional\n   */\n  componentWillUpdate: SpecPolicy.DEFINE_MANY,\n\n  /**\n   * Invoked when the component's DOM representation has been updated.\n   *\n   * Use this as an opportunity to operate on the DOM when the component has\n   * been updated.\n   *\n   * @param {object} prevProps\n   * @param {?object} prevState\n   * @param {?object} prevContext\n   * @param {DOMElement} rootNode DOM element representing the component.\n   * @optional\n   */\n  componentDidUpdate: SpecPolicy.DEFINE_MANY,\n\n  /**\n   * Invoked when the component is about to be removed from its parent and have\n   * its DOM representation destroyed.\n   *\n   * Use this as an opportunity to deallocate any external resources.\n   *\n   * NOTE: There is no `componentDidUnmount` since your component will have been\n   * destroyed by that point.\n   *\n   * @optional\n   */\n  componentWillUnmount: SpecPolicy.DEFINE_MANY,\n\n  // ==== Advanced methods ====\n\n  /**\n   * Updates the component's currently mounted DOM representation.\n   *\n   * By default, this implements React's rendering and reconciliation algorithm.\n   * Sophisticated clients may wish to override this.\n   *\n   * @param {ReactReconcileTransaction} transaction\n   * @internal\n   * @overridable\n   */\n  updateComponent: SpecPolicy.OVERRIDE_BASE\n\n};\n\n/**\n * Mapping from class specification keys to special processing functions.\n *\n * Although these are declared like instance properties in the specification\n * when defining classes using `React.createClass`, they are actually static\n * and are accessible on the constructor instead of the prototype. Despite\n * being static, they must be defined outside of the \"statics\" key under\n * which all other static methods are defined.\n */\nvar RESERVED_SPEC_KEYS = {\n  displayName: function (Constructor, displayName) {\n    Constructor.displayName = displayName;\n  },\n  mixins: function (Constructor, mixins) {\n    if (mixins) {\n      for (var i = 0; i < mixins.length; i++) {\n        mixSpecIntoComponent(Constructor, mixins[i]);\n      }\n    }\n  },\n  childContextTypes: function (Constructor, childContextTypes) {\n    if (process.env.NODE_ENV !== 'production') {\n      validateTypeDef(Constructor, childContextTypes, ReactPropTypeLocations.childContext);\n    }\n    Constructor.childContextTypes = assign({}, Constructor.childContextTypes, childContextTypes);\n  },\n  contextTypes: function (Constructor, contextTypes) {\n    if (process.env.NODE_ENV !== 'production') {\n      validateTypeDef(Constructor, contextTypes, ReactPropTypeLocations.context);\n    }\n    Constructor.contextTypes = assign({}, Constructor.contextTypes, contextTypes);\n  },\n  /**\n   * Special case getDefaultProps which should move into statics but requires\n   * automatic merging.\n   */\n  getDefaultProps: function (Constructor, getDefaultProps) {\n    if (Constructor.getDefaultProps) {\n      Constructor.getDefaultProps = createMergedResultFunction(Constructor.getDefaultProps, getDefaultProps);\n    } else {\n      Constructor.getDefaultProps = getDefaultProps;\n    }\n  },\n  propTypes: function (Constructor, propTypes) {\n    if (process.env.NODE_ENV !== 'production') {\n      validateTypeDef(Constructor, propTypes, ReactPropTypeLocations.prop);\n    }\n    Constructor.propTypes = assign({}, Constructor.propTypes, propTypes);\n  },\n  statics: function (Constructor, statics) {\n    mixStaticSpecIntoComponent(Constructor, statics);\n  },\n  autobind: function () {} };\n\n// noop\nfunction validateTypeDef(Constructor, typeDef, location) {\n  for (var propName in typeDef) {\n    if (typeDef.hasOwnProperty(propName)) {\n      // use a warning instead of an invariant so components\n      // don't show up in prod but not in __DEV__\n      process.env.NODE_ENV !== 'production' ? warning(typeof typeDef[propName] === 'function', '%s: %s type `%s` is invalid; it must be a function, usually from ' + 'React.PropTypes.', Constructor.displayName || 'ReactClass', ReactPropTypeLocationNames[location], propName) : undefined;\n    }\n  }\n}\n\nfunction validateMethodOverride(proto, name) {\n  var specPolicy = ReactClassInterface.hasOwnProperty(name) ? ReactClassInterface[name] : null;\n\n  // Disallow overriding of base class methods unless explicitly allowed.\n  if (ReactClassMixin.hasOwnProperty(name)) {\n    !(specPolicy === SpecPolicy.OVERRIDE_BASE) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClassInterface: You are attempting to override ' + '`%s` from your class specification. Ensure that your method names ' + 'do not overlap with React methods.', name) : invariant(false) : undefined;\n  }\n\n  // Disallow defining methods more than once unless explicitly allowed.\n  if (proto.hasOwnProperty(name)) {\n    !(specPolicy === SpecPolicy.DEFINE_MANY || specPolicy === SpecPolicy.DEFINE_MANY_MERGED) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClassInterface: You are attempting to define ' + '`%s` on your component more than once. This conflict may be due ' + 'to a mixin.', name) : invariant(false) : undefined;\n  }\n}\n\n/**\n * Mixin helper which handles policy validation and reserved\n * specification keys when building React classses.\n */\nfunction mixSpecIntoComponent(Constructor, spec) {\n  if (!spec) {\n    return;\n  }\n\n  !(typeof spec !== 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You\\'re attempting to ' + 'use a component class as a mixin. Instead, just use a regular object.') : invariant(false) : undefined;\n  !!ReactElement.isValidElement(spec) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You\\'re attempting to ' + 'use a component as a mixin. Instead, just use a regular object.') : invariant(false) : undefined;\n\n  var proto = Constructor.prototype;\n\n  // By handling mixins before any other properties, we ensure the same\n  // chaining order is applied to methods with DEFINE_MANY policy, whether\n  // mixins are listed before or after these methods in the spec.\n  if (spec.hasOwnProperty(MIXINS_KEY)) {\n    RESERVED_SPEC_KEYS.mixins(Constructor, spec.mixins);\n  }\n\n  for (var name in spec) {\n    if (!spec.hasOwnProperty(name)) {\n      continue;\n    }\n\n    if (name === MIXINS_KEY) {\n      // We have already handled mixins in a special case above.\n      continue;\n    }\n\n    var property = spec[name];\n    validateMethodOverride(proto, name);\n\n    if (RESERVED_SPEC_KEYS.hasOwnProperty(name)) {\n      RESERVED_SPEC_KEYS[name](Constructor, property);\n    } else {\n      // Setup methods on prototype:\n      // The following member methods should not be automatically bound:\n      // 1. Expected ReactClass methods (in the \"interface\").\n      // 2. Overridden methods (that were mixed in).\n      var isReactClassMethod = ReactClassInterface.hasOwnProperty(name);\n      var isAlreadyDefined = proto.hasOwnProperty(name);\n      var isFunction = typeof property === 'function';\n      var shouldAutoBind = isFunction && !isReactClassMethod && !isAlreadyDefined && spec.autobind !== false;\n\n      if (shouldAutoBind) {\n        if (!proto.__reactAutoBindMap) {\n          proto.__reactAutoBindMap = {};\n        }\n        proto.__reactAutoBindMap[name] = property;\n        proto[name] = property;\n      } else {\n        if (isAlreadyDefined) {\n          var specPolicy = ReactClassInterface[name];\n\n          // These cases should already be caught by validateMethodOverride.\n          !(isReactClassMethod && (specPolicy === SpecPolicy.DEFINE_MANY_MERGED || specPolicy === SpecPolicy.DEFINE_MANY)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: Unexpected spec policy %s for key %s ' + 'when mixing in component specs.', specPolicy, name) : invariant(false) : undefined;\n\n          // For methods which are defined more than once, call the existing\n          // methods before calling the new property, merging if appropriate.\n          if (specPolicy === SpecPolicy.DEFINE_MANY_MERGED) {\n            proto[name] = createMergedResultFunction(proto[name], property);\n          } else if (specPolicy === SpecPolicy.DEFINE_MANY) {\n            proto[name] = createChainedFunction(proto[name], property);\n          }\n        } else {\n          proto[name] = property;\n          if (process.env.NODE_ENV !== 'production') {\n            // Add verbose displayName to the function, which helps when looking\n            // at profiling tools.\n            if (typeof property === 'function' && spec.displayName) {\n              proto[name].displayName = spec.displayName + '_' + name;\n            }\n          }\n        }\n      }\n    }\n  }\n}\n\nfunction mixStaticSpecIntoComponent(Constructor, statics) {\n  if (!statics) {\n    return;\n  }\n  for (var name in statics) {\n    var property = statics[name];\n    if (!statics.hasOwnProperty(name)) {\n      continue;\n    }\n\n    var isReserved = (name in RESERVED_SPEC_KEYS);\n    !!isReserved ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You are attempting to define a reserved ' + 'property, `%s`, that shouldn\\'t be on the \"statics\" key. Define it ' + 'as an instance property instead; it will still be accessible on the ' + 'constructor.', name) : invariant(false) : undefined;\n\n    var isInherited = (name in Constructor);\n    !!isInherited ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You are attempting to define ' + '`%s` on your component more than once. This conflict may be ' + 'due to a mixin.', name) : invariant(false) : undefined;\n    Constructor[name] = property;\n  }\n}\n\n/**\n * Merge two objects, but throw if both contain the same key.\n *\n * @param {object} one The first object, which is mutated.\n * @param {object} two The second object\n * @return {object} one after it has been mutated to contain everything in two.\n */\nfunction mergeIntoWithNoDuplicateKeys(one, two) {\n  !(one && two && typeof one === 'object' && typeof two === 'object') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'mergeIntoWithNoDuplicateKeys(): Cannot merge non-objects.') : invariant(false) : undefined;\n\n  for (var key in two) {\n    if (two.hasOwnProperty(key)) {\n      !(one[key] === undefined) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'mergeIntoWithNoDuplicateKeys(): ' + 'Tried to merge two objects with the same key: `%s`. This conflict ' + 'may be due to a mixin; in particular, this may be caused by two ' + 'getInitialState() or getDefaultProps() methods returning objects ' + 'with clashing keys.', key) : invariant(false) : undefined;\n      one[key] = two[key];\n    }\n  }\n  return one;\n}\n\n/**\n * Creates a function that invokes two functions and merges their return values.\n *\n * @param {function} one Function to invoke first.\n * @param {function} two Function to invoke second.\n * @return {function} Function that invokes the two argument functions.\n * @private\n */\nfunction createMergedResultFunction(one, two) {\n  return function mergedResult() {\n    var a = one.apply(this, arguments);\n    var b = two.apply(this, arguments);\n    if (a == null) {\n      return b;\n    } else if (b == null) {\n      return a;\n    }\n    var c = {};\n    mergeIntoWithNoDuplicateKeys(c, a);\n    mergeIntoWithNoDuplicateKeys(c, b);\n    return c;\n  };\n}\n\n/**\n * Creates a function that invokes two functions and ignores their return vales.\n *\n * @param {function} one Function to invoke first.\n * @param {function} two Function to invoke second.\n * @return {function} Function that invokes the two argument functions.\n * @private\n */\nfunction createChainedFunction(one, two) {\n  return function chainedFunction() {\n    one.apply(this, arguments);\n    two.apply(this, arguments);\n  };\n}\n\n/**\n * Binds a method to the component.\n *\n * @param {object} component Component whose method is going to be bound.\n * @param {function} method Method to be bound.\n * @return {function} The bound method.\n */\nfunction bindAutoBindMethod(component, method) {\n  var boundMethod = method.bind(component);\n  if (process.env.NODE_ENV !== 'production') {\n    boundMethod.__reactBoundContext = component;\n    boundMethod.__reactBoundMethod = method;\n    boundMethod.__reactBoundArguments = null;\n    var componentName = component.constructor.displayName;\n    var _bind = boundMethod.bind;\n    /* eslint-disable block-scoped-var, no-undef */\n    boundMethod.bind = function (newThis) {\n      for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        args[_key - 1] = arguments[_key];\n      }\n\n      // User is trying to bind() an autobound method; we effectively will\n      // ignore the value of \"this\" that the user is trying to use, so\n      // let's warn.\n      if (newThis !== component && newThis !== null) {\n        process.env.NODE_ENV !== 'production' ? warning(false, 'bind(): React component methods may only be bound to the ' + 'component instance. See %s', componentName) : undefined;\n      } else if (!args.length) {\n        process.env.NODE_ENV !== 'production' ? warning(false, 'bind(): You are binding a component method to the component. ' + 'React does this for you automatically in a high-performance ' + 'way, so you can safely remove this call. See %s', componentName) : undefined;\n        return boundMethod;\n      }\n      var reboundMethod = _bind.apply(boundMethod, arguments);\n      reboundMethod.__reactBoundContext = component;\n      reboundMethod.__reactBoundMethod = method;\n      reboundMethod.__reactBoundArguments = args;\n      return reboundMethod;\n      /* eslint-enable */\n    };\n  }\n  return boundMethod;\n}\n\n/**\n * Binds all auto-bound methods in a component.\n *\n * @param {object} component Component whose method is going to be bound.\n */\nfunction bindAutoBindMethods(component) {\n  for (var autoBindKey in component.__reactAutoBindMap) {\n    if (component.__reactAutoBindMap.hasOwnProperty(autoBindKey)) {\n      var method = component.__reactAutoBindMap[autoBindKey];\n      component[autoBindKey] = bindAutoBindMethod(component, method);\n    }\n  }\n}\n\n/**\n * Add more to the ReactClass base class. These are all legacy features and\n * therefore not already part of the modern ReactComponent.\n */\nvar ReactClassMixin = {\n\n  /**\n   * TODO: This will be deprecated because state should always keep a consistent\n   * type signature and the only use case for this, is to avoid that.\n   */\n  replaceState: function (newState, callback) {\n    this.updater.enqueueReplaceState(this, newState);\n    if (callback) {\n      this.updater.enqueueCallback(this, callback);\n    }\n  },\n\n  /**\n   * Checks whether or not this composite component is mounted.\n   * @return {boolean} True if mounted, false otherwise.\n   * @protected\n   * @final\n   */\n  isMounted: function () {\n    return this.updater.isMounted(this);\n  },\n\n  /**\n   * Sets a subset of the props.\n   *\n   * @param {object} partialProps Subset of the next props.\n   * @param {?function} callback Called after props are updated.\n   * @final\n   * @public\n   * @deprecated\n   */\n  setProps: function (partialProps, callback) {\n    if (process.env.NODE_ENV !== 'production') {\n      warnSetProps();\n    }\n    this.updater.enqueueSetProps(this, partialProps);\n    if (callback) {\n      this.updater.enqueueCallback(this, callback);\n    }\n  },\n\n  /**\n   * Replace all the props.\n   *\n   * @param {object} newProps Subset of the next props.\n   * @param {?function} callback Called after props are updated.\n   * @final\n   * @public\n   * @deprecated\n   */\n  replaceProps: function (newProps, callback) {\n    if (process.env.NODE_ENV !== 'production') {\n      warnSetProps();\n    }\n    this.updater.enqueueReplaceProps(this, newProps);\n    if (callback) {\n      this.updater.enqueueCallback(this, callback);\n    }\n  }\n};\n\nvar ReactClassComponent = function () {};\nassign(ReactClassComponent.prototype, ReactComponent.prototype, ReactClassMixin);\n\n/**\n * Module for creating composite components.\n *\n * @class ReactClass\n */\nvar ReactClass = {\n\n  /**\n   * Creates a composite component class given a class specification.\n   *\n   * @param {object} spec Class specification (which must define `render`).\n   * @return {function} Component constructor function.\n   * @public\n   */\n  createClass: function (spec) {\n    var Constructor = function (props, context, updater) {\n      // This constructor is overridden by mocks. The argument is used\n      // by mocks to assert on what gets mounted.\n\n      if (process.env.NODE_ENV !== 'production') {\n        process.env.NODE_ENV !== 'production' ? warning(this instanceof Constructor, 'Something is calling a React component directly. Use a factory or ' + 'JSX instead. See: https://fb.me/react-legacyfactory') : undefined;\n      }\n\n      // Wire up auto-binding\n      if (this.__reactAutoBindMap) {\n        bindAutoBindMethods(this);\n      }\n\n      this.props = props;\n      this.context = context;\n      this.refs = emptyObject;\n      this.updater = updater || ReactNoopUpdateQueue;\n\n      this.state = null;\n\n      // ReactClasses doesn't have constructors. Instead, they use the\n      // getInitialState and componentWillMount methods for initialization.\n\n      var initialState = this.getInitialState ? this.getInitialState() : null;\n      if (process.env.NODE_ENV !== 'production') {\n        // We allow auto-mocks to proceed as if they're returning null.\n        if (typeof initialState === 'undefined' && this.getInitialState._isMockFunction) {\n          // This is probably bad practice. Consider warning here and\n          // deprecating this convenience.\n          initialState = null;\n        }\n      }\n      !(typeof initialState === 'object' && !Array.isArray(initialState)) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.getInitialState(): must return an object or null', Constructor.displayName || 'ReactCompositeComponent') : invariant(false) : undefined;\n\n      this.state = initialState;\n    };\n    Constructor.prototype = new ReactClassComponent();\n    Constructor.prototype.constructor = Constructor;\n\n    injectedMixins.forEach(mixSpecIntoComponent.bind(null, Constructor));\n\n    mixSpecIntoComponent(Constructor, spec);\n\n    // Initialize the defaultProps property after all mixins have been merged.\n    if (Constructor.getDefaultProps) {\n      Constructor.defaultProps = Constructor.getDefaultProps();\n    }\n\n    if (process.env.NODE_ENV !== 'production') {\n      // This is a tag to indicate that the use of these method names is ok,\n      // since it's used with createClass. If it's not, then it's likely a\n      // mistake so we'll warn you to use the static property, property\n      // initializer or constructor respectively.\n      if (Constructor.getDefaultProps) {\n        Constructor.getDefaultProps.isReactClassApproved = {};\n      }\n      if (Constructor.prototype.getInitialState) {\n        Constructor.prototype.getInitialState.isReactClassApproved = {};\n      }\n    }\n\n    !Constructor.prototype.render ? process.env.NODE_ENV !== 'production' ? invariant(false, 'createClass(...): Class specification must implement a `render` method.') : invariant(false) : undefined;\n\n    if (process.env.NODE_ENV !== 'production') {\n      process.env.NODE_ENV !== 'production' ? warning(!Constructor.prototype.componentShouldUpdate, '%s has a method called ' + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 'The name is phrased as a question because the function is ' + 'expected to return a value.', spec.displayName || 'A component') : undefined;\n      process.env.NODE_ENV !== 'production' ? warning(!Constructor.prototype.componentWillRecieveProps, '%s has a method called ' + 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?', spec.displayName || 'A component') : undefined;\n    }\n\n    // Reduce time spent doing lookups by setting these on the prototype.\n    for (var methodName in ReactClassInterface) {\n      if (!Constructor.prototype[methodName]) {\n        Constructor.prototype[methodName] = null;\n      }\n    }\n\n    return Constructor;\n  },\n\n  injection: {\n    injectMixin: function (mixin) {\n      injectedMixins.push(mixin);\n    }\n  }\n\n};\n\nmodule.exports = ReactClass;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactClass.js\n ** module id = 124\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactComponent\n */\n\n'use strict';\n\nvar ReactNoopUpdateQueue = require('./ReactNoopUpdateQueue');\n\nvar canDefineProperty = require('./canDefineProperty');\nvar emptyObject = require('fbjs/lib/emptyObject');\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\n/**\n * Base class helpers for the updating state of a component.\n */\nfunction ReactComponent(props, context, updater) {\n  this.props = props;\n  this.context = context;\n  this.refs = emptyObject;\n  // We initialize the default updater but the real one gets injected by the\n  // renderer.\n  this.updater = updater || ReactNoopUpdateQueue;\n}\n\nReactComponent.prototype.isReactComponent = {};\n\n/**\n * Sets a subset of the state. Always use this to mutate\n * state. You should treat `this.state` as immutable.\n *\n * There is no guarantee that `this.state` will be immediately updated, so\n * accessing `this.state` after calling this method may return the old value.\n *\n * There is no guarantee that calls to `setState` will run synchronously,\n * as they may eventually be batched together.  You can provide an optional\n * callback that will be executed when the call to setState is actually\n * completed.\n *\n * When a function is provided to setState, it will be called at some point in\n * the future (not synchronously). It will be called with the up to date\n * component arguments (state, props, context). These values can be different\n * from this.* because your function may be called after receiveProps but before\n * shouldComponentUpdate, and this new state, props, and context will not yet be\n * assigned to this.\n *\n * @param {object|function} partialState Next partial state or function to\n *        produce next partial state to be merged with current state.\n * @param {?function} callback Called after state is updated.\n * @final\n * @protected\n */\nReactComponent.prototype.setState = function (partialState, callback) {\n  !(typeof partialState === 'object' || typeof partialState === 'function' || partialState == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'setState(...): takes an object of state variables to update or a ' + 'function which returns an object of state variables.') : invariant(false) : undefined;\n  if (process.env.NODE_ENV !== 'production') {\n    process.env.NODE_ENV !== 'production' ? warning(partialState != null, 'setState(...): You passed an undefined or null state object; ' + 'instead, use forceUpdate().') : undefined;\n  }\n  this.updater.enqueueSetState(this, partialState);\n  if (callback) {\n    this.updater.enqueueCallback(this, callback);\n  }\n};\n\n/**\n * Forces an update. This should only be invoked when it is known with\n * certainty that we are **not** in a DOM transaction.\n *\n * You may want to call this when you know that some deeper aspect of the\n * component's state has changed but `setState` was not called.\n *\n * This will not invoke `shouldComponentUpdate`, but it will invoke\n * `componentWillUpdate` and `componentDidUpdate`.\n *\n * @param {?function} callback Called after update is complete.\n * @final\n * @protected\n */\nReactComponent.prototype.forceUpdate = function (callback) {\n  this.updater.enqueueForceUpdate(this);\n  if (callback) {\n    this.updater.enqueueCallback(this, callback);\n  }\n};\n\n/**\n * Deprecated APIs. These APIs used to exist on classic React classes but since\n * we would like to deprecate them, we're not going to move them over to this\n * modern base class. Instead, we define a getter that warns if it's accessed.\n */\nif (process.env.NODE_ENV !== 'production') {\n  var deprecatedAPIs = {\n    getDOMNode: ['getDOMNode', 'Use ReactDOM.findDOMNode(component) instead.'],\n    isMounted: ['isMounted', 'Instead, make sure to clean up subscriptions and pending requests in ' + 'componentWillUnmount to prevent memory leaks.'],\n    replaceProps: ['replaceProps', 'Instead, call render again at the top level.'],\n    replaceState: ['replaceState', 'Refactor your code to use setState instead (see ' + 'https://github.com/facebook/react/issues/3236).'],\n    setProps: ['setProps', 'Instead, call render again at the top level.']\n  };\n  var defineDeprecationWarning = function (methodName, info) {\n    if (canDefineProperty) {\n      Object.defineProperty(ReactComponent.prototype, methodName, {\n        get: function () {\n          process.env.NODE_ENV !== 'production' ? warning(false, '%s(...) is deprecated in plain JavaScript React classes. %s', info[0], info[1]) : undefined;\n          return undefined;\n        }\n      });\n    }\n  };\n  for (var fnName in deprecatedAPIs) {\n    if (deprecatedAPIs.hasOwnProperty(fnName)) {\n      defineDeprecationWarning(fnName, deprecatedAPIs[fnName]);\n    }\n  }\n}\n\nmodule.exports = ReactComponent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactComponent.js\n ** module id = 125\n ** module chunks = 4\n **/","/**\n * Copyright 2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactNoopUpdateQueue\n */\n\n'use strict';\n\nvar warning = require('fbjs/lib/warning');\n\nfunction warnTDZ(publicInstance, callerName) {\n  if (process.env.NODE_ENV !== 'production') {\n    process.env.NODE_ENV !== 'production' ? warning(false, '%s(...): Can only update a mounted or mounting component. ' + 'This usually means you called %s() on an unmounted component. ' + 'This is a no-op. Please check the code for the %s component.', callerName, callerName, publicInstance.constructor && publicInstance.constructor.displayName || '') : undefined;\n  }\n}\n\n/**\n * This is the abstract API for an update queue.\n */\nvar ReactNoopUpdateQueue = {\n\n  /**\n   * Checks whether or not this composite component is mounted.\n   * @param {ReactClass} publicInstance The instance we want to test.\n   * @return {boolean} True if mounted, false otherwise.\n   * @protected\n   * @final\n   */\n  isMounted: function (publicInstance) {\n    return false;\n  },\n\n  /**\n   * Enqueue a callback that will be executed after all the pending updates\n   * have processed.\n   *\n   * @param {ReactClass} publicInstance The instance to use as `this` context.\n   * @param {?function} callback Called after state is updated.\n   * @internal\n   */\n  enqueueCallback: function (publicInstance, callback) {},\n\n  /**\n   * Forces an update. This should only be invoked when it is known with\n   * certainty that we are **not** in a DOM transaction.\n   *\n   * You may want to call this when you know that some deeper aspect of the\n   * component's state has changed but `setState` was not called.\n   *\n   * This will not invoke `shouldComponentUpdate`, but it will invoke\n   * `componentWillUpdate` and `componentDidUpdate`.\n   *\n   * @param {ReactClass} publicInstance The instance that should rerender.\n   * @internal\n   */\n  enqueueForceUpdate: function (publicInstance) {\n    warnTDZ(publicInstance, 'forceUpdate');\n  },\n\n  /**\n   * Replaces all of the state. Always use this or `setState` to mutate state.\n   * You should treat `this.state` as immutable.\n   *\n   * There is no guarantee that `this.state` will be immediately updated, so\n   * accessing `this.state` after calling this method may return the old value.\n   *\n   * @param {ReactClass} publicInstance The instance that should rerender.\n   * @param {object} completeState Next state.\n   * @internal\n   */\n  enqueueReplaceState: function (publicInstance, completeState) {\n    warnTDZ(publicInstance, 'replaceState');\n  },\n\n  /**\n   * Sets a subset of the state. This only exists because _pendingState is\n   * internal. This provides a merging strategy that is not available to deep\n   * properties which is confusing. TODO: Expose pendingState or don't use it\n   * during the merge.\n   *\n   * @param {ReactClass} publicInstance The instance that should rerender.\n   * @param {object} partialState Next partial state to be merged with state.\n   * @internal\n   */\n  enqueueSetState: function (publicInstance, partialState) {\n    warnTDZ(publicInstance, 'setState');\n  },\n\n  /**\n   * Sets a subset of the props.\n   *\n   * @param {ReactClass} publicInstance The instance that should rerender.\n   * @param {object} partialProps Subset of the next props.\n   * @internal\n   */\n  enqueueSetProps: function (publicInstance, partialProps) {\n    warnTDZ(publicInstance, 'setProps');\n  },\n\n  /**\n   * Replaces all of the props.\n   *\n   * @param {ReactClass} publicInstance The instance that should rerender.\n   * @param {object} props New props.\n   * @internal\n   */\n  enqueueReplaceProps: function (publicInstance, props) {\n    warnTDZ(publicInstance, 'replaceProps');\n  }\n\n};\n\nmodule.exports = ReactNoopUpdateQueue;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactNoopUpdateQueue.js\n ** module id = 126\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactReconcileTransaction\n * @typechecks static-only\n */\n\n'use strict';\n\nvar CallbackQueue = require('./CallbackQueue');\nvar PooledClass = require('./PooledClass');\nvar ReactBrowserEventEmitter = require('./ReactBrowserEventEmitter');\nvar ReactDOMFeatureFlags = require('./ReactDOMFeatureFlags');\nvar ReactInputSelection = require('./ReactInputSelection');\nvar Transaction = require('./Transaction');\n\nvar assign = require('./Object.assign');\n\n/**\n * Ensures that, when possible, the selection range (currently selected text\n * input) is not disturbed by performing the transaction.\n */\nvar SELECTION_RESTORATION = {\n  /**\n   * @return {Selection} Selection information.\n   */\n  initialize: ReactInputSelection.getSelectionInformation,\n  /**\n   * @param {Selection} sel Selection information returned from `initialize`.\n   */\n  close: ReactInputSelection.restoreSelection\n};\n\n/**\n * Suppresses events (blur/focus) that could be inadvertently dispatched due to\n * high level DOM manipulations (like temporarily removing a text input from the\n * DOM).\n */\nvar EVENT_SUPPRESSION = {\n  /**\n   * @return {boolean} The enabled status of `ReactBrowserEventEmitter` before\n   * the reconciliation.\n   */\n  initialize: function () {\n    var currentlyEnabled = ReactBrowserEventEmitter.isEnabled();\n    ReactBrowserEventEmitter.setEnabled(false);\n    return currentlyEnabled;\n  },\n\n  /**\n   * @param {boolean} previouslyEnabled Enabled status of\n   *   `ReactBrowserEventEmitter` before the reconciliation occurred. `close`\n   *   restores the previous value.\n   */\n  close: function (previouslyEnabled) {\n    ReactBrowserEventEmitter.setEnabled(previouslyEnabled);\n  }\n};\n\n/**\n * Provides a queue for collecting `componentDidMount` and\n * `componentDidUpdate` callbacks during the the transaction.\n */\nvar ON_DOM_READY_QUEUEING = {\n  /**\n   * Initializes the internal `onDOMReady` queue.\n   */\n  initialize: function () {\n    this.reactMountReady.reset();\n  },\n\n  /**\n   * After DOM is flushed, invoke all registered `onDOMReady` callbacks.\n   */\n  close: function () {\n    this.reactMountReady.notifyAll();\n  }\n};\n\n/**\n * Executed within the scope of the `Transaction` instance. Consider these as\n * being member methods, but with an implied ordering while being isolated from\n * each other.\n */\nvar TRANSACTION_WRAPPERS = [SELECTION_RESTORATION, EVENT_SUPPRESSION, ON_DOM_READY_QUEUEING];\n\n/**\n * Currently:\n * - The order that these are listed in the transaction is critical:\n * - Suppresses events.\n * - Restores selection range.\n *\n * Future:\n * - Restore document/overflow scroll positions that were unintentionally\n *   modified via DOM insertions above the top viewport boundary.\n * - Implement/integrate with customized constraint based layout system and keep\n *   track of which dimensions must be remeasured.\n *\n * @class ReactReconcileTransaction\n */\nfunction ReactReconcileTransaction(forceHTML) {\n  this.reinitializeTransaction();\n  // Only server-side rendering really needs this option (see\n  // `ReactServerRendering`), but server-side uses\n  // `ReactServerRenderingTransaction` instead. This option is here so that it's\n  // accessible and defaults to false when `ReactDOMComponent` and\n  // `ReactTextComponent` checks it in `mountComponent`.`\n  this.renderToStaticMarkup = false;\n  this.reactMountReady = CallbackQueue.getPooled(null);\n  this.useCreateElement = !forceHTML && ReactDOMFeatureFlags.useCreateElement;\n}\n\nvar Mixin = {\n  /**\n   * @see Transaction\n   * @abstract\n   * @final\n   * @return {array<object>} List of operation wrap procedures.\n   *   TODO: convert to array<TransactionWrapper>\n   */\n  getTransactionWrappers: function () {\n    return TRANSACTION_WRAPPERS;\n  },\n\n  /**\n   * @return {object} The queue to collect `onDOMReady` callbacks with.\n   */\n  getReactMountReady: function () {\n    return this.reactMountReady;\n  },\n\n  /**\n   * `PooledClass` looks for this, and will invoke this before allowing this\n   * instance to be reused.\n   */\n  destructor: function () {\n    CallbackQueue.release(this.reactMountReady);\n    this.reactMountReady = null;\n  }\n};\n\nassign(ReactReconcileTransaction.prototype, Transaction.Mixin, Mixin);\n\nPooledClass.addPoolingTo(ReactReconcileTransaction);\n\nmodule.exports = ReactReconcileTransaction;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactReconcileTransaction.js\n ** module id = 127\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactInputSelection\n */\n\n'use strict';\n\nvar ReactDOMSelection = require('./ReactDOMSelection');\n\nvar containsNode = require('fbjs/lib/containsNode');\nvar focusNode = require('fbjs/lib/focusNode');\nvar getActiveElement = require('fbjs/lib/getActiveElement');\n\nfunction isInDocument(node) {\n  return containsNode(document.documentElement, node);\n}\n\n/**\n * @ReactInputSelection: React input selection module. Based on Selection.js,\n * but modified to be suitable for react and has a couple of bug fixes (doesn't\n * assume buttons have range selections allowed).\n * Input selection module for React.\n */\nvar ReactInputSelection = {\n\n  hasSelectionCapabilities: function (elem) {\n    var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n    return nodeName && (nodeName === 'input' && elem.type === 'text' || nodeName === 'textarea' || elem.contentEditable === 'true');\n  },\n\n  getSelectionInformation: function () {\n    var focusedElem = getActiveElement();\n    return {\n      focusedElem: focusedElem,\n      selectionRange: ReactInputSelection.hasSelectionCapabilities(focusedElem) ? ReactInputSelection.getSelection(focusedElem) : null\n    };\n  },\n\n  /**\n   * @restoreSelection: If any selection information was potentially lost,\n   * restore it. This is useful when performing operations that could remove dom\n   * nodes and place them back in, resulting in focus being lost.\n   */\n  restoreSelection: function (priorSelectionInformation) {\n    var curFocusedElem = getActiveElement();\n    var priorFocusedElem = priorSelectionInformation.focusedElem;\n    var priorSelectionRange = priorSelectionInformation.selectionRange;\n    if (curFocusedElem !== priorFocusedElem && isInDocument(priorFocusedElem)) {\n      if (ReactInputSelection.hasSelectionCapabilities(priorFocusedElem)) {\n        ReactInputSelection.setSelection(priorFocusedElem, priorSelectionRange);\n      }\n      focusNode(priorFocusedElem);\n    }\n  },\n\n  /**\n   * @getSelection: Gets the selection bounds of a focused textarea, input or\n   * contentEditable node.\n   * -@input: Look up selection bounds of this input\n   * -@return {start: selectionStart, end: selectionEnd}\n   */\n  getSelection: function (input) {\n    var selection;\n\n    if ('selectionStart' in input) {\n      // Modern browser with input or textarea.\n      selection = {\n        start: input.selectionStart,\n        end: input.selectionEnd\n      };\n    } else if (document.selection && (input.nodeName && input.nodeName.toLowerCase() === 'input')) {\n      // IE8 input.\n      var range = document.selection.createRange();\n      // There can only be one selection per document in IE, so it must\n      // be in our element.\n      if (range.parentElement() === input) {\n        selection = {\n          start: -range.moveStart('character', -input.value.length),\n          end: -range.moveEnd('character', -input.value.length)\n        };\n      }\n    } else {\n      // Content editable or old IE textarea.\n      selection = ReactDOMSelection.getOffsets(input);\n    }\n\n    return selection || { start: 0, end: 0 };\n  },\n\n  /**\n   * @setSelection: Sets the selection bounds of a textarea or input and focuses\n   * the input.\n   * -@input     Set selection bounds of this input or textarea\n   * -@offsets   Object of same form that is returned from get*\n   */\n  setSelection: function (input, offsets) {\n    var start = offsets.start;\n    var end = offsets.end;\n    if (typeof end === 'undefined') {\n      end = start;\n    }\n\n    if ('selectionStart' in input) {\n      input.selectionStart = start;\n      input.selectionEnd = Math.min(end, input.value.length);\n    } else if (document.selection && (input.nodeName && input.nodeName.toLowerCase() === 'input')) {\n      var range = input.createTextRange();\n      range.collapse(true);\n      range.moveStart('character', start);\n      range.moveEnd('character', end - start);\n      range.select();\n    } else {\n      ReactDOMSelection.setOffsets(input, offsets);\n    }\n  }\n};\n\nmodule.exports = ReactInputSelection;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactInputSelection.js\n ** module id = 128\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMSelection\n */\n\n'use strict';\n\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\n\nvar getNodeForCharacterOffset = require('./getNodeForCharacterOffset');\nvar getTextContentAccessor = require('./getTextContentAccessor');\n\n/**\n * While `isCollapsed` is available on the Selection object and `collapsed`\n * is available on the Range object, IE11 sometimes gets them wrong.\n * If the anchor/focus nodes and offsets are the same, the range is collapsed.\n */\nfunction isCollapsed(anchorNode, anchorOffset, focusNode, focusOffset) {\n  return anchorNode === focusNode && anchorOffset === focusOffset;\n}\n\n/**\n * Get the appropriate anchor and focus node/offset pairs for IE.\n *\n * The catch here is that IE's selection API doesn't provide information\n * about whether the selection is forward or backward, so we have to\n * behave as though it's always forward.\n *\n * IE text differs from modern selection in that it behaves as though\n * block elements end with a new line. This means character offsets will\n * differ between the two APIs.\n *\n * @param {DOMElement} node\n * @return {object}\n */\nfunction getIEOffsets(node) {\n  var selection = document.selection;\n  var selectedRange = selection.createRange();\n  var selectedLength = selectedRange.text.length;\n\n  // Duplicate selection so we can move range without breaking user selection.\n  var fromStart = selectedRange.duplicate();\n  fromStart.moveToElementText(node);\n  fromStart.setEndPoint('EndToStart', selectedRange);\n\n  var startOffset = fromStart.text.length;\n  var endOffset = startOffset + selectedLength;\n\n  return {\n    start: startOffset,\n    end: endOffset\n  };\n}\n\n/**\n * @param {DOMElement} node\n * @return {?object}\n */\nfunction getModernOffsets(node) {\n  var selection = window.getSelection && window.getSelection();\n\n  if (!selection || selection.rangeCount === 0) {\n    return null;\n  }\n\n  var anchorNode = selection.anchorNode;\n  var anchorOffset = selection.anchorOffset;\n  var focusNode = selection.focusNode;\n  var focusOffset = selection.focusOffset;\n\n  var currentRange = selection.getRangeAt(0);\n\n  // In Firefox, range.startContainer and range.endContainer can be \"anonymous\n  // divs\", e.g. the up/down buttons on an <input type=\"number\">. Anonymous\n  // divs do not seem to expose properties, triggering a \"Permission denied\n  // error\" if any of its properties are accessed. The only seemingly possible\n  // way to avoid erroring is to access a property that typically works for\n  // non-anonymous divs and catch any error that may otherwise arise. See\n  // https://bugzilla.mozilla.org/show_bug.cgi?id=208427\n  try {\n    /* eslint-disable no-unused-expressions */\n    currentRange.startContainer.nodeType;\n    currentRange.endContainer.nodeType;\n    /* eslint-enable no-unused-expressions */\n  } catch (e) {\n    return null;\n  }\n\n  // If the node and offset values are the same, the selection is collapsed.\n  // `Selection.isCollapsed` is available natively, but IE sometimes gets\n  // this value wrong.\n  var isSelectionCollapsed = isCollapsed(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n  var rangeLength = isSelectionCollapsed ? 0 : currentRange.toString().length;\n\n  var tempRange = currentRange.cloneRange();\n  tempRange.selectNodeContents(node);\n  tempRange.setEnd(currentRange.startContainer, currentRange.startOffset);\n\n  var isTempRangeCollapsed = isCollapsed(tempRange.startContainer, tempRange.startOffset, tempRange.endContainer, tempRange.endOffset);\n\n  var start = isTempRangeCollapsed ? 0 : tempRange.toString().length;\n  var end = start + rangeLength;\n\n  // Detect whether the selection is backward.\n  var detectionRange = document.createRange();\n  detectionRange.setStart(anchorNode, anchorOffset);\n  detectionRange.setEnd(focusNode, focusOffset);\n  var isBackward = detectionRange.collapsed;\n\n  return {\n    start: isBackward ? end : start,\n    end: isBackward ? start : end\n  };\n}\n\n/**\n * @param {DOMElement|DOMTextNode} node\n * @param {object} offsets\n */\nfunction setIEOffsets(node, offsets) {\n  var range = document.selection.createRange().duplicate();\n  var start, end;\n\n  if (typeof offsets.end === 'undefined') {\n    start = offsets.start;\n    end = start;\n  } else if (offsets.start > offsets.end) {\n    start = offsets.end;\n    end = offsets.start;\n  } else {\n    start = offsets.start;\n    end = offsets.end;\n  }\n\n  range.moveToElementText(node);\n  range.moveStart('character', start);\n  range.setEndPoint('EndToStart', range);\n  range.moveEnd('character', end - start);\n  range.select();\n}\n\n/**\n * In modern non-IE browsers, we can support both forward and backward\n * selections.\n *\n * Note: IE10+ supports the Selection object, but it does not support\n * the `extend` method, which means that even in modern IE, it's not possible\n * to programatically create a backward selection. Thus, for all IE\n * versions, we use the old IE API to create our selections.\n *\n * @param {DOMElement|DOMTextNode} node\n * @param {object} offsets\n */\nfunction setModernOffsets(node, offsets) {\n  if (!window.getSelection) {\n    return;\n  }\n\n  var selection = window.getSelection();\n  var length = node[getTextContentAccessor()].length;\n  var start = Math.min(offsets.start, length);\n  var end = typeof offsets.end === 'undefined' ? start : Math.min(offsets.end, length);\n\n  // IE 11 uses modern selection, but doesn't support the extend method.\n  // Flip backward selections, so we can set with a single range.\n  if (!selection.extend && start > end) {\n    var temp = end;\n    end = start;\n    start = temp;\n  }\n\n  var startMarker = getNodeForCharacterOffset(node, start);\n  var endMarker = getNodeForCharacterOffset(node, end);\n\n  if (startMarker && endMarker) {\n    var range = document.createRange();\n    range.setStart(startMarker.node, startMarker.offset);\n    selection.removeAllRanges();\n\n    if (start > end) {\n      selection.addRange(range);\n      selection.extend(endMarker.node, endMarker.offset);\n    } else {\n      range.setEnd(endMarker.node, endMarker.offset);\n      selection.addRange(range);\n    }\n  }\n}\n\nvar useIEOffsets = ExecutionEnvironment.canUseDOM && 'selection' in document && !('getSelection' in window);\n\nvar ReactDOMSelection = {\n  /**\n   * @param {DOMElement} node\n   */\n  getOffsets: useIEOffsets ? getIEOffsets : getModernOffsets,\n\n  /**\n   * @param {DOMElement|DOMTextNode} node\n   * @param {object} offsets\n   */\n  setOffsets: useIEOffsets ? setIEOffsets : setModernOffsets\n};\n\nmodule.exports = ReactDOMSelection;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMSelection.js\n ** module id = 129\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getNodeForCharacterOffset\n */\n\n'use strict';\n\n/**\n * Given any node return the first leaf node without children.\n *\n * @param {DOMElement|DOMTextNode} node\n * @return {DOMElement|DOMTextNode}\n */\nfunction getLeafNode(node) {\n  while (node && node.firstChild) {\n    node = node.firstChild;\n  }\n  return node;\n}\n\n/**\n * Get the next sibling within a container. This will walk up the\n * DOM if a node's siblings have been exhausted.\n *\n * @param {DOMElement|DOMTextNode} node\n * @return {?DOMElement|DOMTextNode}\n */\nfunction getSiblingNode(node) {\n  while (node) {\n    if (node.nextSibling) {\n      return node.nextSibling;\n    }\n    node = node.parentNode;\n  }\n}\n\n/**\n * Get object describing the nodes which contain characters at offset.\n *\n * @param {DOMElement|DOMTextNode} root\n * @param {number} offset\n * @return {?object}\n */\nfunction getNodeForCharacterOffset(root, offset) {\n  var node = getLeafNode(root);\n  var nodeStart = 0;\n  var nodeEnd = 0;\n\n  while (node) {\n    if (node.nodeType === 3) {\n      nodeEnd = nodeStart + node.textContent.length;\n\n      if (nodeStart <= offset && nodeEnd >= offset) {\n        return {\n          node: node,\n          offset: offset - nodeStart\n        };\n      }\n\n      nodeStart = nodeEnd;\n    }\n\n    node = getLeafNode(getSiblingNode(node));\n  }\n}\n\nmodule.exports = getNodeForCharacterOffset;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/getNodeForCharacterOffset.js\n ** module id = 130\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getActiveElement\n * @typechecks\n */\n\n/**\n * Same as document.activeElement but wraps in a try-catch block. In IE it is\n * not safe to call document.activeElement if there is nothing focused.\n *\n * The activeElement will be null only if the document or document body is not yet defined.\n */\n'use strict';\n\nfunction getActiveElement() /*?DOMElement*/{\n  if (typeof document === 'undefined') {\n    return null;\n  }\n\n  try {\n    return document.activeElement || document.body;\n  } catch (e) {\n    return document.body;\n  }\n}\n\nmodule.exports = getActiveElement;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/fbjs/lib/getActiveElement.js\n ** module id = 131\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SelectEventPlugin\n */\n\n'use strict';\n\nvar EventConstants = require('./EventConstants');\nvar EventPropagators = require('./EventPropagators');\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\nvar ReactInputSelection = require('./ReactInputSelection');\nvar SyntheticEvent = require('./SyntheticEvent');\n\nvar getActiveElement = require('fbjs/lib/getActiveElement');\nvar isTextInputElement = require('./isTextInputElement');\nvar keyOf = require('fbjs/lib/keyOf');\nvar shallowEqual = require('fbjs/lib/shallowEqual');\n\nvar topLevelTypes = EventConstants.topLevelTypes;\n\nvar skipSelectionChangeEvent = ExecutionEnvironment.canUseDOM && 'documentMode' in document && document.documentMode <= 11;\n\nvar eventTypes = {\n  select: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onSelect: null }),\n      captured: keyOf({ onSelectCapture: null })\n    },\n    dependencies: [topLevelTypes.topBlur, topLevelTypes.topContextMenu, topLevelTypes.topFocus, topLevelTypes.topKeyDown, topLevelTypes.topMouseDown, topLevelTypes.topMouseUp, topLevelTypes.topSelectionChange]\n  }\n};\n\nvar activeElement = null;\nvar activeElementID = null;\nvar lastSelection = null;\nvar mouseDown = false;\n\n// Track whether a listener exists for this plugin. If none exist, we do\n// not extract events.\nvar hasListener = false;\nvar ON_SELECT_KEY = keyOf({ onSelect: null });\n\n/**\n * Get an object which is a unique representation of the current selection.\n *\n * The return value will not be consistent across nodes or browsers, but\n * two identical selections on the same node will return identical objects.\n *\n * @param {DOMElement} node\n * @return {object}\n */\nfunction getSelection(node) {\n  if ('selectionStart' in node && ReactInputSelection.hasSelectionCapabilities(node)) {\n    return {\n      start: node.selectionStart,\n      end: node.selectionEnd\n    };\n  } else if (window.getSelection) {\n    var selection = window.getSelection();\n    return {\n      anchorNode: selection.anchorNode,\n      anchorOffset: selection.anchorOffset,\n      focusNode: selection.focusNode,\n      focusOffset: selection.focusOffset\n    };\n  } else if (document.selection) {\n    var range = document.selection.createRange();\n    return {\n      parentElement: range.parentElement(),\n      text: range.text,\n      top: range.boundingTop,\n      left: range.boundingLeft\n    };\n  }\n}\n\n/**\n * Poll selection to see whether it's changed.\n *\n * @param {object} nativeEvent\n * @return {?SyntheticEvent}\n */\nfunction constructSelectEvent(nativeEvent, nativeEventTarget) {\n  // Ensure we have the right element, and that the user is not dragging a\n  // selection (this matches native `select` event behavior). In HTML5, select\n  // fires only on input and textarea thus if there's no focused element we\n  // won't dispatch.\n  if (mouseDown || activeElement == null || activeElement !== getActiveElement()) {\n    return null;\n  }\n\n  // Only fire when selection has actually changed.\n  var currentSelection = getSelection(activeElement);\n  if (!lastSelection || !shallowEqual(lastSelection, currentSelection)) {\n    lastSelection = currentSelection;\n\n    var syntheticEvent = SyntheticEvent.getPooled(eventTypes.select, activeElementID, nativeEvent, nativeEventTarget);\n\n    syntheticEvent.type = 'select';\n    syntheticEvent.target = activeElement;\n\n    EventPropagators.accumulateTwoPhaseDispatches(syntheticEvent);\n\n    return syntheticEvent;\n  }\n\n  return null;\n}\n\n/**\n * This plugin creates an `onSelect` event that normalizes select events\n * across form elements.\n *\n * Supported elements are:\n * - input (see `isTextInputElement`)\n * - textarea\n * - contentEditable\n *\n * This differs from native browser implementations in the following ways:\n * - Fires on contentEditable fields as well as inputs.\n * - Fires for collapsed selection.\n * - Fires after user input.\n */\nvar SelectEventPlugin = {\n\n  eventTypes: eventTypes,\n\n  /**\n   * @param {string} topLevelType Record from `EventConstants`.\n   * @param {DOMEventTarget} topLevelTarget The listening component root node.\n   * @param {string} topLevelTargetID ID of `topLevelTarget`.\n   * @param {object} nativeEvent Native browser event.\n   * @return {*} An accumulation of synthetic events.\n   * @see {EventPluginHub.extractEvents}\n   */\n  extractEvents: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) {\n    if (!hasListener) {\n      return null;\n    }\n\n    switch (topLevelType) {\n      // Track the input node that has focus.\n      case topLevelTypes.topFocus:\n        if (isTextInputElement(topLevelTarget) || topLevelTarget.contentEditable === 'true') {\n          activeElement = topLevelTarget;\n          activeElementID = topLevelTargetID;\n          lastSelection = null;\n        }\n        break;\n      case topLevelTypes.topBlur:\n        activeElement = null;\n        activeElementID = null;\n        lastSelection = null;\n        break;\n\n      // Don't fire the event while the user is dragging. This matches the\n      // semantics of the native select event.\n      case topLevelTypes.topMouseDown:\n        mouseDown = true;\n        break;\n      case topLevelTypes.topContextMenu:\n      case topLevelTypes.topMouseUp:\n        mouseDown = false;\n        return constructSelectEvent(nativeEvent, nativeEventTarget);\n\n      // Chrome and IE fire non-standard event when selection is changed (and\n      // sometimes when it hasn't). IE's event fires out of order with respect\n      // to key and input events on deletion, so we discard it.\n      //\n      // Firefox doesn't support selectionchange, so check selection status\n      // after each key entry. The selection changes after keydown and before\n      // keyup, but we check on keydown as well in the case of holding down a\n      // key, when multiple keydown events are fired but only one keyup is.\n      // This is also our approach for IE handling, for the reason above.\n      case topLevelTypes.topSelectionChange:\n        if (skipSelectionChangeEvent) {\n          break;\n        }\n      // falls through\n      case topLevelTypes.topKeyDown:\n      case topLevelTypes.topKeyUp:\n        return constructSelectEvent(nativeEvent, nativeEventTarget);\n    }\n\n    return null;\n  },\n\n  didPutListener: function (id, registrationName, listener) {\n    if (registrationName === ON_SELECT_KEY) {\n      hasListener = true;\n    }\n  }\n};\n\nmodule.exports = SelectEventPlugin;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SelectEventPlugin.js\n ** module id = 132\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ServerReactRootIndex\n * @typechecks\n */\n\n'use strict';\n\n/**\n * Size of the reactRoot ID space. We generate random numbers for React root\n * IDs and if there's a collision the events and DOM update system will\n * get confused. In the future we need a way to generate GUIDs but for\n * now this will work on a smaller scale.\n */\nvar GLOBAL_MOUNT_POINT_MAX = Math.pow(2, 53);\n\nvar ServerReactRootIndex = {\n  createReactRootIndex: function () {\n    return Math.ceil(Math.random() * GLOBAL_MOUNT_POINT_MAX);\n  }\n};\n\nmodule.exports = ServerReactRootIndex;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ServerReactRootIndex.js\n ** module id = 133\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SimpleEventPlugin\n */\n\n'use strict';\n\nvar EventConstants = require('./EventConstants');\nvar EventListener = require('fbjs/lib/EventListener');\nvar EventPropagators = require('./EventPropagators');\nvar ReactMount = require('./ReactMount');\nvar SyntheticClipboardEvent = require('./SyntheticClipboardEvent');\nvar SyntheticEvent = require('./SyntheticEvent');\nvar SyntheticFocusEvent = require('./SyntheticFocusEvent');\nvar SyntheticKeyboardEvent = require('./SyntheticKeyboardEvent');\nvar SyntheticMouseEvent = require('./SyntheticMouseEvent');\nvar SyntheticDragEvent = require('./SyntheticDragEvent');\nvar SyntheticTouchEvent = require('./SyntheticTouchEvent');\nvar SyntheticUIEvent = require('./SyntheticUIEvent');\nvar SyntheticWheelEvent = require('./SyntheticWheelEvent');\n\nvar emptyFunction = require('fbjs/lib/emptyFunction');\nvar getEventCharCode = require('./getEventCharCode');\nvar invariant = require('fbjs/lib/invariant');\nvar keyOf = require('fbjs/lib/keyOf');\n\nvar topLevelTypes = EventConstants.topLevelTypes;\n\nvar eventTypes = {\n  abort: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onAbort: true }),\n      captured: keyOf({ onAbortCapture: true })\n    }\n  },\n  blur: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onBlur: true }),\n      captured: keyOf({ onBlurCapture: true })\n    }\n  },\n  canPlay: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onCanPlay: true }),\n      captured: keyOf({ onCanPlayCapture: true })\n    }\n  },\n  canPlayThrough: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onCanPlayThrough: true }),\n      captured: keyOf({ onCanPlayThroughCapture: true })\n    }\n  },\n  click: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onClick: true }),\n      captured: keyOf({ onClickCapture: true })\n    }\n  },\n  contextMenu: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onContextMenu: true }),\n      captured: keyOf({ onContextMenuCapture: true })\n    }\n  },\n  copy: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onCopy: true }),\n      captured: keyOf({ onCopyCapture: true })\n    }\n  },\n  cut: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onCut: true }),\n      captured: keyOf({ onCutCapture: true })\n    }\n  },\n  doubleClick: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onDoubleClick: true }),\n      captured: keyOf({ onDoubleClickCapture: true })\n    }\n  },\n  drag: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onDrag: true }),\n      captured: keyOf({ onDragCapture: true })\n    }\n  },\n  dragEnd: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onDragEnd: true }),\n      captured: keyOf({ onDragEndCapture: true })\n    }\n  },\n  dragEnter: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onDragEnter: true }),\n      captured: keyOf({ onDragEnterCapture: true })\n    }\n  },\n  dragExit: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onDragExit: true }),\n      captured: keyOf({ onDragExitCapture: true })\n    }\n  },\n  dragLeave: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onDragLeave: true }),\n      captured: keyOf({ onDragLeaveCapture: true })\n    }\n  },\n  dragOver: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onDragOver: true }),\n      captured: keyOf({ onDragOverCapture: true })\n    }\n  },\n  dragStart: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onDragStart: true }),\n      captured: keyOf({ onDragStartCapture: true })\n    }\n  },\n  drop: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onDrop: true }),\n      captured: keyOf({ onDropCapture: true })\n    }\n  },\n  durationChange: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onDurationChange: true }),\n      captured: keyOf({ onDurationChangeCapture: true })\n    }\n  },\n  emptied: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onEmptied: true }),\n      captured: keyOf({ onEmptiedCapture: true })\n    }\n  },\n  encrypted: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onEncrypted: true }),\n      captured: keyOf({ onEncryptedCapture: true })\n    }\n  },\n  ended: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onEnded: true }),\n      captured: keyOf({ onEndedCapture: true })\n    }\n  },\n  error: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onError: true }),\n      captured: keyOf({ onErrorCapture: true })\n    }\n  },\n  focus: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onFocus: true }),\n      captured: keyOf({ onFocusCapture: true })\n    }\n  },\n  input: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onInput: true }),\n      captured: keyOf({ onInputCapture: true })\n    }\n  },\n  keyDown: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onKeyDown: true }),\n      captured: keyOf({ onKeyDownCapture: true })\n    }\n  },\n  keyPress: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onKeyPress: true }),\n      captured: keyOf({ onKeyPressCapture: true })\n    }\n  },\n  keyUp: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onKeyUp: true }),\n      captured: keyOf({ onKeyUpCapture: true })\n    }\n  },\n  load: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onLoad: true }),\n      captured: keyOf({ onLoadCapture: true })\n    }\n  },\n  loadedData: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onLoadedData: true }),\n      captured: keyOf({ onLoadedDataCapture: true })\n    }\n  },\n  loadedMetadata: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onLoadedMetadata: true }),\n      captured: keyOf({ onLoadedMetadataCapture: true })\n    }\n  },\n  loadStart: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onLoadStart: true }),\n      captured: keyOf({ onLoadStartCapture: true })\n    }\n  },\n  // Note: We do not allow listening to mouseOver events. Instead, use the\n  // onMouseEnter/onMouseLeave created by `EnterLeaveEventPlugin`.\n  mouseDown: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onMouseDown: true }),\n      captured: keyOf({ onMouseDownCapture: true })\n    }\n  },\n  mouseMove: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onMouseMove: true }),\n      captured: keyOf({ onMouseMoveCapture: true })\n    }\n  },\n  mouseOut: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onMouseOut: true }),\n      captured: keyOf({ onMouseOutCapture: true })\n    }\n  },\n  mouseOver: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onMouseOver: true }),\n      captured: keyOf({ onMouseOverCapture: true })\n    }\n  },\n  mouseUp: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onMouseUp: true }),\n      captured: keyOf({ onMouseUpCapture: true })\n    }\n  },\n  paste: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onPaste: true }),\n      captured: keyOf({ onPasteCapture: true })\n    }\n  },\n  pause: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onPause: true }),\n      captured: keyOf({ onPauseCapture: true })\n    }\n  },\n  play: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onPlay: true }),\n      captured: keyOf({ onPlayCapture: true })\n    }\n  },\n  playing: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onPlaying: true }),\n      captured: keyOf({ onPlayingCapture: true })\n    }\n  },\n  progress: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onProgress: true }),\n      captured: keyOf({ onProgressCapture: true })\n    }\n  },\n  rateChange: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onRateChange: true }),\n      captured: keyOf({ onRateChangeCapture: true })\n    }\n  },\n  reset: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onReset: true }),\n      captured: keyOf({ onResetCapture: true })\n    }\n  },\n  scroll: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onScroll: true }),\n      captured: keyOf({ onScrollCapture: true })\n    }\n  },\n  seeked: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onSeeked: true }),\n      captured: keyOf({ onSeekedCapture: true })\n    }\n  },\n  seeking: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onSeeking: true }),\n      captured: keyOf({ onSeekingCapture: true })\n    }\n  },\n  stalled: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onStalled: true }),\n      captured: keyOf({ onStalledCapture: true })\n    }\n  },\n  submit: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onSubmit: true }),\n      captured: keyOf({ onSubmitCapture: true })\n    }\n  },\n  suspend: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onSuspend: true }),\n      captured: keyOf({ onSuspendCapture: true })\n    }\n  },\n  timeUpdate: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onTimeUpdate: true }),\n      captured: keyOf({ onTimeUpdateCapture: true })\n    }\n  },\n  touchCancel: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onTouchCancel: true }),\n      captured: keyOf({ onTouchCancelCapture: true })\n    }\n  },\n  touchEnd: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onTouchEnd: true }),\n      captured: keyOf({ onTouchEndCapture: true })\n    }\n  },\n  touchMove: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onTouchMove: true }),\n      captured: keyOf({ onTouchMoveCapture: true })\n    }\n  },\n  touchStart: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onTouchStart: true }),\n      captured: keyOf({ onTouchStartCapture: true })\n    }\n  },\n  volumeChange: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onVolumeChange: true }),\n      captured: keyOf({ onVolumeChangeCapture: true })\n    }\n  },\n  waiting: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onWaiting: true }),\n      captured: keyOf({ onWaitingCapture: true })\n    }\n  },\n  wheel: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onWheel: true }),\n      captured: keyOf({ onWheelCapture: true })\n    }\n  }\n};\n\nvar topLevelEventsToDispatchConfig = {\n  topAbort: eventTypes.abort,\n  topBlur: eventTypes.blur,\n  topCanPlay: eventTypes.canPlay,\n  topCanPlayThrough: eventTypes.canPlayThrough,\n  topClick: eventTypes.click,\n  topContextMenu: eventTypes.contextMenu,\n  topCopy: eventTypes.copy,\n  topCut: eventTypes.cut,\n  topDoubleClick: eventTypes.doubleClick,\n  topDrag: eventTypes.drag,\n  topDragEnd: eventTypes.dragEnd,\n  topDragEnter: eventTypes.dragEnter,\n  topDragExit: eventTypes.dragExit,\n  topDragLeave: eventTypes.dragLeave,\n  topDragOver: eventTypes.dragOver,\n  topDragStart: eventTypes.dragStart,\n  topDrop: eventTypes.drop,\n  topDurationChange: eventTypes.durationChange,\n  topEmptied: eventTypes.emptied,\n  topEncrypted: eventTypes.encrypted,\n  topEnded: eventTypes.ended,\n  topError: eventTypes.error,\n  topFocus: eventTypes.focus,\n  topInput: eventTypes.input,\n  topKeyDown: eventTypes.keyDown,\n  topKeyPress: eventTypes.keyPress,\n  topKeyUp: eventTypes.keyUp,\n  topLoad: eventTypes.load,\n  topLoadedData: eventTypes.loadedData,\n  topLoadedMetadata: eventTypes.loadedMetadata,\n  topLoadStart: eventTypes.loadStart,\n  topMouseDown: eventTypes.mouseDown,\n  topMouseMove: eventTypes.mouseMove,\n  topMouseOut: eventTypes.mouseOut,\n  topMouseOver: eventTypes.mouseOver,\n  topMouseUp: eventTypes.mouseUp,\n  topPaste: eventTypes.paste,\n  topPause: eventTypes.pause,\n  topPlay: eventTypes.play,\n  topPlaying: eventTypes.playing,\n  topProgress: eventTypes.progress,\n  topRateChange: eventTypes.rateChange,\n  topReset: eventTypes.reset,\n  topScroll: eventTypes.scroll,\n  topSeeked: eventTypes.seeked,\n  topSeeking: eventTypes.seeking,\n  topStalled: eventTypes.stalled,\n  topSubmit: eventTypes.submit,\n  topSuspend: eventTypes.suspend,\n  topTimeUpdate: eventTypes.timeUpdate,\n  topTouchCancel: eventTypes.touchCancel,\n  topTouchEnd: eventTypes.touchEnd,\n  topTouchMove: eventTypes.touchMove,\n  topTouchStart: eventTypes.touchStart,\n  topVolumeChange: eventTypes.volumeChange,\n  topWaiting: eventTypes.waiting,\n  topWheel: eventTypes.wheel\n};\n\nfor (var type in topLevelEventsToDispatchConfig) {\n  topLevelEventsToDispatchConfig[type].dependencies = [type];\n}\n\nvar ON_CLICK_KEY = keyOf({ onClick: null });\nvar onClickListeners = {};\n\nvar SimpleEventPlugin = {\n\n  eventTypes: eventTypes,\n\n  /**\n   * @param {string} topLevelType Record from `EventConstants`.\n   * @param {DOMEventTarget} topLevelTarget The listening component root node.\n   * @param {string} topLevelTargetID ID of `topLevelTarget`.\n   * @param {object} nativeEvent Native browser event.\n   * @return {*} An accumulation of synthetic events.\n   * @see {EventPluginHub.extractEvents}\n   */\n  extractEvents: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) {\n    var dispatchConfig = topLevelEventsToDispatchConfig[topLevelType];\n    if (!dispatchConfig) {\n      return null;\n    }\n    var EventConstructor;\n    switch (topLevelType) {\n      case topLevelTypes.topAbort:\n      case topLevelTypes.topCanPlay:\n      case topLevelTypes.topCanPlayThrough:\n      case topLevelTypes.topDurationChange:\n      case topLevelTypes.topEmptied:\n      case topLevelTypes.topEncrypted:\n      case topLevelTypes.topEnded:\n      case topLevelTypes.topError:\n      case topLevelTypes.topInput:\n      case topLevelTypes.topLoad:\n      case topLevelTypes.topLoadedData:\n      case topLevelTypes.topLoadedMetadata:\n      case topLevelTypes.topLoadStart:\n      case topLevelTypes.topPause:\n      case topLevelTypes.topPlay:\n      case topLevelTypes.topPlaying:\n      case topLevelTypes.topProgress:\n      case topLevelTypes.topRateChange:\n      case topLevelTypes.topReset:\n      case topLevelTypes.topSeeked:\n      case topLevelTypes.topSeeking:\n      case topLevelTypes.topStalled:\n      case topLevelTypes.topSubmit:\n      case topLevelTypes.topSuspend:\n      case topLevelTypes.topTimeUpdate:\n      case topLevelTypes.topVolumeChange:\n      case topLevelTypes.topWaiting:\n        // HTML Events\n        // @see http://www.w3.org/TR/html5/index.html#events-0\n        EventConstructor = SyntheticEvent;\n        break;\n      case topLevelTypes.topKeyPress:\n        // FireFox creates a keypress event for function keys too. This removes\n        // the unwanted keypress events. Enter is however both printable and\n        // non-printable. One would expect Tab to be as well (but it isn't).\n        if (getEventCharCode(nativeEvent) === 0) {\n          return null;\n        }\n      /* falls through */\n      case topLevelTypes.topKeyDown:\n      case topLevelTypes.topKeyUp:\n        EventConstructor = SyntheticKeyboardEvent;\n        break;\n      case topLevelTypes.topBlur:\n      case topLevelTypes.topFocus:\n        EventConstructor = SyntheticFocusEvent;\n        break;\n      case topLevelTypes.topClick:\n        // Firefox creates a click event on right mouse clicks. This removes the\n        // unwanted click events.\n        if (nativeEvent.button === 2) {\n          return null;\n        }\n      /* falls through */\n      case topLevelTypes.topContextMenu:\n      case topLevelTypes.topDoubleClick:\n      case topLevelTypes.topMouseDown:\n      case topLevelTypes.topMouseMove:\n      case topLevelTypes.topMouseOut:\n      case topLevelTypes.topMouseOver:\n      case topLevelTypes.topMouseUp:\n        EventConstructor = SyntheticMouseEvent;\n        break;\n      case topLevelTypes.topDrag:\n      case topLevelTypes.topDragEnd:\n      case topLevelTypes.topDragEnter:\n      case topLevelTypes.topDragExit:\n      case topLevelTypes.topDragLeave:\n      case topLevelTypes.topDragOver:\n      case topLevelTypes.topDragStart:\n      case topLevelTypes.topDrop:\n        EventConstructor = SyntheticDragEvent;\n        break;\n      case topLevelTypes.topTouchCancel:\n      case topLevelTypes.topTouchEnd:\n      case topLevelTypes.topTouchMove:\n      case topLevelTypes.topTouchStart:\n        EventConstructor = SyntheticTouchEvent;\n        break;\n      case topLevelTypes.topScroll:\n        EventConstructor = SyntheticUIEvent;\n        break;\n      case topLevelTypes.topWheel:\n        EventConstructor = SyntheticWheelEvent;\n        break;\n      case topLevelTypes.topCopy:\n      case topLevelTypes.topCut:\n      case topLevelTypes.topPaste:\n        EventConstructor = SyntheticClipboardEvent;\n        break;\n    }\n    !EventConstructor ? process.env.NODE_ENV !== 'production' ? invariant(false, 'SimpleEventPlugin: Unhandled event type, `%s`.', topLevelType) : invariant(false) : undefined;\n    var event = EventConstructor.getPooled(dispatchConfig, topLevelTargetID, nativeEvent, nativeEventTarget);\n    EventPropagators.accumulateTwoPhaseDispatches(event);\n    return event;\n  },\n\n  didPutListener: function (id, registrationName, listener) {\n    // Mobile Safari does not fire properly bubble click events on\n    // non-interactive elements, which means delegated click listeners do not\n    // fire. The workaround for this bug involves attaching an empty click\n    // listener on the target node.\n    if (registrationName === ON_CLICK_KEY) {\n      var node = ReactMount.getNode(id);\n      if (!onClickListeners[id]) {\n        onClickListeners[id] = EventListener.listen(node, 'click', emptyFunction);\n      }\n    }\n  },\n\n  willDeleteListener: function (id, registrationName) {\n    if (registrationName === ON_CLICK_KEY) {\n      onClickListeners[id].remove();\n      delete onClickListeners[id];\n    }\n  }\n\n};\n\nmodule.exports = SimpleEventPlugin;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SimpleEventPlugin.js\n ** module id = 134\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticClipboardEvent\n * @typechecks static-only\n */\n\n'use strict';\n\nvar SyntheticEvent = require('./SyntheticEvent');\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/clipboard-apis/\n */\nvar ClipboardEventInterface = {\n  clipboardData: function (event) {\n    return 'clipboardData' in event ? event.clipboardData : window.clipboardData;\n  }\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticClipboardEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n  SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticEvent.augmentClass(SyntheticClipboardEvent, ClipboardEventInterface);\n\nmodule.exports = SyntheticClipboardEvent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SyntheticClipboardEvent.js\n ** module id = 135\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticFocusEvent\n * @typechecks static-only\n */\n\n'use strict';\n\nvar SyntheticUIEvent = require('./SyntheticUIEvent');\n\n/**\n * @interface FocusEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar FocusEventInterface = {\n  relatedTarget: null\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticFocusEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n  SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticUIEvent.augmentClass(SyntheticFocusEvent, FocusEventInterface);\n\nmodule.exports = SyntheticFocusEvent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SyntheticFocusEvent.js\n ** module id = 136\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticKeyboardEvent\n * @typechecks static-only\n */\n\n'use strict';\n\nvar SyntheticUIEvent = require('./SyntheticUIEvent');\n\nvar getEventCharCode = require('./getEventCharCode');\nvar getEventKey = require('./getEventKey');\nvar getEventModifierState = require('./getEventModifierState');\n\n/**\n * @interface KeyboardEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar KeyboardEventInterface = {\n  key: getEventKey,\n  location: null,\n  ctrlKey: null,\n  shiftKey: null,\n  altKey: null,\n  metaKey: null,\n  repeat: null,\n  locale: null,\n  getModifierState: getEventModifierState,\n  // Legacy Interface\n  charCode: function (event) {\n    // `charCode` is the result of a KeyPress event and represents the value of\n    // the actual printable character.\n\n    // KeyPress is deprecated, but its replacement is not yet final and not\n    // implemented in any major browser. Only KeyPress has charCode.\n    if (event.type === 'keypress') {\n      return getEventCharCode(event);\n    }\n    return 0;\n  },\n  keyCode: function (event) {\n    // `keyCode` is the result of a KeyDown/Up event and represents the value of\n    // physical keyboard key.\n\n    // The actual meaning of the value depends on the users' keyboard layout\n    // which cannot be detected. Assuming that it is a US keyboard layout\n    // provides a surprisingly accurate mapping for US and European users.\n    // Due to this, it is left to the user to implement at this time.\n    if (event.type === 'keydown' || event.type === 'keyup') {\n      return event.keyCode;\n    }\n    return 0;\n  },\n  which: function (event) {\n    // `which` is an alias for either `keyCode` or `charCode` depending on the\n    // type of the event.\n    if (event.type === 'keypress') {\n      return getEventCharCode(event);\n    }\n    if (event.type === 'keydown' || event.type === 'keyup') {\n      return event.keyCode;\n    }\n    return 0;\n  }\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticKeyboardEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n  SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticUIEvent.augmentClass(SyntheticKeyboardEvent, KeyboardEventInterface);\n\nmodule.exports = SyntheticKeyboardEvent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SyntheticKeyboardEvent.js\n ** module id = 137\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getEventCharCode\n * @typechecks static-only\n */\n\n'use strict';\n\n/**\n * `charCode` represents the actual \"character code\" and is safe to use with\n * `String.fromCharCode`. As such, only keys that correspond to printable\n * characters produce a valid `charCode`, the only exception to this is Enter.\n * The Tab-key is considered non-printable and does not have a `charCode`,\n * presumably because it does not produce a tab-character in browsers.\n *\n * @param {object} nativeEvent Native browser event.\n * @return {number} Normalized `charCode` property.\n */\nfunction getEventCharCode(nativeEvent) {\n  var charCode;\n  var keyCode = nativeEvent.keyCode;\n\n  if ('charCode' in nativeEvent) {\n    charCode = nativeEvent.charCode;\n\n    // FF does not set `charCode` for the Enter-key, check against `keyCode`.\n    if (charCode === 0 && keyCode === 13) {\n      charCode = 13;\n    }\n  } else {\n    // IE8 does not implement `charCode`, but `keyCode` has the correct value.\n    charCode = keyCode;\n  }\n\n  // Some non-printable keys are reported in `charCode`/`keyCode`, discard them.\n  // Must not discard the (non-)printable Enter-key.\n  if (charCode >= 32 || charCode === 13) {\n    return charCode;\n  }\n\n  return 0;\n}\n\nmodule.exports = getEventCharCode;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/getEventCharCode.js\n ** module id = 138\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getEventKey\n * @typechecks static-only\n */\n\n'use strict';\n\nvar getEventCharCode = require('./getEventCharCode');\n\n/**\n * Normalization of deprecated HTML5 `key` values\n * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names\n */\nvar normalizeKey = {\n  'Esc': 'Escape',\n  'Spacebar': ' ',\n  'Left': 'ArrowLeft',\n  'Up': 'ArrowUp',\n  'Right': 'ArrowRight',\n  'Down': 'ArrowDown',\n  'Del': 'Delete',\n  'Win': 'OS',\n  'Menu': 'ContextMenu',\n  'Apps': 'ContextMenu',\n  'Scroll': 'ScrollLock',\n  'MozPrintableKey': 'Unidentified'\n};\n\n/**\n * Translation from legacy `keyCode` to HTML5 `key`\n * Only special keys supported, all others depend on keyboard layout or browser\n * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names\n */\nvar translateToKey = {\n  8: 'Backspace',\n  9: 'Tab',\n  12: 'Clear',\n  13: 'Enter',\n  16: 'Shift',\n  17: 'Control',\n  18: 'Alt',\n  19: 'Pause',\n  20: 'CapsLock',\n  27: 'Escape',\n  32: ' ',\n  33: 'PageUp',\n  34: 'PageDown',\n  35: 'End',\n  36: 'Home',\n  37: 'ArrowLeft',\n  38: 'ArrowUp',\n  39: 'ArrowRight',\n  40: 'ArrowDown',\n  45: 'Insert',\n  46: 'Delete',\n  112: 'F1', 113: 'F2', 114: 'F3', 115: 'F4', 116: 'F5', 117: 'F6',\n  118: 'F7', 119: 'F8', 120: 'F9', 121: 'F10', 122: 'F11', 123: 'F12',\n  144: 'NumLock',\n  145: 'ScrollLock',\n  224: 'Meta'\n};\n\n/**\n * @param {object} nativeEvent Native browser event.\n * @return {string} Normalized `key` property.\n */\nfunction getEventKey(nativeEvent) {\n  if (nativeEvent.key) {\n    // Normalize inconsistent values reported by browsers due to\n    // implementations of a working draft specification.\n\n    // FireFox implements `key` but returns `MozPrintableKey` for all\n    // printable characters (normalized to `Unidentified`), ignore it.\n    var key = normalizeKey[nativeEvent.key] || nativeEvent.key;\n    if (key !== 'Unidentified') {\n      return key;\n    }\n  }\n\n  // Browser does not implement `key`, polyfill as much of it as we can.\n  if (nativeEvent.type === 'keypress') {\n    var charCode = getEventCharCode(nativeEvent);\n\n    // The enter-key is technically both printable and non-printable and can\n    // thus be captured by `keypress`, no other non-printable key should.\n    return charCode === 13 ? 'Enter' : String.fromCharCode(charCode);\n  }\n  if (nativeEvent.type === 'keydown' || nativeEvent.type === 'keyup') {\n    // While user keyboard layout determines the actual meaning of each\n    // `keyCode` value, almost all function keys have a universal value.\n    return translateToKey[nativeEvent.keyCode] || 'Unidentified';\n  }\n  return '';\n}\n\nmodule.exports = getEventKey;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/getEventKey.js\n ** module id = 139\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticDragEvent\n * @typechecks static-only\n */\n\n'use strict';\n\nvar SyntheticMouseEvent = require('./SyntheticMouseEvent');\n\n/**\n * @interface DragEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar DragEventInterface = {\n  dataTransfer: null\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticDragEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n  SyntheticMouseEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticMouseEvent.augmentClass(SyntheticDragEvent, DragEventInterface);\n\nmodule.exports = SyntheticDragEvent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SyntheticDragEvent.js\n ** module id = 140\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticTouchEvent\n * @typechecks static-only\n */\n\n'use strict';\n\nvar SyntheticUIEvent = require('./SyntheticUIEvent');\n\nvar getEventModifierState = require('./getEventModifierState');\n\n/**\n * @interface TouchEvent\n * @see http://www.w3.org/TR/touch-events/\n */\nvar TouchEventInterface = {\n  touches: null,\n  targetTouches: null,\n  changedTouches: null,\n  altKey: null,\n  metaKey: null,\n  ctrlKey: null,\n  shiftKey: null,\n  getModifierState: getEventModifierState\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticTouchEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n  SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticUIEvent.augmentClass(SyntheticTouchEvent, TouchEventInterface);\n\nmodule.exports = SyntheticTouchEvent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SyntheticTouchEvent.js\n ** module id = 141\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticWheelEvent\n * @typechecks static-only\n */\n\n'use strict';\n\nvar SyntheticMouseEvent = require('./SyntheticMouseEvent');\n\n/**\n * @interface WheelEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar WheelEventInterface = {\n  deltaX: function (event) {\n    return 'deltaX' in event ? event.deltaX :\n    // Fallback to `wheelDeltaX` for Webkit and normalize (right is positive).\n    'wheelDeltaX' in event ? -event.wheelDeltaX : 0;\n  },\n  deltaY: function (event) {\n    return 'deltaY' in event ? event.deltaY :\n    // Fallback to `wheelDeltaY` for Webkit and normalize (down is positive).\n    'wheelDeltaY' in event ? -event.wheelDeltaY :\n    // Fallback to `wheelDelta` for IE<9 and normalize (down is positive).\n    'wheelDelta' in event ? -event.wheelDelta : 0;\n  },\n  deltaZ: null,\n\n  // Browsers without \"deltaMode\" is reporting in raw wheel delta where one\n  // notch on the scroll is always +/- 120, roughly equivalent to pixels.\n  // A good approximation of DOM_DELTA_LINE (1) is 5% of viewport size or\n  // ~40 pixels, for DOM_DELTA_SCREEN (2) it is 87.5% of viewport size.\n  deltaMode: null\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticMouseEvent}\n */\nfunction SyntheticWheelEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n  SyntheticMouseEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticMouseEvent.augmentClass(SyntheticWheelEvent, WheelEventInterface);\n\nmodule.exports = SyntheticWheelEvent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SyntheticWheelEvent.js\n ** module id = 142\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SVGDOMPropertyConfig\n */\n\n'use strict';\n\nvar DOMProperty = require('./DOMProperty');\n\nvar MUST_USE_ATTRIBUTE = DOMProperty.injection.MUST_USE_ATTRIBUTE;\n\nvar NS = {\n  xlink: 'http://www.w3.org/1999/xlink',\n  xml: 'http://www.w3.org/XML/1998/namespace'\n};\n\nvar SVGDOMPropertyConfig = {\n  Properties: {\n    clipPath: MUST_USE_ATTRIBUTE,\n    cx: MUST_USE_ATTRIBUTE,\n    cy: MUST_USE_ATTRIBUTE,\n    d: MUST_USE_ATTRIBUTE,\n    dx: MUST_USE_ATTRIBUTE,\n    dy: MUST_USE_ATTRIBUTE,\n    fill: MUST_USE_ATTRIBUTE,\n    fillOpacity: MUST_USE_ATTRIBUTE,\n    fontFamily: MUST_USE_ATTRIBUTE,\n    fontSize: MUST_USE_ATTRIBUTE,\n    fx: MUST_USE_ATTRIBUTE,\n    fy: MUST_USE_ATTRIBUTE,\n    gradientTransform: MUST_USE_ATTRIBUTE,\n    gradientUnits: MUST_USE_ATTRIBUTE,\n    markerEnd: MUST_USE_ATTRIBUTE,\n    markerMid: MUST_USE_ATTRIBUTE,\n    markerStart: MUST_USE_ATTRIBUTE,\n    offset: MUST_USE_ATTRIBUTE,\n    opacity: MUST_USE_ATTRIBUTE,\n    patternContentUnits: MUST_USE_ATTRIBUTE,\n    patternUnits: MUST_USE_ATTRIBUTE,\n    points: MUST_USE_ATTRIBUTE,\n    preserveAspectRatio: MUST_USE_ATTRIBUTE,\n    r: MUST_USE_ATTRIBUTE,\n    rx: MUST_USE_ATTRIBUTE,\n    ry: MUST_USE_ATTRIBUTE,\n    spreadMethod: MUST_USE_ATTRIBUTE,\n    stopColor: MUST_USE_ATTRIBUTE,\n    stopOpacity: MUST_USE_ATTRIBUTE,\n    stroke: MUST_USE_ATTRIBUTE,\n    strokeDasharray: MUST_USE_ATTRIBUTE,\n    strokeLinecap: MUST_USE_ATTRIBUTE,\n    strokeOpacity: MUST_USE_ATTRIBUTE,\n    strokeWidth: MUST_USE_ATTRIBUTE,\n    textAnchor: MUST_USE_ATTRIBUTE,\n    transform: MUST_USE_ATTRIBUTE,\n    version: MUST_USE_ATTRIBUTE,\n    viewBox: MUST_USE_ATTRIBUTE,\n    x1: MUST_USE_ATTRIBUTE,\n    x2: MUST_USE_ATTRIBUTE,\n    x: MUST_USE_ATTRIBUTE,\n    xlinkActuate: MUST_USE_ATTRIBUTE,\n    xlinkArcrole: MUST_USE_ATTRIBUTE,\n    xlinkHref: MUST_USE_ATTRIBUTE,\n    xlinkRole: MUST_USE_ATTRIBUTE,\n    xlinkShow: MUST_USE_ATTRIBUTE,\n    xlinkTitle: MUST_USE_ATTRIBUTE,\n    xlinkType: MUST_USE_ATTRIBUTE,\n    xmlBase: MUST_USE_ATTRIBUTE,\n    xmlLang: MUST_USE_ATTRIBUTE,\n    xmlSpace: MUST_USE_ATTRIBUTE,\n    y1: MUST_USE_ATTRIBUTE,\n    y2: MUST_USE_ATTRIBUTE,\n    y: MUST_USE_ATTRIBUTE\n  },\n  DOMAttributeNamespaces: {\n    xlinkActuate: NS.xlink,\n    xlinkArcrole: NS.xlink,\n    xlinkHref: NS.xlink,\n    xlinkRole: NS.xlink,\n    xlinkShow: NS.xlink,\n    xlinkTitle: NS.xlink,\n    xlinkType: NS.xlink,\n    xmlBase: NS.xml,\n    xmlLang: NS.xml,\n    xmlSpace: NS.xml\n  },\n  DOMAttributeNames: {\n    clipPath: 'clip-path',\n    fillOpacity: 'fill-opacity',\n    fontFamily: 'font-family',\n    fontSize: 'font-size',\n    gradientTransform: 'gradientTransform',\n    gradientUnits: 'gradientUnits',\n    markerEnd: 'marker-end',\n    markerMid: 'marker-mid',\n    markerStart: 'marker-start',\n    patternContentUnits: 'patternContentUnits',\n    patternUnits: 'patternUnits',\n    preserveAspectRatio: 'preserveAspectRatio',\n    spreadMethod: 'spreadMethod',\n    stopColor: 'stop-color',\n    stopOpacity: 'stop-opacity',\n    strokeDasharray: 'stroke-dasharray',\n    strokeLinecap: 'stroke-linecap',\n    strokeOpacity: 'stroke-opacity',\n    strokeWidth: 'stroke-width',\n    textAnchor: 'text-anchor',\n    viewBox: 'viewBox',\n    xlinkActuate: 'xlink:actuate',\n    xlinkArcrole: 'xlink:arcrole',\n    xlinkHref: 'xlink:href',\n    xlinkRole: 'xlink:role',\n    xlinkShow: 'xlink:show',\n    xlinkTitle: 'xlink:title',\n    xlinkType: 'xlink:type',\n    xmlBase: 'xml:base',\n    xmlLang: 'xml:lang',\n    xmlSpace: 'xml:space'\n  }\n};\n\nmodule.exports = SVGDOMPropertyConfig;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SVGDOMPropertyConfig.js\n ** module id = 143\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDefaultPerf\n * @typechecks static-only\n */\n\n'use strict';\n\nvar DOMProperty = require('./DOMProperty');\nvar ReactDefaultPerfAnalysis = require('./ReactDefaultPerfAnalysis');\nvar ReactMount = require('./ReactMount');\nvar ReactPerf = require('./ReactPerf');\n\nvar performanceNow = require('fbjs/lib/performanceNow');\n\nfunction roundFloat(val) {\n  return Math.floor(val * 100) / 100;\n}\n\nfunction addValue(obj, key, val) {\n  obj[key] = (obj[key] || 0) + val;\n}\n\nvar ReactDefaultPerf = {\n  _allMeasurements: [], // last item in the list is the current one\n  _mountStack: [0],\n  _injected: false,\n\n  start: function () {\n    if (!ReactDefaultPerf._injected) {\n      ReactPerf.injection.injectMeasure(ReactDefaultPerf.measure);\n    }\n\n    ReactDefaultPerf._allMeasurements.length = 0;\n    ReactPerf.enableMeasure = true;\n  },\n\n  stop: function () {\n    ReactPerf.enableMeasure = false;\n  },\n\n  getLastMeasurements: function () {\n    return ReactDefaultPerf._allMeasurements;\n  },\n\n  printExclusive: function (measurements) {\n    measurements = measurements || ReactDefaultPerf._allMeasurements;\n    var summary = ReactDefaultPerfAnalysis.getExclusiveSummary(measurements);\n    console.table(summary.map(function (item) {\n      return {\n        'Component class name': item.componentName,\n        'Total inclusive time (ms)': roundFloat(item.inclusive),\n        'Exclusive mount time (ms)': roundFloat(item.exclusive),\n        'Exclusive render time (ms)': roundFloat(item.render),\n        'Mount time per instance (ms)': roundFloat(item.exclusive / item.count),\n        'Render time per instance (ms)': roundFloat(item.render / item.count),\n        'Instances': item.count\n      };\n    }));\n    // TODO: ReactDefaultPerfAnalysis.getTotalTime() does not return the correct\n    // number.\n  },\n\n  printInclusive: function (measurements) {\n    measurements = measurements || ReactDefaultPerf._allMeasurements;\n    var summary = ReactDefaultPerfAnalysis.getInclusiveSummary(measurements);\n    console.table(summary.map(function (item) {\n      return {\n        'Owner > component': item.componentName,\n        'Inclusive time (ms)': roundFloat(item.time),\n        'Instances': item.count\n      };\n    }));\n    console.log('Total time:', ReactDefaultPerfAnalysis.getTotalTime(measurements).toFixed(2) + ' ms');\n  },\n\n  getMeasurementsSummaryMap: function (measurements) {\n    var summary = ReactDefaultPerfAnalysis.getInclusiveSummary(measurements, true);\n    return summary.map(function (item) {\n      return {\n        'Owner > component': item.componentName,\n        'Wasted time (ms)': item.time,\n        'Instances': item.count\n      };\n    });\n  },\n\n  printWasted: function (measurements) {\n    measurements = measurements || ReactDefaultPerf._allMeasurements;\n    console.table(ReactDefaultPerf.getMeasurementsSummaryMap(measurements));\n    console.log('Total time:', ReactDefaultPerfAnalysis.getTotalTime(measurements).toFixed(2) + ' ms');\n  },\n\n  printDOM: function (measurements) {\n    measurements = measurements || ReactDefaultPerf._allMeasurements;\n    var summary = ReactDefaultPerfAnalysis.getDOMSummary(measurements);\n    console.table(summary.map(function (item) {\n      var result = {};\n      result[DOMProperty.ID_ATTRIBUTE_NAME] = item.id;\n      result.type = item.type;\n      result.args = JSON.stringify(item.args);\n      return result;\n    }));\n    console.log('Total time:', ReactDefaultPerfAnalysis.getTotalTime(measurements).toFixed(2) + ' ms');\n  },\n\n  _recordWrite: function (id, fnName, totalTime, args) {\n    // TODO: totalTime isn't that useful since it doesn't count paints/reflows\n    var writes = ReactDefaultPerf._allMeasurements[ReactDefaultPerf._allMeasurements.length - 1].writes;\n    writes[id] = writes[id] || [];\n    writes[id].push({\n      type: fnName,\n      time: totalTime,\n      args: args\n    });\n  },\n\n  measure: function (moduleName, fnName, func) {\n    return function () {\n      for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      var totalTime;\n      var rv;\n      var start;\n\n      if (fnName === '_renderNewRootComponent' || fnName === 'flushBatchedUpdates') {\n        // A \"measurement\" is a set of metrics recorded for each flush. We want\n        // to group the metrics for a given flush together so we can look at the\n        // components that rendered and the DOM operations that actually\n        // happened to determine the amount of \"wasted work\" performed.\n        ReactDefaultPerf._allMeasurements.push({\n          exclusive: {},\n          inclusive: {},\n          render: {},\n          counts: {},\n          writes: {},\n          displayNames: {},\n          totalTime: 0,\n          created: {}\n        });\n        start = performanceNow();\n        rv = func.apply(this, args);\n        ReactDefaultPerf._allMeasurements[ReactDefaultPerf._allMeasurements.length - 1].totalTime = performanceNow() - start;\n        return rv;\n      } else if (fnName === '_mountImageIntoNode' || moduleName === 'ReactBrowserEventEmitter' || moduleName === 'ReactDOMIDOperations' || moduleName === 'CSSPropertyOperations' || moduleName === 'DOMChildrenOperations' || moduleName === 'DOMPropertyOperations') {\n        start = performanceNow();\n        rv = func.apply(this, args);\n        totalTime = performanceNow() - start;\n\n        if (fnName === '_mountImageIntoNode') {\n          var mountID = ReactMount.getID(args[1]);\n          ReactDefaultPerf._recordWrite(mountID, fnName, totalTime, args[0]);\n        } else if (fnName === 'dangerouslyProcessChildrenUpdates') {\n          // special format\n          args[0].forEach(function (update) {\n            var writeArgs = {};\n            if (update.fromIndex !== null) {\n              writeArgs.fromIndex = update.fromIndex;\n            }\n            if (update.toIndex !== null) {\n              writeArgs.toIndex = update.toIndex;\n            }\n            if (update.textContent !== null) {\n              writeArgs.textContent = update.textContent;\n            }\n            if (update.markupIndex !== null) {\n              writeArgs.markup = args[1][update.markupIndex];\n            }\n            ReactDefaultPerf._recordWrite(update.parentID, update.type, totalTime, writeArgs);\n          });\n        } else {\n          // basic format\n          var id = args[0];\n          if (typeof id === 'object') {\n            id = ReactMount.getID(args[0]);\n          }\n          ReactDefaultPerf._recordWrite(id, fnName, totalTime, Array.prototype.slice.call(args, 1));\n        }\n        return rv;\n      } else if (moduleName === 'ReactCompositeComponent' && (fnName === 'mountComponent' || fnName === 'updateComponent' || // TODO: receiveComponent()?\n      fnName === '_renderValidatedComponent')) {\n\n        if (this._currentElement.type === ReactMount.TopLevelWrapper) {\n          return func.apply(this, args);\n        }\n\n        var rootNodeID = fnName === 'mountComponent' ? args[0] : this._rootNodeID;\n        var isRender = fnName === '_renderValidatedComponent';\n        var isMount = fnName === 'mountComponent';\n\n        var mountStack = ReactDefaultPerf._mountStack;\n        var entry = ReactDefaultPerf._allMeasurements[ReactDefaultPerf._allMeasurements.length - 1];\n\n        if (isRender) {\n          addValue(entry.counts, rootNodeID, 1);\n        } else if (isMount) {\n          entry.created[rootNodeID] = true;\n          mountStack.push(0);\n        }\n\n        start = performanceNow();\n        rv = func.apply(this, args);\n        totalTime = performanceNow() - start;\n\n        if (isRender) {\n          addValue(entry.render, rootNodeID, totalTime);\n        } else if (isMount) {\n          var subMountTime = mountStack.pop();\n          mountStack[mountStack.length - 1] += totalTime;\n          addValue(entry.exclusive, rootNodeID, totalTime - subMountTime);\n          addValue(entry.inclusive, rootNodeID, totalTime);\n        } else {\n          addValue(entry.inclusive, rootNodeID, totalTime);\n        }\n\n        entry.displayNames[rootNodeID] = {\n          current: this.getName(),\n          owner: this._currentElement._owner ? this._currentElement._owner.getName() : '<root>'\n        };\n\n        return rv;\n      } else {\n        return func.apply(this, args);\n      }\n    };\n  }\n};\n\nmodule.exports = ReactDefaultPerf;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDefaultPerf.js\n ** module id = 144\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDefaultPerfAnalysis\n */\n\n'use strict';\n\nvar assign = require('./Object.assign');\n\n// Don't try to save users less than 1.2ms (a number I made up)\nvar DONT_CARE_THRESHOLD = 1.2;\nvar DOM_OPERATION_TYPES = {\n  '_mountImageIntoNode': 'set innerHTML',\n  INSERT_MARKUP: 'set innerHTML',\n  MOVE_EXISTING: 'move',\n  REMOVE_NODE: 'remove',\n  SET_MARKUP: 'set innerHTML',\n  TEXT_CONTENT: 'set textContent',\n  'setValueForProperty': 'update attribute',\n  'setValueForAttribute': 'update attribute',\n  'deleteValueForProperty': 'remove attribute',\n  'dangerouslyReplaceNodeWithMarkupByID': 'replace'\n};\n\nfunction getTotalTime(measurements) {\n  // TODO: return number of DOM ops? could be misleading.\n  // TODO: measure dropped frames after reconcile?\n  // TODO: log total time of each reconcile and the top-level component\n  // class that triggered it.\n  var totalTime = 0;\n  for (var i = 0; i < measurements.length; i++) {\n    var measurement = measurements[i];\n    totalTime += measurement.totalTime;\n  }\n  return totalTime;\n}\n\nfunction getDOMSummary(measurements) {\n  var items = [];\n  measurements.forEach(function (measurement) {\n    Object.keys(measurement.writes).forEach(function (id) {\n      measurement.writes[id].forEach(function (write) {\n        items.push({\n          id: id,\n          type: DOM_OPERATION_TYPES[write.type] || write.type,\n          args: write.args\n        });\n      });\n    });\n  });\n  return items;\n}\n\nfunction getExclusiveSummary(measurements) {\n  var candidates = {};\n  var displayName;\n\n  for (var i = 0; i < measurements.length; i++) {\n    var measurement = measurements[i];\n    var allIDs = assign({}, measurement.exclusive, measurement.inclusive);\n\n    for (var id in allIDs) {\n      displayName = measurement.displayNames[id].current;\n\n      candidates[displayName] = candidates[displayName] || {\n        componentName: displayName,\n        inclusive: 0,\n        exclusive: 0,\n        render: 0,\n        count: 0\n      };\n      if (measurement.render[id]) {\n        candidates[displayName].render += measurement.render[id];\n      }\n      if (measurement.exclusive[id]) {\n        candidates[displayName].exclusive += measurement.exclusive[id];\n      }\n      if (measurement.inclusive[id]) {\n        candidates[displayName].inclusive += measurement.inclusive[id];\n      }\n      if (measurement.counts[id]) {\n        candidates[displayName].count += measurement.counts[id];\n      }\n    }\n  }\n\n  // Now make a sorted array with the results.\n  var arr = [];\n  for (displayName in candidates) {\n    if (candidates[displayName].exclusive >= DONT_CARE_THRESHOLD) {\n      arr.push(candidates[displayName]);\n    }\n  }\n\n  arr.sort(function (a, b) {\n    return b.exclusive - a.exclusive;\n  });\n\n  return arr;\n}\n\nfunction getInclusiveSummary(measurements, onlyClean) {\n  var candidates = {};\n  var inclusiveKey;\n\n  for (var i = 0; i < measurements.length; i++) {\n    var measurement = measurements[i];\n    var allIDs = assign({}, measurement.exclusive, measurement.inclusive);\n    var cleanComponents;\n\n    if (onlyClean) {\n      cleanComponents = getUnchangedComponents(measurement);\n    }\n\n    for (var id in allIDs) {\n      if (onlyClean && !cleanComponents[id]) {\n        continue;\n      }\n\n      var displayName = measurement.displayNames[id];\n\n      // Inclusive time is not useful for many components without knowing where\n      // they are instantiated. So we aggregate inclusive time with both the\n      // owner and current displayName as the key.\n      inclusiveKey = displayName.owner + ' > ' + displayName.current;\n\n      candidates[inclusiveKey] = candidates[inclusiveKey] || {\n        componentName: inclusiveKey,\n        time: 0,\n        count: 0\n      };\n\n      if (measurement.inclusive[id]) {\n        candidates[inclusiveKey].time += measurement.inclusive[id];\n      }\n      if (measurement.counts[id]) {\n        candidates[inclusiveKey].count += measurement.counts[id];\n      }\n    }\n  }\n\n  // Now make a sorted array with the results.\n  var arr = [];\n  for (inclusiveKey in candidates) {\n    if (candidates[inclusiveKey].time >= DONT_CARE_THRESHOLD) {\n      arr.push(candidates[inclusiveKey]);\n    }\n  }\n\n  arr.sort(function (a, b) {\n    return b.time - a.time;\n  });\n\n  return arr;\n}\n\nfunction getUnchangedComponents(measurement) {\n  // For a given reconcile, look at which components did not actually\n  // render anything to the DOM and return a mapping of their ID to\n  // the amount of time it took to render the entire subtree.\n  var cleanComponents = {};\n  var dirtyLeafIDs = Object.keys(measurement.writes);\n  var allIDs = assign({}, measurement.exclusive, measurement.inclusive);\n\n  for (var id in allIDs) {\n    var isDirty = false;\n    // For each component that rendered, see if a component that triggered\n    // a DOM op is in its subtree.\n    for (var i = 0; i < dirtyLeafIDs.length; i++) {\n      if (dirtyLeafIDs[i].indexOf(id) === 0) {\n        isDirty = true;\n        break;\n      }\n    }\n    // check if component newly created\n    if (measurement.created[id]) {\n      isDirty = true;\n    }\n    if (!isDirty && measurement.counts[id] > 0) {\n      cleanComponents[id] = true;\n    }\n  }\n  return cleanComponents;\n}\n\nvar ReactDefaultPerfAnalysis = {\n  getExclusiveSummary: getExclusiveSummary,\n  getInclusiveSummary: getInclusiveSummary,\n  getDOMSummary: getDOMSummary,\n  getTotalTime: getTotalTime\n};\n\nmodule.exports = ReactDefaultPerfAnalysis;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDefaultPerfAnalysis.js\n ** module id = 145\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule performanceNow\n * @typechecks\n */\n\n'use strict';\n\nvar performance = require('./performance');\nvar curPerformance = performance;\n\n/**\n * Detect if we can use `window.performance.now()` and gracefully fallback to\n * `Date.now()` if it doesn't exist. We need to support Firefox < 15 for now\n * because of Facebook's testing infrastructure.\n */\nif (!curPerformance || !curPerformance.now) {\n  curPerformance = Date;\n}\n\nvar performanceNow = curPerformance.now.bind(curPerformance);\n\nmodule.exports = performanceNow;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/fbjs/lib/performanceNow.js\n ** module id = 146\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule performance\n * @typechecks\n */\n\n'use strict';\n\nvar ExecutionEnvironment = require('./ExecutionEnvironment');\n\nvar performance;\n\nif (ExecutionEnvironment.canUseDOM) {\n  performance = window.performance || window.msPerformance || window.webkitPerformance;\n}\n\nmodule.exports = performance || {};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/fbjs/lib/performance.js\n ** module id = 147\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactVersion\n */\n\n'use strict';\n\nmodule.exports = '0.14.3';\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactVersion.js\n ** module id = 148\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n* @providesModule renderSubtreeIntoContainer\n*/\n\n'use strict';\n\nvar ReactMount = require('./ReactMount');\n\nmodule.exports = ReactMount.renderSubtreeIntoContainer;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/renderSubtreeIntoContainer.js\n ** module id = 149\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMServer\n */\n\n'use strict';\n\nvar ReactDefaultInjection = require('./ReactDefaultInjection');\nvar ReactServerRendering = require('./ReactServerRendering');\nvar ReactVersion = require('./ReactVersion');\n\nReactDefaultInjection.inject();\n\nvar ReactDOMServer = {\n  renderToString: ReactServerRendering.renderToString,\n  renderToStaticMarkup: ReactServerRendering.renderToStaticMarkup,\n  version: ReactVersion\n};\n\nmodule.exports = ReactDOMServer;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMServer.js\n ** module id = 150\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @typechecks static-only\n * @providesModule ReactServerRendering\n */\n'use strict';\n\nvar ReactDefaultBatchingStrategy = require('./ReactDefaultBatchingStrategy');\nvar ReactElement = require('./ReactElement');\nvar ReactInstanceHandles = require('./ReactInstanceHandles');\nvar ReactMarkupChecksum = require('./ReactMarkupChecksum');\nvar ReactServerBatchingStrategy = require('./ReactServerBatchingStrategy');\nvar ReactServerRenderingTransaction = require('./ReactServerRenderingTransaction');\nvar ReactUpdates = require('./ReactUpdates');\n\nvar emptyObject = require('fbjs/lib/emptyObject');\nvar instantiateReactComponent = require('./instantiateReactComponent');\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * @param {ReactElement} element\n * @return {string} the HTML markup\n */\nfunction renderToString(element) {\n  !ReactElement.isValidElement(element) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'renderToString(): You must pass a valid ReactElement.') : invariant(false) : undefined;\n\n  var transaction;\n  try {\n    ReactUpdates.injection.injectBatchingStrategy(ReactServerBatchingStrategy);\n\n    var id = ReactInstanceHandles.createReactRootID();\n    transaction = ReactServerRenderingTransaction.getPooled(false);\n\n    return transaction.perform(function () {\n      var componentInstance = instantiateReactComponent(element, null);\n      var markup = componentInstance.mountComponent(id, transaction, emptyObject);\n      return ReactMarkupChecksum.addChecksumToMarkup(markup);\n    }, null);\n  } finally {\n    ReactServerRenderingTransaction.release(transaction);\n    // Revert to the DOM batching strategy since these two renderers\n    // currently share these stateful modules.\n    ReactUpdates.injection.injectBatchingStrategy(ReactDefaultBatchingStrategy);\n  }\n}\n\n/**\n * @param {ReactElement} element\n * @return {string} the HTML markup, without the extra React ID and checksum\n * (for generating static pages)\n */\nfunction renderToStaticMarkup(element) {\n  !ReactElement.isValidElement(element) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'renderToStaticMarkup(): You must pass a valid ReactElement.') : invariant(false) : undefined;\n\n  var transaction;\n  try {\n    ReactUpdates.injection.injectBatchingStrategy(ReactServerBatchingStrategy);\n\n    var id = ReactInstanceHandles.createReactRootID();\n    transaction = ReactServerRenderingTransaction.getPooled(true);\n\n    return transaction.perform(function () {\n      var componentInstance = instantiateReactComponent(element, null);\n      return componentInstance.mountComponent(id, transaction, emptyObject);\n    }, null);\n  } finally {\n    ReactServerRenderingTransaction.release(transaction);\n    // Revert to the DOM batching strategy since these two renderers\n    // currently share these stateful modules.\n    ReactUpdates.injection.injectBatchingStrategy(ReactDefaultBatchingStrategy);\n  }\n}\n\nmodule.exports = {\n  renderToString: renderToString,\n  renderToStaticMarkup: renderToStaticMarkup\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactServerRendering.js\n ** module id = 151\n ** module chunks = 4\n **/","/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactServerBatchingStrategy\n * @typechecks\n */\n\n'use strict';\n\nvar ReactServerBatchingStrategy = {\n  isBatchingUpdates: false,\n  batchedUpdates: function (callback) {\n    // Don't do anything here. During the server rendering we don't want to\n    // schedule any updates. We will simply ignore them.\n  }\n};\n\nmodule.exports = ReactServerBatchingStrategy;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactServerBatchingStrategy.js\n ** module id = 152\n ** module chunks = 4\n **/","/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactServerRenderingTransaction\n * @typechecks\n */\n\n'use strict';\n\nvar PooledClass = require('./PooledClass');\nvar CallbackQueue = require('./CallbackQueue');\nvar Transaction = require('./Transaction');\n\nvar assign = require('./Object.assign');\nvar emptyFunction = require('fbjs/lib/emptyFunction');\n\n/**\n * Provides a `CallbackQueue` queue for collecting `onDOMReady` callbacks\n * during the performing of the transaction.\n */\nvar ON_DOM_READY_QUEUEING = {\n  /**\n   * Initializes the internal `onDOMReady` queue.\n   */\n  initialize: function () {\n    this.reactMountReady.reset();\n  },\n\n  close: emptyFunction\n};\n\n/**\n * Executed within the scope of the `Transaction` instance. Consider these as\n * being member methods, but with an implied ordering while being isolated from\n * each other.\n */\nvar TRANSACTION_WRAPPERS = [ON_DOM_READY_QUEUEING];\n\n/**\n * @class ReactServerRenderingTransaction\n * @param {boolean} renderToStaticMarkup\n */\nfunction ReactServerRenderingTransaction(renderToStaticMarkup) {\n  this.reinitializeTransaction();\n  this.renderToStaticMarkup = renderToStaticMarkup;\n  this.reactMountReady = CallbackQueue.getPooled(null);\n  this.useCreateElement = false;\n}\n\nvar Mixin = {\n  /**\n   * @see Transaction\n   * @abstract\n   * @final\n   * @return {array} Empty list of operation wrap procedures.\n   */\n  getTransactionWrappers: function () {\n    return TRANSACTION_WRAPPERS;\n  },\n\n  /**\n   * @return {object} The queue to collect `onDOMReady` callbacks with.\n   */\n  getReactMountReady: function () {\n    return this.reactMountReady;\n  },\n\n  /**\n   * `PooledClass` looks for this, and will invoke this before allowing this\n   * instance to be reused.\n   */\n  destructor: function () {\n    CallbackQueue.release(this.reactMountReady);\n    this.reactMountReady = null;\n  }\n};\n\nassign(ReactServerRenderingTransaction.prototype, Transaction.Mixin, Mixin);\n\nPooledClass.addPoolingTo(ReactServerRenderingTransaction);\n\nmodule.exports = ReactServerRenderingTransaction;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactServerRenderingTransaction.js\n ** module id = 153\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactIsomorphic\n */\n\n'use strict';\n\nvar ReactChildren = require('./ReactChildren');\nvar ReactComponent = require('./ReactComponent');\nvar ReactClass = require('./ReactClass');\nvar ReactDOMFactories = require('./ReactDOMFactories');\nvar ReactElement = require('./ReactElement');\nvar ReactElementValidator = require('./ReactElementValidator');\nvar ReactPropTypes = require('./ReactPropTypes');\nvar ReactVersion = require('./ReactVersion');\n\nvar assign = require('./Object.assign');\nvar onlyChild = require('./onlyChild');\n\nvar createElement = ReactElement.createElement;\nvar createFactory = ReactElement.createFactory;\nvar cloneElement = ReactElement.cloneElement;\n\nif (process.env.NODE_ENV !== 'production') {\n  createElement = ReactElementValidator.createElement;\n  createFactory = ReactElementValidator.createFactory;\n  cloneElement = ReactElementValidator.cloneElement;\n}\n\nvar React = {\n\n  // Modern\n\n  Children: {\n    map: ReactChildren.map,\n    forEach: ReactChildren.forEach,\n    count: ReactChildren.count,\n    toArray: ReactChildren.toArray,\n    only: onlyChild\n  },\n\n  Component: ReactComponent,\n\n  createElement: createElement,\n  cloneElement: cloneElement,\n  isValidElement: ReactElement.isValidElement,\n\n  // Classic\n\n  PropTypes: ReactPropTypes,\n  createClass: ReactClass.createClass,\n  createFactory: createFactory,\n  createMixin: function (mixin) {\n    // Currently a noop. Will be used to validate and trace mixins.\n    return mixin;\n  },\n\n  // This looks DOM specific but these are actually isomorphic helpers\n  // since they are just generating DOM strings.\n  DOM: ReactDOMFactories,\n\n  version: ReactVersion,\n\n  // Hook for JSX spread, don't use this for anything else.\n  __spread: assign\n};\n\nmodule.exports = React;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactIsomorphic.js\n ** module id = 154\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMFactories\n * @typechecks static-only\n */\n\n'use strict';\n\nvar ReactElement = require('./ReactElement');\nvar ReactElementValidator = require('./ReactElementValidator');\n\nvar mapObject = require('fbjs/lib/mapObject');\n\n/**\n * Create a factory that creates HTML tag elements.\n *\n * @param {string} tag Tag name (e.g. `div`).\n * @private\n */\nfunction createDOMFactory(tag) {\n  if (process.env.NODE_ENV !== 'production') {\n    return ReactElementValidator.createFactory(tag);\n  }\n  return ReactElement.createFactory(tag);\n}\n\n/**\n * Creates a mapping from supported HTML tags to `ReactDOMComponent` classes.\n * This is also accessible via `React.DOM`.\n *\n * @public\n */\nvar ReactDOMFactories = mapObject({\n  a: 'a',\n  abbr: 'abbr',\n  address: 'address',\n  area: 'area',\n  article: 'article',\n  aside: 'aside',\n  audio: 'audio',\n  b: 'b',\n  base: 'base',\n  bdi: 'bdi',\n  bdo: 'bdo',\n  big: 'big',\n  blockquote: 'blockquote',\n  body: 'body',\n  br: 'br',\n  button: 'button',\n  canvas: 'canvas',\n  caption: 'caption',\n  cite: 'cite',\n  code: 'code',\n  col: 'col',\n  colgroup: 'colgroup',\n  data: 'data',\n  datalist: 'datalist',\n  dd: 'dd',\n  del: 'del',\n  details: 'details',\n  dfn: 'dfn',\n  dialog: 'dialog',\n  div: 'div',\n  dl: 'dl',\n  dt: 'dt',\n  em: 'em',\n  embed: 'embed',\n  fieldset: 'fieldset',\n  figcaption: 'figcaption',\n  figure: 'figure',\n  footer: 'footer',\n  form: 'form',\n  h1: 'h1',\n  h2: 'h2',\n  h3: 'h3',\n  h4: 'h4',\n  h5: 'h5',\n  h6: 'h6',\n  head: 'head',\n  header: 'header',\n  hgroup: 'hgroup',\n  hr: 'hr',\n  html: 'html',\n  i: 'i',\n  iframe: 'iframe',\n  img: 'img',\n  input: 'input',\n  ins: 'ins',\n  kbd: 'kbd',\n  keygen: 'keygen',\n  label: 'label',\n  legend: 'legend',\n  li: 'li',\n  link: 'link',\n  main: 'main',\n  map: 'map',\n  mark: 'mark',\n  menu: 'menu',\n  menuitem: 'menuitem',\n  meta: 'meta',\n  meter: 'meter',\n  nav: 'nav',\n  noscript: 'noscript',\n  object: 'object',\n  ol: 'ol',\n  optgroup: 'optgroup',\n  option: 'option',\n  output: 'output',\n  p: 'p',\n  param: 'param',\n  picture: 'picture',\n  pre: 'pre',\n  progress: 'progress',\n  q: 'q',\n  rp: 'rp',\n  rt: 'rt',\n  ruby: 'ruby',\n  s: 's',\n  samp: 'samp',\n  script: 'script',\n  section: 'section',\n  select: 'select',\n  small: 'small',\n  source: 'source',\n  span: 'span',\n  strong: 'strong',\n  style: 'style',\n  sub: 'sub',\n  summary: 'summary',\n  sup: 'sup',\n  table: 'table',\n  tbody: 'tbody',\n  td: 'td',\n  textarea: 'textarea',\n  tfoot: 'tfoot',\n  th: 'th',\n  thead: 'thead',\n  time: 'time',\n  title: 'title',\n  tr: 'tr',\n  track: 'track',\n  u: 'u',\n  ul: 'ul',\n  'var': 'var',\n  video: 'video',\n  wbr: 'wbr',\n\n  // SVG\n  circle: 'circle',\n  clipPath: 'clipPath',\n  defs: 'defs',\n  ellipse: 'ellipse',\n  g: 'g',\n  image: 'image',\n  line: 'line',\n  linearGradient: 'linearGradient',\n  mask: 'mask',\n  path: 'path',\n  pattern: 'pattern',\n  polygon: 'polygon',\n  polyline: 'polyline',\n  radialGradient: 'radialGradient',\n  rect: 'rect',\n  stop: 'stop',\n  svg: 'svg',\n  text: 'text',\n  tspan: 'tspan'\n\n}, createDOMFactory);\n\nmodule.exports = ReactDOMFactories;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMFactories.js\n ** module id = 155\n ** module chunks = 4\n **/","/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactElementValidator\n */\n\n/**\n * ReactElementValidator provides a wrapper around a element factory\n * which validates the props passed to the element. This is intended to be\n * used only in DEV and could be replaced by a static type checker for languages\n * that support it.\n */\n\n'use strict';\n\nvar ReactElement = require('./ReactElement');\nvar ReactPropTypeLocations = require('./ReactPropTypeLocations');\nvar ReactPropTypeLocationNames = require('./ReactPropTypeLocationNames');\nvar ReactCurrentOwner = require('./ReactCurrentOwner');\n\nvar canDefineProperty = require('./canDefineProperty');\nvar getIteratorFn = require('./getIteratorFn');\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\nfunction getDeclarationErrorAddendum() {\n  if (ReactCurrentOwner.current) {\n    var name = ReactCurrentOwner.current.getName();\n    if (name) {\n      return ' Check the render method of `' + name + '`.';\n    }\n  }\n  return '';\n}\n\n/**\n * Warn if there's no key explicitly set on dynamic arrays of children or\n * object keys are not valid. This allows us to keep track of children between\n * updates.\n */\nvar ownerHasKeyUseWarning = {};\n\nvar loggedTypeFailures = {};\n\n/**\n * Warn if the element doesn't have an explicit key assigned to it.\n * This element is in an array. The array could grow and shrink or be\n * reordered. All children that haven't already been validated are required to\n * have a \"key\" property assigned to it.\n *\n * @internal\n * @param {ReactElement} element Element that requires a key.\n * @param {*} parentType element's parent's type.\n */\nfunction validateExplicitKey(element, parentType) {\n  if (!element._store || element._store.validated || element.key != null) {\n    return;\n  }\n  element._store.validated = true;\n\n  var addenda = getAddendaForKeyUse('uniqueKey', element, parentType);\n  if (addenda === null) {\n    // we already showed the warning\n    return;\n  }\n  process.env.NODE_ENV !== 'production' ? warning(false, 'Each child in an array or iterator should have a unique \"key\" prop.' + '%s%s%s', addenda.parentOrOwner || '', addenda.childOwner || '', addenda.url || '') : undefined;\n}\n\n/**\n * Shared warning and monitoring code for the key warnings.\n *\n * @internal\n * @param {string} messageType A key used for de-duping warnings.\n * @param {ReactElement} element Component that requires a key.\n * @param {*} parentType element's parent's type.\n * @returns {?object} A set of addenda to use in the warning message, or null\n * if the warning has already been shown before (and shouldn't be shown again).\n */\nfunction getAddendaForKeyUse(messageType, element, parentType) {\n  var addendum = getDeclarationErrorAddendum();\n  if (!addendum) {\n    var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;\n    if (parentName) {\n      addendum = ' Check the top-level render call using <' + parentName + '>.';\n    }\n  }\n\n  var memoizer = ownerHasKeyUseWarning[messageType] || (ownerHasKeyUseWarning[messageType] = {});\n  if (memoizer[addendum]) {\n    return null;\n  }\n  memoizer[addendum] = true;\n\n  var addenda = {\n    parentOrOwner: addendum,\n    url: ' See https://fb.me/react-warning-keys for more information.',\n    childOwner: null\n  };\n\n  // Usually the current owner is the offender, but if it accepts children as a\n  // property, it may be the creator of the child that's responsible for\n  // assigning it a key.\n  if (element && element._owner && element._owner !== ReactCurrentOwner.current) {\n    // Give the component that originally created this child.\n    addenda.childOwner = ' It was passed a child from ' + element._owner.getName() + '.';\n  }\n\n  return addenda;\n}\n\n/**\n * Ensure that every element either is passed in a static location, in an\n * array with an explicit keys property defined, or in an object literal\n * with valid key property.\n *\n * @internal\n * @param {ReactNode} node Statically passed child of any type.\n * @param {*} parentType node's parent's type.\n */\nfunction validateChildKeys(node, parentType) {\n  if (typeof node !== 'object') {\n    return;\n  }\n  if (Array.isArray(node)) {\n    for (var i = 0; i < node.length; i++) {\n      var child = node[i];\n      if (ReactElement.isValidElement(child)) {\n        validateExplicitKey(child, parentType);\n      }\n    }\n  } else if (ReactElement.isValidElement(node)) {\n    // This element was passed in a valid location.\n    if (node._store) {\n      node._store.validated = true;\n    }\n  } else if (node) {\n    var iteratorFn = getIteratorFn(node);\n    // Entry iterators provide implicit keys.\n    if (iteratorFn) {\n      if (iteratorFn !== node.entries) {\n        var iterator = iteratorFn.call(node);\n        var step;\n        while (!(step = iterator.next()).done) {\n          if (ReactElement.isValidElement(step.value)) {\n            validateExplicitKey(step.value, parentType);\n          }\n        }\n      }\n    }\n  }\n}\n\n/**\n * Assert that the props are valid\n *\n * @param {string} componentName Name of the component for error messages.\n * @param {object} propTypes Map of prop name to a ReactPropType\n * @param {object} props\n * @param {string} location e.g. \"prop\", \"context\", \"child context\"\n * @private\n */\nfunction checkPropTypes(componentName, propTypes, props, location) {\n  for (var propName in propTypes) {\n    if (propTypes.hasOwnProperty(propName)) {\n      var error;\n      // Prop type validation may throw. In case they do, we don't want to\n      // fail the render phase where it didn't fail before. So we log it.\n      // After these have been cleaned up, we'll let them throw.\n      try {\n        // This is intentionally an invariant that gets caught. It's the same\n        // behavior as without this statement except with a better message.\n        !(typeof propTypes[propName] === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s: %s type `%s` is invalid; it must be a function, usually from ' + 'React.PropTypes.', componentName || 'React class', ReactPropTypeLocationNames[location], propName) : invariant(false) : undefined;\n        error = propTypes[propName](props, propName, componentName, location);\n      } catch (ex) {\n        error = ex;\n      }\n      process.env.NODE_ENV !== 'production' ? warning(!error || error instanceof Error, '%s: type specification of %s `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', ReactPropTypeLocationNames[location], propName, typeof error) : undefined;\n      if (error instanceof Error && !(error.message in loggedTypeFailures)) {\n        // Only monitor this failure once because there tends to be a lot of the\n        // same error.\n        loggedTypeFailures[error.message] = true;\n\n        var addendum = getDeclarationErrorAddendum();\n        process.env.NODE_ENV !== 'production' ? warning(false, 'Failed propType: %s%s', error.message, addendum) : undefined;\n      }\n    }\n  }\n}\n\n/**\n * Given an element, validate that its props follow the propTypes definition,\n * provided by the type.\n *\n * @param {ReactElement} element\n */\nfunction validatePropTypes(element) {\n  var componentClass = element.type;\n  if (typeof componentClass !== 'function') {\n    return;\n  }\n  var name = componentClass.displayName || componentClass.name;\n  if (componentClass.propTypes) {\n    checkPropTypes(name, componentClass.propTypes, element.props, ReactPropTypeLocations.prop);\n  }\n  if (typeof componentClass.getDefaultProps === 'function') {\n    process.env.NODE_ENV !== 'production' ? warning(componentClass.getDefaultProps.isReactClassApproved, 'getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.') : undefined;\n  }\n}\n\nvar ReactElementValidator = {\n\n  createElement: function (type, props, children) {\n    var validType = typeof type === 'string' || typeof type === 'function';\n    // We warn in this case but don't throw. We expect the element creation to\n    // succeed and there will likely be errors in render.\n    process.env.NODE_ENV !== 'production' ? warning(validType, 'React.createElement: type should not be null, undefined, boolean, or ' + 'number. It should be a string (for DOM elements) or a ReactClass ' + '(for composite components).%s', getDeclarationErrorAddendum()) : undefined;\n\n    var element = ReactElement.createElement.apply(this, arguments);\n\n    // The result can be nullish if a mock or a custom function is used.\n    // TODO: Drop this when these are no longer allowed as the type argument.\n    if (element == null) {\n      return element;\n    }\n\n    // Skip key warning if the type isn't valid since our key validation logic\n    // doesn't expect a non-string/function type and can throw confusing errors.\n    // We don't want exception behavior to differ between dev and prod.\n    // (Rendering will throw with a helpful message and as soon as the type is\n    // fixed, the key warnings will appear.)\n    if (validType) {\n      for (var i = 2; i < arguments.length; i++) {\n        validateChildKeys(arguments[i], type);\n      }\n    }\n\n    validatePropTypes(element);\n\n    return element;\n  },\n\n  createFactory: function (type) {\n    var validatedFactory = ReactElementValidator.createElement.bind(null, type);\n    // Legacy hook TODO: Warn if this is accessed\n    validatedFactory.type = type;\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (canDefineProperty) {\n        Object.defineProperty(validatedFactory, 'type', {\n          enumerable: false,\n          get: function () {\n            process.env.NODE_ENV !== 'production' ? warning(false, 'Factory.type is deprecated. Access the class directly ' + 'before passing it to createFactory.') : undefined;\n            Object.defineProperty(this, 'type', {\n              value: type\n            });\n            return type;\n          }\n        });\n      }\n    }\n\n    return validatedFactory;\n  },\n\n  cloneElement: function (element, props, children) {\n    var newElement = ReactElement.cloneElement.apply(this, arguments);\n    for (var i = 2; i < arguments.length; i++) {\n      validateChildKeys(arguments[i], newElement.type);\n    }\n    validatePropTypes(newElement);\n    return newElement;\n  }\n\n};\n\nmodule.exports = ReactElementValidator;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactElementValidator.js\n ** module id = 156\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule mapObject\n */\n\n'use strict';\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\n/**\n * Executes the provided `callback` once for each enumerable own property in the\n * object and constructs a new object from the results. The `callback` is\n * invoked with three arguments:\n *\n *  - the property value\n *  - the property name\n *  - the object being traversed\n *\n * Properties that are added after the call to `mapObject` will not be visited\n * by `callback`. If the values of existing properties are changed, the value\n * passed to `callback` will be the value at the time `mapObject` visits them.\n * Properties that are deleted before being visited are not visited.\n *\n * @grep function objectMap()\n * @grep function objMap()\n *\n * @param {?object} object\n * @param {function} callback\n * @param {*} context\n * @return {?object}\n */\nfunction mapObject(object, callback, context) {\n  if (!object) {\n    return null;\n  }\n  var result = {};\n  for (var name in object) {\n    if (hasOwnProperty.call(object, name)) {\n      result[name] = callback.call(context, object[name], name, object);\n    }\n  }\n  return result;\n}\n\nmodule.exports = mapObject;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/fbjs/lib/mapObject.js\n ** module id = 157\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule onlyChild\n */\n'use strict';\n\nvar ReactElement = require('./ReactElement');\n\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * Returns the first child in a collection of children and verifies that there\n * is only one child in the collection. The current implementation of this\n * function assumes that a single child gets passed without a wrapper, but the\n * purpose of this helper function is to abstract away the particular structure\n * of children.\n *\n * @param {?object} children Child collection structure.\n * @return {ReactComponent} The first and only `ReactComponent` contained in the\n * structure.\n */\nfunction onlyChild(children) {\n  !ReactElement.isValidElement(children) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'onlyChild must be passed a children with exactly one child.') : invariant(false) : undefined;\n  return children;\n}\n\nmodule.exports = onlyChild;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/onlyChild.js\n ** module id = 158\n ** module chunks = 4\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule deprecated\n */\n\n'use strict';\n\nvar assign = require('./Object.assign');\nvar warning = require('fbjs/lib/warning');\n\n/**\n * This will log a single deprecation notice per function and forward the call\n * on to the new API.\n *\n * @param {string} fnName The name of the function\n * @param {string} newModule The module that fn will exist in\n * @param {string} newPackage The module that fn will exist in\n * @param {*} ctx The context this forwarded call should run in\n * @param {function} fn The function to forward on to\n * @return {function} The function that will warn once and then call fn\n */\nfunction deprecated(fnName, newModule, newPackage, ctx, fn) {\n  var warned = false;\n  if (process.env.NODE_ENV !== 'production') {\n    var newFn = function () {\n      process.env.NODE_ENV !== 'production' ? warning(warned,\n      // Require examples in this string must be split to prevent React's\n      // build tools from mistaking them for real requires.\n      // Otherwise the build tools will attempt to build a '%s' module.\n      'React.%s is deprecated. Please use %s.%s from require' + '(\\'%s\\') ' + 'instead.', fnName, newModule, fnName, newPackage) : undefined;\n      warned = true;\n      return fn.apply(ctx, arguments);\n    };\n    // We need to make sure all properties of the original fn are copied over.\n    // In particular, this is needed to support PropTypes\n    return assign(newFn, fn);\n  }\n\n  return fn;\n}\n\nmodule.exports = deprecated;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/deprecated.js\n ** module id = 159\n ** module chunks = 4\n **/","'use strict';\n\nmodule.exports = require('react/lib/ReactDOM');\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react-dom/index.js\n ** module id = 160\n ** module chunks = 4\n **/","/*\n * GregorianCalendar class\n * @ignore\n * @author yiminghe@gmail.com\n */\n'use strict';\n\nvar toInt = parseInt;\nvar Utils = require('./utils');\nvar defaultLocale = require('./locale/en_US');\nvar Const = require('./const');\n\n/*\n * GregorianCalendar class.\n *\n * - no arguments:\n *   Constructs a default GregorianCalendar using the current time\n *   in the default time zone with the default locale.\n * - one argument locale:\n *   Constructs a GregorianCalendar\n *   based on the current time in the default time zone with the given locale.\n *\n * @class Date.Gregorian\n */\nfunction GregorianCalendar(loc) {\n  var locale = loc || defaultLocale;\n\n  this.locale = locale;\n\n  this.fields = [];\n\n  /*\n   * The currently set time for this date.\n   * @protected\n   * @type Number|undefined\n   */\n  this.time = undefined;\n  /*\n   * The timezoneOffset in minutes used by this date.\n   * @type Number\n   * @protected\n   */\n\n  this.timezoneOffset = locale.timezoneOffset;\n\n  /*\n   * The first day of the week\n   * @type Number\n   * @protected\n   */\n  this.firstDayOfWeek = locale.firstDayOfWeek;\n\n  /*\n   * The number of days required for the first week in a month or year,\n   * with possible values from 1 to 7.\n   * @@protected\n   * @type Number\n   */\n  this.minimalDaysInFirstWeek = locale.minimalDaysInFirstWeek;\n\n  this.fieldsComputed = false;\n}\n\nUtils.mix(GregorianCalendar, Const);\n\nUtils.mix(GregorianCalendar, {\n  Utils: Utils,\n\n  defaultLocale: defaultLocale,\n\n  /*\n   * Determines if the given year is a leap year.\n   * Returns true if the given year is a leap year. To specify BC year numbers,\n   * 1 - year number must be given. For example, year BC 4 is specified as -3.\n   * @param {Number} year the given year.\n   * @returns {Boolean} true if the given year is a leap year; false otherwise.\n   * @static\n   * @method\n   */\n  isLeapYear: Utils.isLeapYear,\n\n  /*\n   * Enum indicating year field of date\n   * @type Number\n   */\n  YEAR: 1,\n  /*\n   * Enum indicating month field of date\n   * @type Number\n   */\n  MONTH: 2,\n  /*\n   * Enum indicating the day of the month\n   * @type Number\n   */\n  DAY_OF_MONTH: 3,\n  /*\n   * Enum indicating the hour (24).\n   * @type Number\n   */\n  HOUR_OF_DAY: 4,\n  /*\n   * Enum indicating the minute of the day\n   * @type Number\n   */\n  MINUTES: 5,\n  /*\n   * Enum indicating the second of the day\n   * @type Number\n   */\n  SECONDS: 6,\n  /*\n   * Enum indicating the millisecond of the day\n   * @type Number\n   */\n  MILLISECONDS: 7,\n  /*\n   * Enum indicating the week number within the current year\n   * @type Number\n   */\n  WEEK_OF_YEAR: 8,\n  /*\n   * Enum indicating the week number within the current month\n   * @type Number\n   */\n  WEEK_OF_MONTH: 9,\n\n  /*\n   * Enum indicating the day of the day number within the current year\n   * @type Number\n   */\n  DAY_OF_YEAR: 10,\n  /*\n   * Enum indicating the day of the week\n   * @type Number\n   */\n  DAY_OF_WEEK: 11,\n  /*\n   * Enum indicating the day of the ordinal number of the day of the week\n   * @type Number\n   */\n  DAY_OF_WEEK_IN_MONTH: 12,\n\n  /*\n   * Enum indicating am\n   * @type Number\n   */\n  AM: 0,\n  /*\n   * Enum indicating pm\n   * @type Number\n   */\n  PM: 1\n});\n\nvar FIELDS = ['', 'Year', 'Month', 'DayOfMonth', 'HourOfDay', 'Minutes', 'Seconds', 'Milliseconds', 'WeekOfYear', 'WeekOfMonth', 'DayOfYear', 'DayOfWeek', 'DayOfWeekInMonth'];\n\nvar YEAR = GregorianCalendar.YEAR;\nvar MONTH = GregorianCalendar.MONTH;\nvar DAY_OF_MONTH = GregorianCalendar.DAY_OF_MONTH;\nvar HOUR_OF_DAY = GregorianCalendar.HOUR_OF_DAY;\nvar MINUTE = GregorianCalendar.MINUTES;\nvar SECONDS = GregorianCalendar.SECONDS;\n\nvar MILLISECONDS = GregorianCalendar.MILLISECONDS;\nvar DAY_OF_WEEK_IN_MONTH = GregorianCalendar.DAY_OF_WEEK_IN_MONTH;\nvar DAY_OF_YEAR = GregorianCalendar.DAY_OF_YEAR;\nvar DAY_OF_WEEK = GregorianCalendar.DAY_OF_WEEK;\n\nvar WEEK_OF_MONTH = GregorianCalendar.WEEK_OF_MONTH;\nvar WEEK_OF_YEAR = GregorianCalendar.WEEK_OF_YEAR;\n\nvar MONTH_LENGTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; // 0-based\nvar LEAP_MONTH_LENGTH = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; // 0-based\n\nvar ONE_SECOND = 1000;\nvar ONE_MINUTE = 60 * ONE_SECOND;\nvar ONE_HOUR = 60 * ONE_MINUTE;\nvar ONE_DAY = 24 * ONE_HOUR;\nvar ONE_WEEK = ONE_DAY * 7;\n\nvar EPOCH_OFFSET = 719163; // Fixed date of January 1, 1970 (Gregorian)\n\nvar mod = Utils.mod;\nvar _isLeapYear = Utils.isLeapYear;\nvar floorDivide = Math.floor;\n\nvar MIN_VALUES = [undefined, 1, // YEAR\nGregorianCalendar.JANUARY, // MONTH\n1, // DAY_OF_MONTH\n0, // HOUR_OF_DAY\n0, // MINUTE\n0, // SECONDS\n0, // MILLISECONDS\n\n1, // WEEK_OF_YEAR\nundefined, // WEEK_OF_MONTH\n\n1, // DAY_OF_YEAR\nGregorianCalendar.SUNDAY, // DAY_OF_WEEK\n1];\n\n// DAY_OF_WEEK_IN_MONTH\nvar MAX_VALUES = [undefined, 292278994, // YEAR\nGregorianCalendar.DECEMBER, // MONTH\nundefined, // DAY_OF_MONTH\n23, // HOUR_OF_DAY\n59, // MINUTE\n59, // SECONDS\n999, // MILLISECONDS\nundefined, // WEEK_OF_YEAR\nundefined, // WEEK_OF_MONTH\nundefined, // DAY_OF_YEAR\nGregorianCalendar.SATURDAY, // DAY_OF_WEEK\nundefined];\n\n// ------------------- private start\n\n// DAY_OF_WEEK_IN_MONTH\nfunction getMonthLength(year, month) {\n  return _isLeapYear(year) ? LEAP_MONTH_LENGTH[month] : MONTH_LENGTH[month];\n}\n\nfunction getYearLength(year) {\n  return _isLeapYear(year) ? 366 : 365;\n}\n\nfunction adjustDayOfMonth(self) {\n  var fields = self.fields;\n  var year = fields[YEAR];\n  var month = fields[MONTH];\n  var monthLen = getMonthLength(year, month);\n  var dayOfMonth = fields[DAY_OF_MONTH];\n  if (dayOfMonth > monthLen) {\n    self.set(DAY_OF_MONTH, monthLen);\n  }\n}\n\nfunction getDayOfWeekDateOnOrBefore(fixedDate, dayOfWeek) {\n  // 1.1.1 is monday\n  // one week has 7 days\n  return fixedDate - mod(fixedDate - dayOfWeek, 7);\n}\n\nfunction getWeekNumber(self, fixedDay1, fixedDate) {\n  var fixedDay1st = getDayOfWeekDateOnOrBefore(fixedDay1 + 6, self.firstDayOfWeek);\n  var nDays = fixedDay1st - fixedDay1;\n  if (nDays >= self.minimalDaysInFirstWeek) {\n    fixedDay1st -= 7;\n  }\n  var normalizedDayOfPeriod = fixedDate - fixedDay1st;\n  return floorDivide(normalizedDayOfPeriod / 7) + 1;\n}\n\n// ------------------- private end\n\nGregorianCalendar.prototype = {\n  constructor: GregorianCalendar,\n\n  isGregorianCalendar: 1,\n\n  /*\n   * Determines if current year is a leap year.\n   * Returns true if the given year is a leap year. To specify BC year numbers,\n   * 1 - year number must be given. For example, year BC 4 is specified as -3.\n   * @returns {Boolean} true if the given year is a leap year; false otherwise.\n   * @method\n   * @member Date.Gregorian\n   */\n  isLeapYear: function isLeapYear() {\n    return _isLeapYear(this.getYear());\n  },\n\n  /*\n   * Return local info for current date instance\n   * @returns {Object}\n   */\n  getLocale: function getLocale() {\n    return this.locale;\n  },\n\n  /*\n   * Returns the minimum value for\n   * the given calendar field of this GregorianCalendar instance.\n   * The minimum value is defined as the smallest value\n   * returned by the get method for any possible time value,\n   * taking into consideration the current values of the getFirstDayOfWeek,\n   * getMinimalDaysInFirstWeek.\n   * @param field the calendar field.\n   * @returns {Number} the minimum value for the given calendar field.\n   */\n  getActualMinimum: function getActualMinimum(field) {\n    if (MIN_VALUES[field] !== undefined) {\n      return MIN_VALUES[field];\n    }\n    if (field === WEEK_OF_MONTH) {\n      var cal = this.clone();\n      cal.clear();\n      cal.set(this.fields[YEAR], this.fields[MONTH], 1);\n      return cal.get(WEEK_OF_MONTH);\n    }\n\n    throw new Error('minimum value not defined!');\n  },\n\n  /*\n   * Returns the maximum value for the given calendar field\n   * of this GregorianCalendar instance.\n   * The maximum value is defined as the largest value returned\n   * by the get method for any possible time value, taking into consideration\n   * the current values of the getFirstDayOfWeek, getMinimalDaysInFirstWeek methods.\n   * @param field the calendar field.\n   * @returns {Number} the maximum value for the given calendar field.\n   */\n  getActualMaximum: function getActualMaximum(field) {\n    if (MAX_VALUES[field] !== undefined) {\n      return MAX_VALUES[field];\n    }\n    var value = undefined;\n    var fields = this.fields;\n    switch (field) {\n      case DAY_OF_MONTH:\n        value = getMonthLength(fields[YEAR], fields[MONTH]);\n        break;\n\n      case WEEK_OF_YEAR:\n        var endOfYear = this.clone();\n        endOfYear.clear();\n        endOfYear.set(fields[YEAR], GregorianCalendar.DECEMBER, 31);\n        value = endOfYear.get(WEEK_OF_YEAR);\n        if (value === 1) {\n          value = 52;\n        }\n        break;\n\n      case WEEK_OF_MONTH:\n        var endOfMonth = this.clone();\n        endOfMonth.clear();\n        endOfMonth.set(fields[YEAR], fields[MONTH], getMonthLength(fields[YEAR], fields[MONTH]));\n        value = endOfMonth.get(WEEK_OF_MONTH);\n        break;\n\n      case DAY_OF_YEAR:\n        value = getYearLength(fields[YEAR]);\n        break;\n\n      case DAY_OF_WEEK_IN_MONTH:\n        value = toInt((getMonthLength(fields[YEAR], fields[MONTH]) - 1) / 7) + 1;\n        break;\n      default:\n        break;\n    }\n    if (value === undefined) {\n      throw new Error('maximum value not defined!');\n    }\n    return value;\n  },\n\n  /*\n   * Determines if the given calendar field has a value set,\n   * including cases that the value has been set by internal fields calculations\n   * triggered by a get method call.\n   * @param field the calendar field to be cleared.\n   * @returns {boolean} true if the given calendar field has a value set; false otherwise.\n   */\n  isSet: function isSet(field) {\n    return this.fields[field] !== undefined;\n  },\n\n  /*\n   * Converts the time value (millisecond offset from the Epoch)\n   * to calendar field values.\n   * @protected\n   */\n  computeFields: function computeFields() {\n    var time = this.time;\n    var timezoneOffset = this.timezoneOffset * ONE_MINUTE;\n    var fixedDate = toInt(timezoneOffset / ONE_DAY);\n    var timeOfDay = timezoneOffset % ONE_DAY;\n    fixedDate += toInt(time / ONE_DAY);\n    timeOfDay += time % ONE_DAY;\n    if (timeOfDay >= ONE_DAY) {\n      timeOfDay -= ONE_DAY;\n      fixedDate++;\n    } else {\n      while (timeOfDay < 0) {\n        timeOfDay += ONE_DAY;\n        fixedDate--;\n      }\n    }\n\n    fixedDate += EPOCH_OFFSET;\n\n    var date = Utils.getGregorianDateFromFixedDate(fixedDate);\n\n    var year = date.year;\n\n    var fields = this.fields;\n    fields[YEAR] = year;\n    fields[MONTH] = date.month;\n    fields[DAY_OF_MONTH] = date.dayOfMonth;\n    fields[DAY_OF_WEEK] = date.dayOfWeek;\n\n    if (timeOfDay !== 0) {\n      fields[HOUR_OF_DAY] = toInt(timeOfDay / ONE_HOUR);\n      var r = timeOfDay % ONE_HOUR;\n      fields[MINUTE] = toInt(r / ONE_MINUTE);\n      r %= ONE_MINUTE;\n      fields[SECONDS] = toInt(r / ONE_SECOND);\n      fields[MILLISECONDS] = r % ONE_SECOND;\n    } else {\n      fields[HOUR_OF_DAY] = fields[MINUTE] = fields[SECONDS] = fields[MILLISECONDS] = 0;\n    }\n\n    var fixedDateJan1 = Utils.getFixedDate(year, GregorianCalendar.JANUARY, 1);\n    var dayOfYear = fixedDate - fixedDateJan1 + 1;\n    var fixDateMonth1 = fixedDate - date.dayOfMonth + 1;\n\n    fields[DAY_OF_YEAR] = dayOfYear;\n    fields[DAY_OF_WEEK_IN_MONTH] = toInt((date.dayOfMonth - 1) / 7) + 1;\n\n    var weekOfYear = getWeekNumber(this, fixedDateJan1, fixedDate);\n\n    // 本周没有足够的时间在当前年\n    if (weekOfYear === 0) {\n      // If the date belongs to the last week of the\n      // previous year, use the week number of \"12/31\" of\n      // the \"previous\" year.\n      var fixedDec31 = fixedDateJan1 - 1;\n      var prevJan1 = fixedDateJan1 - getYearLength(year - 1);\n      weekOfYear = getWeekNumber(this, prevJan1, fixedDec31);\n    } else\n      // 本周是年末最后一周,可能有足够的时间在新的一年\n      if (weekOfYear >= 52) {\n        var nextJan1 = fixedDateJan1 + getYearLength(year);\n        var nextJan1st = getDayOfWeekDateOnOrBefore(nextJan1 + 6, this.firstDayOfWeek);\n        var nDays = nextJan1st - nextJan1;\n        // 本周有足够天数在新的一年\n        if (nDays >= this.minimalDaysInFirstWeek &&\n        // 当天确实在本周,weekOfYear === 53 时是不需要这个判断\n        fixedDate >= nextJan1st - 7) {\n          weekOfYear = 1;\n        }\n      }\n\n    fields[WEEK_OF_YEAR] = weekOfYear;\n    fields[WEEK_OF_MONTH] = getWeekNumber(this, fixDateMonth1, fixedDate);\n\n    this.fieldsComputed = true;\n  },\n\n  /*\n   * Converts calendar field values to the time value\n   * (millisecond offset from the Epoch).\n   * @protected\n   */\n  computeTime: function computeTime() {\n    var year = undefined;\n    var fields = this.fields;\n    if (this.isSet(YEAR)) {\n      year = fields[YEAR];\n    } else {\n      year = new Date().getFullYear();\n    }\n    var timeOfDay = 0;\n    if (this.isSet(HOUR_OF_DAY)) {\n      timeOfDay += fields[HOUR_OF_DAY];\n    }\n    timeOfDay *= 60;\n    timeOfDay += fields[MINUTE] || 0;\n    timeOfDay *= 60;\n    timeOfDay += fields[SECONDS] || 0;\n    timeOfDay *= 1000;\n    timeOfDay += fields[MILLISECONDS] || 0;\n    var fixedDate = 0;\n    fields[YEAR] = year;\n    fixedDate = fixedDate + this.getFixedDate();\n    // millis represents local wall-clock time in milliseconds.\n    var millis = (fixedDate - EPOCH_OFFSET) * ONE_DAY + timeOfDay;\n    millis -= this.timezoneOffset * ONE_MINUTE;\n    this.time = millis;\n    this.computeFields();\n  },\n\n  /*\n   * Fills in any unset fields in the calendar fields. First,\n   * the computeTime() method is called if the time value (millisecond offset from the Epoch)\n   * has not been calculated from calendar field values.\n   * Then, the computeFields() method is called to calculate all calendar field values.\n   * @protected\n   */\n  complete: function complete() {\n    if (this.time === undefined) {\n      this.computeTime();\n    }\n    if (!this.fieldsComputed) {\n      this.computeFields();\n    }\n  },\n\n  getFixedDate: function getFixedDate() {\n    var self = this;\n\n    var fields = self.fields;\n\n    var firstDayOfWeekCfg = self.firstDayOfWeek;\n\n    var year = fields[YEAR];\n\n    var month = GregorianCalendar.JANUARY;\n\n    if (self.isSet(MONTH)) {\n      month = fields[MONTH];\n      if (month > GregorianCalendar.DECEMBER) {\n        year += toInt(month / 12);\n        month %= 12;\n      } else if (month < GregorianCalendar.JANUARY) {\n        year += floorDivide(month / 12);\n        month = mod(month, 12);\n      }\n    }\n\n    // Get the fixed date since Jan 1, 1 (Gregorian). We are on\n    // the first day of either `month' or January in 'year'.\n    var fixedDate = Utils.getFixedDate(year, month, 1);\n    var firstDayOfWeek = undefined;\n    var dayOfWeek = self.firstDayOfWeek;\n\n    if (self.isSet(DAY_OF_WEEK)) {\n      dayOfWeek = fields[DAY_OF_WEEK];\n    }\n\n    if (self.isSet(MONTH)) {\n      if (self.isSet(DAY_OF_MONTH)) {\n        fixedDate += fields[DAY_OF_MONTH] - 1;\n      } else {\n        if (self.isSet(WEEK_OF_MONTH)) {\n          firstDayOfWeek = getDayOfWeekDateOnOrBefore(fixedDate + 6, firstDayOfWeekCfg);\n\n          // If we have enough days in the first week, then\n          // move to the previous week.\n          if (firstDayOfWeek - fixedDate >= self.minimalDaysInFirstWeek) {\n            firstDayOfWeek -= 7;\n          }\n\n          if (dayOfWeek !== firstDayOfWeekCfg) {\n            firstDayOfWeek = getDayOfWeekDateOnOrBefore(firstDayOfWeek + 6, dayOfWeek);\n          }\n\n          fixedDate = firstDayOfWeek + 7 * (fields[WEEK_OF_MONTH] - 1);\n        } else {\n          var dowim = undefined;\n          if (self.isSet(DAY_OF_WEEK_IN_MONTH)) {\n            dowim = fields[DAY_OF_WEEK_IN_MONTH];\n          } else {\n            dowim = 1;\n          }\n          var lastDate = 7 * dowim;\n          if (dowim < 0) {\n            lastDate = getMonthLength(year, month) + 7 * (dowim + 1);\n          }\n          fixedDate = getDayOfWeekDateOnOrBefore(fixedDate + lastDate - 1, dayOfWeek);\n        }\n      }\n    } else {\n      // We are on the first day of the year.\n      if (self.isSet(DAY_OF_YEAR)) {\n        fixedDate += fields[DAY_OF_YEAR] - 1;\n      } else if (self.isSet(WEEK_OF_YEAR)) {\n        firstDayOfWeek = getDayOfWeekDateOnOrBefore(fixedDate + 6, firstDayOfWeekCfg);\n        // If we have enough days in the first week, then move\n        // to the previous week.\n        if (firstDayOfWeek - fixedDate >= self.minimalDaysInFirstWeek) {\n          firstDayOfWeek -= 7;\n        }\n        if (dayOfWeek !== firstDayOfWeekCfg) {\n          firstDayOfWeek = getDayOfWeekDateOnOrBefore(firstDayOfWeek + 6, dayOfWeek);\n        }\n        fixedDate = firstDayOfWeek + 7 * (fields[WEEK_OF_YEAR] - 1);\n      }\n    }\n\n    return fixedDate;\n  },\n\n  /*\n   * Returns this Calendar's time value in milliseconds\n   * @member Date.Gregorian\n   * @returns {Number} the current time as UTC milliseconds from the epoch.\n   */\n  getTime: function getTime() {\n    if (this.time === undefined) {\n      this.computeTime();\n    }\n    return this.time;\n  },\n\n  /*\n   * Sets this Calendar's current time from the given long value.\n   * @param time the new time in UTC milliseconds from the epoch.\n   */\n  setTime: function setTime(time) {\n    this.time = time;\n    this.fieldsComputed = false;\n    this.complete();\n  },\n\n  /*\n   * Returns the value of the given calendar field.\n   * @param field the given calendar field.\n   * @returns {Number} the value for the given calendar field.\n   */\n  get: function get(field) {\n    this.complete();\n    return this.fields[field];\n  },\n\n  /*\n   * Returns the year of the given calendar field.\n   * @method getYear\n   * @returns {Number} the year for the given calendar field.\n   */\n\n  /*\n   * Returns the month of the given calendar field.\n   * @method getMonth\n   * @returns {Number} the month for the given calendar field.\n   */\n\n  /*\n   * Returns the day of month of the given calendar field.\n   * @method getDayOfMonth\n   * @returns {Number} the day of month for the given calendar field.\n   */\n\n  /*\n   * Returns the hour of day of the given calendar field.\n   * @method getHourOfDay\n   * @returns {Number} the hour of day for the given calendar field.\n   */\n\n  /*\n   * Returns the minute of the given calendar field.\n   * @method getMinute\n   * @returns {Number} the minute for the given calendar field.\n   */\n\n  /*\n   * Returns the second of the given calendar field.\n   * @method getSecond\n   * @returns {Number} the second for the given calendar field.\n   */\n\n  /*\n   * Returns the millisecond of the given calendar field.\n   * @method getMilliSecond\n   * @returns {Number} the millisecond for the given calendar field.\n   */\n\n  /*\n   * Returns the week of year of the given calendar field.\n   * @method getWeekOfYear\n   * @returns {Number} the week of year for the given calendar field.\n   */\n\n  /*\n   * Returns the week of month of the given calendar field.\n   * @method getWeekOfMonth\n   * @returns {Number} the week of month for the given calendar field.\n   */\n\n  /*\n   * Returns the day of year of the given calendar field.\n   * @method getDayOfYear\n   * @returns {Number} the day of year for the given calendar field.\n   */\n\n  /*\n   * Returns the day of week of the given calendar field.\n   * @method getDayOfWeek\n   * @returns {Number} the day of week for the given calendar field.\n   */\n\n  /*\n   * Returns the day of week in month of the given calendar field.\n   * @method getDayOfWeekInMonth\n   * @returns {Number} the day of week in month for the given calendar field.\n   */\n\n  /*\n   * Sets the given calendar field to the given value.\n   * @param field the given calendar field.\n   * @param v the value to be set for the given calendar field.\n   */\n  set: function set(field, v) {\n    var len = arguments.length;\n    if (len === 2) {\n      this.fields[field] = v;\n    } else if (len < MILLISECONDS + 1) {\n      for (var i = 0; i < len; i++) {\n        this.fields[YEAR + i] = arguments[i];\n      }\n    } else {\n      throw new Error('illegal arguments for GregorianCalendar set');\n    }\n    this.time = undefined;\n  },\n\n  /*\n   * Set the year of the given calendar field.\n   * @method setYear\n   */\n\n  /*\n   * Set the month of the given calendar field.\n   * @method setMonth\n   */\n\n  /*\n   * Set the day of month of the given calendar field.\n   * @method setDayOfMonth\n   */\n\n  /*\n   * Set the hour of day of the given calendar field.\n   * @method setHourOfDay\n   */\n\n  /*\n   * Set the minute of the given calendar field.\n   * @method setMinute\n   */\n\n  /*\n   * Set the second of the given calendar field.\n   * @method setSecond\n   */\n\n  /*\n   * Set the millisecond of the given calendar field.\n   * @method setMilliSecond\n   */\n\n  /*\n   * Set the week of year of the given calendar field.\n   * @method setWeekOfYear\n   */\n\n  /*\n   * Set the week of month of the given calendar field.\n   * @method setWeekOfMonth\n   */\n\n  /*\n   * Set the day of year of the given calendar field.\n   * @method setDayOfYear\n   */\n\n  /*\n   * Set the day of week of the given calendar field.\n   * @method setDayOfWeek\n   */\n\n  /*\n   * Set the day of week in month of the given calendar field.\n   * @method setDayOfWeekInMonth\n   */\n\n  /*\n   * add for specified field based on two rules:\n   *\n   *  - Add rule 1. The value of field after the call minus the value of field before the\n   *  call is amount, modulo any overflow that has occurred in field\n   *  Overflow occurs when a field value exceeds its range and,\n   *  as a result, the next larger field is incremented or\n   *  decremented and the field value is adjusted back into its range.\n   *\n   *  - Add rule 2. If a smaller field is expected to be invariant,\n   *  but it is impossible for it to be equal to its\n   *  prior value because of changes in its minimum or maximum after\n   *  field is changed, then its value is adjusted to be as close\n   *  as possible to its expected value. A smaller field represents a\n   *  smaller unit of time. HOUR_OF_DAY is a smaller field than\n   *  DAY_OF_MONTH. No adjustment is made to smaller fields\n   *  that are not expected to be invariant. The calendar system\n   *  determines what fields are expected to be invariant.\n   *\n   *\n   *      @example\n   *      use('date/gregorian',function(S, GregorianCalendar){\n   *          const d = new GregorianCalendar();\n   *          d.set(2012, GregorianCalendar.JANUARY, 31);\n   *          d.add(Gregorian.MONTH,1);\n   *          // 2012-2-29\n   *          document.writeln('<p>'+d.getYear()+'-'+d.getMonth()+'-'+d.getDayOfWeek())\n   *          d.add(Gregorian.MONTH,12);\n   *          // 2013-2-28\n   *          document.writeln('<p>'+d.getYear()+'-'+d.getMonth()+'-'+d.getDayOfWeek())\n   *      });\n   *\n   * @param field the calendar field.\n   * @param {Number} amount he amount of date or time to be added to the field.\n   */\n  add: function add(field, a) {\n    if (!a) {\n      return;\n    }\n    var amount = a;\n    var self = this;\n    var fields = self.fields;\n    // computer and retrieve original value\n    var value = self.get(field);\n    if (field === YEAR) {\n      value += amount;\n      self.set(YEAR, value);\n      adjustDayOfMonth(self);\n    } else if (field === MONTH) {\n      value += amount;\n      var yearAmount = floorDivide(value / 12);\n      value = mod(value, 12);\n      if (yearAmount) {\n        self.set(YEAR, fields[YEAR] + yearAmount);\n      }\n      self.set(MONTH, value);\n      adjustDayOfMonth(self);\n    } else {\n      switch (field) {\n        case HOUR_OF_DAY:\n          amount *= ONE_HOUR;\n          break;\n        case MINUTE:\n          amount *= ONE_MINUTE;\n          break;\n        case SECONDS:\n          amount *= ONE_SECOND;\n          break;\n        case MILLISECONDS:\n          break;\n        case WEEK_OF_MONTH:\n        case WEEK_OF_YEAR:\n        case DAY_OF_WEEK_IN_MONTH:\n          amount *= ONE_WEEK;\n          break;\n        case DAY_OF_WEEK:\n        case DAY_OF_YEAR:\n        case DAY_OF_MONTH:\n          amount *= ONE_DAY;\n          break;\n        default:\n          throw new Error('illegal field for add');\n      }\n      self.setTime(self.time + amount);\n    }\n  },\n\n  /*\n   * add the year of the given calendar field.\n   * @method addYear\n   * @param {Number} amount the signed amount to add to field.\n   */\n\n  /*\n   * add the month of the given calendar field.\n   * @method addMonth\n   * @param {Number} amount the signed amount to add to field.\n   */\n\n  /*\n   * add the day of month of the given calendar field.\n   * @method addDayOfMonth\n   * @param {Number} amount the signed amount to add to field.\n   */\n\n  /*\n   * add the hour of day of the given calendar field.\n   * @method addHourOfDay\n   * @param {Number} amount the signed amount to add to field.\n   */\n\n  /*\n   * add the minute of the given calendar field.\n   * @method addMinute\n   * @param {Number} amount the signed amount to add to field.\n   */\n\n  /*\n   * add the second of the given calendar field.\n   * @method addSecond\n   * @param {Number} amount the signed amount to add to field.\n   */\n\n  /*\n   * add the millisecond of the given calendar field.\n   * @method addMilliSecond\n   * @param {Number} amount the signed amount to add to field.\n   */\n\n  /*\n   * add the week of year of the given calendar field.\n   * @method addWeekOfYear\n   * @param {Number} amount the signed amount to add to field.\n   */\n\n  /*\n   * add the week of month of the given calendar field.\n   * @method addWeekOfMonth\n   * @param {Number} amount the signed amount to add to field.\n   */\n\n  /*\n   * add the day of year of the given calendar field.\n   * @method addDayOfYear\n   * @param {Number} amount the signed amount to add to field.\n   */\n\n  /*\n   * add the day of week of the given calendar field.\n   * @method addDayOfWeek\n   * @param {Number} amount the signed amount to add to field.\n   */\n\n  /*\n   * add the day of week in month of the given calendar field.\n   * @method addDayOfWeekInMonth\n   * @param {Number} amount the signed amount to add to field.\n   */\n\n  /*\n   * Get rolled value for the field\n   * @protected\n   */\n  getRolledValue: function getRolledValue(value, a, min, max) {\n    var amount = a;\n    var diff = value - min;\n    var range = max - min + 1;\n    amount %= range;\n    return min + (diff + amount + range) % range;\n  },\n\n  /*\n   * Adds a signed amount to the specified calendar field without changing larger fields.\n   * A negative roll amount means to subtract from field without changing\n   * larger fields. If the specified amount is 0, this method performs nothing.\n   *\n   *\n   *\n   *      @example\n   *      const d = new GregorianCalendar();\n   *      d.set(1999, GregorianCalendar.AUGUST, 31);\n   *      // 1999-4-30\n   *      // Tuesday June 1, 1999\n   *      d.set(1999, GregorianCalendar.JUNE, 1);\n   *      d.add(Gregorian.WEEK_OF_MONTH,-1); // === d.add(Gregorian.WEEK_OF_MONTH,\n   *      d.get(Gregorian.WEEK_OF_MONTH));\n   *      // 1999-06-29\n   *\n   *\n   * @param field the calendar field.\n   * @param {Number} amount the signed amount to add to field.\n   */\n  roll: function roll(field, amount) {\n    if (!amount) {\n      return;\n    }\n    var self = this;\n    // computer and retrieve original value\n    var value = self.get(field);\n    var min = self.getActualMinimum(field);\n    var max = self.getActualMaximum(field);\n    value = self.getRolledValue(value, amount, min, max);\n\n    self.set(field, value);\n\n    // consider compute time priority\n    switch (field) {\n      case MONTH:\n        adjustDayOfMonth(self);\n        break;\n      default:\n        // other fields are set already when get\n        self.updateFieldsBySet(field);\n        break;\n    }\n  },\n\n  /*\n   * keep field stable.\n   *\n   * 2015-09-29 setMonth 2 vs rollSetMonth 2\n   *\n   */\n  rollSet: function rollSet(field, v) {\n    this.set(field, v);\n    switch (field) {\n      case MONTH:\n        adjustDayOfMonth(this);\n        break;\n      default:\n        // other fields are set already when get\n        this.updateFieldsBySet(field);\n        break;\n    }\n  },\n\n  /*\n   * roll the year of the given calendar field.\n   * @method rollYear\n   * @param {Number} amount the signed amount to add to field.\n   */\n\n  /*\n   * roll the month of the given calendar field.\n   * @param {Number} amount the signed amount to add to field.\n   * @method rollMonth\n   */\n\n  /*\n   * roll the day of month of the given calendar field.\n   * @method rollDayOfMonth\n   * @param {Number} amount the signed amount to add to field.\n   */\n\n  /*\n   * roll the hour of day of the given calendar field.\n   * @method rollHourOfDay\n   * @param {Number} amount the signed amount to add to field.\n   */\n\n  /*\n   * roll the minute of the given calendar field.\n   * @method rollMinute\n   * @param {Number} amount the signed amount to add to field.\n   */\n\n  /*\n   * roll the second of the given calendar field.\n   * @method rollSecond\n   * @param {Number} amount the signed amount to add to field.\n   */\n\n  /*\n   * roll the millisecond of the given calendar field.\n   * @method rollMilliSecond\n   * @param {Number} amount the signed amount to add to field.\n   */\n\n  /*\n   * roll the week of year of the given calendar field.\n   * @method rollWeekOfYear\n   * @param {Number} amount the signed amount to add to field.\n   */\n\n  /*\n   * roll the week of month of the given calendar field.\n   * @method rollWeekOfMonth\n   * @param {Number} amount the signed amount to add to field.\n   */\n\n  /*\n   * roll the day of year of the given calendar field.\n   * @method rollDayOfYear\n   * @param {Number} amount the signed amount to add to field.\n   */\n\n  /*\n   * roll the day of week of the given calendar field.\n   * @method rollDayOfWeek\n   * @param {Number} amount the signed amount to add to field.\n   */\n\n  /*\n   * remove other priority fields when call getFixedDate\n   * precondition: other fields are all set or computed\n   * @protected\n   */\n  updateFieldsBySet: function updateFieldsBySet(field) {\n    var fields = this.fields;\n    switch (field) {\n      case WEEK_OF_MONTH:\n        fields[DAY_OF_MONTH] = undefined;\n        break;\n      case DAY_OF_YEAR:\n        fields[MONTH] = undefined;\n        break;\n      case DAY_OF_WEEK:\n        fields[DAY_OF_MONTH] = undefined;\n        break;\n      case WEEK_OF_YEAR:\n        fields[DAY_OF_YEAR] = undefined;\n        fields[MONTH] = undefined;\n        break;\n      default:\n        break;\n    }\n  },\n\n  /*\n   * get current date instance's timezone offset\n   * @returns {Number}\n   */\n  getTimezoneOffset: function getTimezoneOffset() {\n    return this.timezoneOffset;\n  },\n\n  /*\n   * set current date instance's timezone offset\n   */\n  setTimezoneOffset: function setTimezoneOffset(timezoneOffset) {\n    if (this.timezoneOffset !== timezoneOffset) {\n      this.fieldsComputed = undefined;\n      this.timezoneOffset = timezoneOffset;\n    }\n  },\n\n  /*\n   * set first day of week for current date instance\n   */\n  setFirstDayOfWeek: function setFirstDayOfWeek(firstDayOfWeek) {\n    if (this.firstDayOfWeek !== firstDayOfWeek) {\n      this.firstDayOfWeek = firstDayOfWeek;\n      this.fieldsComputed = false;\n    }\n  },\n\n  /*\n   * Gets what the first day of the week is; e.g., SUNDAY in the U.S., MONDAY in France.\n   * @returns {Number} the first day of the week.\n   */\n  getFirstDayOfWeek: function getFirstDayOfWeek() {\n    return this.firstDayOfWeek;\n  },\n\n  /*\n   * Sets what the minimal days required in the first week of the year are; For example,\n   * if the first week is defined as one that contains the first day of the first month of a year,\n   * call this method with value 1.\n   * If it must be a full week, use value 7.\n   * @param minimalDaysInFirstWeek the given minimal days required in the first week of the year.\n   */\n  setMinimalDaysInFirstWeek: function setMinimalDaysInFirstWeek(minimalDaysInFirstWeek) {\n    if (this.minimalDaysInFirstWeek !== minimalDaysInFirstWeek) {\n      this.minimalDaysInFirstWeek = minimalDaysInFirstWeek;\n      this.fieldsComputed = false;\n    }\n  },\n\n  /*\n   * Gets what the minimal days required in the first week of the year are; e.g.,\n   * if the first week is defined as one that contains the first day of the first month of a year,\n   * this method returns 1.\n   * If the minimal days required must be a full week, this method returns 7.\n   * @returns {Number} the minimal days required in the first week of the year.\n   */\n  getMinimalDaysInFirstWeek: function getMinimalDaysInFirstWeek() {\n    return this.minimalDaysInFirstWeek;\n  },\n\n  /*\n   * Returns the number of weeks in the week year\n   * represented by this GregorianCalendar.\n   *\n   * For example, if this GregorianCalendar's date is\n   * December 31, 2008 with the ISO\n   * 8601 compatible setting, this method will return 53 for the\n   * period: December 29, 2008 to January 3, 2010\n   * while getActualMaximum(WEEK_OF_YEAR) will return\n   * 52 for the period: December 31, 2007 to December 28, 2008.\n   *\n   * @return {Number} the number of weeks in the week year.\n   */\n  getWeeksInWeekYear: function getWeeksInWeekYear() {\n    var weekYear = this.getWeekYear();\n    if (weekYear === this.get(YEAR)) {\n      return this.getActualMaximum(WEEK_OF_YEAR);\n    }\n    // Use the 2nd week for calculating the max of WEEK_OF_YEAR\n    var gc = this.clone();\n    gc.clear();\n    gc.setWeekDate(weekYear, 2, this.get(DAY_OF_WEEK));\n    return gc.getActualMaximum(WEEK_OF_YEAR);\n  },\n\n  /*\n   * Returns the week year represented by this GregorianCalendar.\n   * The dates in the weeks between 1 and the\n   * maximum week number of the week year have the same week year value\n   * that may be one year before or after the calendar year value.\n   *\n   * @return {Number} the week year represented by this GregorianCalendar.\n   */\n  getWeekYear: function getWeekYear() {\n    var year = this.get(YEAR); // implicitly  complete\n    var weekOfYear = this.get(WEEK_OF_YEAR);\n    var month = this.get(MONTH);\n    if (month === GregorianCalendar.JANUARY) {\n      if (weekOfYear >= 52) {\n        --year;\n      }\n    } else if (month === GregorianCalendar.DECEMBER) {\n      if (weekOfYear === 1) {\n        ++year;\n      }\n    }\n    return year;\n  },\n  /*\n   * Sets this GregorianCalendar to the date given by the date specifiers - weekYear,\n   * weekOfYear, and dayOfWeek. weekOfYear follows the WEEK_OF_YEAR numbering.\n   * The dayOfWeek value must be one of the DAY_OF_WEEK values: SUNDAY to SATURDAY.\n   *\n   * @param weekYear    the week year\n   * @param weekOfYear  the week number based on weekYear\n   * @param dayOfWeek   the day of week value\n   */\n  setWeekDate: function setWeekDate(weekYear, weekOfYear, dayOfWeek) {\n    if (dayOfWeek < GregorianCalendar.SUNDAY || dayOfWeek > GregorianCalendar.SATURDAY) {\n      throw new Error('invalid dayOfWeek: ' + dayOfWeek);\n    }\n    var fields = this.fields;\n    // To avoid changing the time of day fields by date\n    // calculations, use a clone with the GMT time zone.\n    var gc = this.clone();\n    gc.clear();\n    gc.setTimezoneOffset(0);\n    gc.set(YEAR, weekYear);\n    gc.set(WEEK_OF_YEAR, 1);\n    gc.set(DAY_OF_WEEK, this.getFirstDayOfWeek());\n    var days = dayOfWeek - this.getFirstDayOfWeek();\n    if (days < 0) {\n      days += 7;\n    }\n    days += 7 * (weekOfYear - 1);\n    if (days !== 0) {\n      gc.add(DAY_OF_YEAR, days);\n    } else {\n      gc.complete();\n    }\n    fields[YEAR] = gc.get(YEAR);\n    fields[MONTH] = gc.get(MONTH);\n    fields[DAY_OF_MONTH] = gc.get(DAY_OF_MONTH);\n    this.complete();\n  },\n  /*\n   * Creates and returns a copy of this object.\n   * @returns {Date.Gregorian}\n   */\n  clone: function clone() {\n    if (this.time === undefined) {\n      this.computeTime();\n    }\n    var cal = new GregorianCalendar(this.locale);\n    cal.setTimezoneOffset(cal.getTimezoneOffset());\n    cal.setFirstDayOfWeek(cal.getFirstDayOfWeek());\n    cal.setMinimalDaysInFirstWeek(cal.getMinimalDaysInFirstWeek());\n    cal.setTime(this.time);\n    return cal;\n  },\n\n  /*\n   * Compares this GregorianCalendar to the specified Object.\n   * The result is true if and only if the argument is a GregorianCalendar object\n   * that represents the same time value (millisecond offset from the Epoch)\n   * under the same Calendar parameters and Gregorian change date as this object.\n   * @param {Date.Gregorian} obj the object to compare with.\n   * @returns {boolean} true if this object is equal to obj; false otherwise.\n   */\n  equals: function equals(obj) {\n    return this.getTime() === obj.getTime() && this.firstDayOfWeek === obj.firstDayOfWeek && this.timezoneOffset === obj.timezoneOffset && this.minimalDaysInFirstWeek === obj.minimalDaysInFirstWeek;\n  },\n\n  /*\n   * Sets all the calendar field values or specified field and the time value\n   * (millisecond offset from the Epoch) of this Calendar undefined.\n   * This means that isSet() will return false for all the calendar fields,\n   * and the date and time calculations will treat the fields as if they had never been set.\n   * @param [field] the calendar field to be cleared.\n   */\n  clear: function clear(field) {\n    if (field === undefined) {\n      this.field = [];\n    } else {\n      this.fields[field] = undefined;\n    }\n    this.time = undefined;\n    this.fieldsComputed = false;\n  }\n};\n\nvar GregorianCalendarProto = GregorianCalendar.prototype;\n\nUtils.each(FIELDS, function (f, index) {\n  if (f) {\n    GregorianCalendarProto['get' + f] = function get() {\n      return this.get(index);\n    };\n\n    GregorianCalendarProto['isSet' + f] = function isSet() {\n      return this.isSet(index);\n    };\n\n    GregorianCalendarProto['set' + f] = function set(v) {\n      return this.set(index, v);\n    };\n\n    GregorianCalendarProto['add' + f] = function add(v) {\n      return this.add(index, v);\n    };\n\n    GregorianCalendarProto['roll' + f] = function roll(v) {\n      return this.roll(index, v);\n    };\n\n    GregorianCalendarProto['rollSet' + f] = function rollSet(v) {\n      return this.rollSet(index, v);\n    };\n  }\n});\n\nmodule.exports = GregorianCalendar;\n/*\n http://docs.oracle.com/javase/7/docs/api/java/util/GregorianCalendar.html\n\n TODO\n - day saving time\n - i18n\n - julian calendar\n */\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/gregorian-calendar/lib/gregorian-calendar.js\n ** module id = 161\n ** module chunks = 4\n **/","/*\n * utils for gregorian date\n * @ignore\n * @author yiminghe@gmail.com\n */\n\n'use strict';\n\nvar Const = require('./const');\nvar floor = Math.floor;\nvar ACCUMULATED_DAYS_IN_MONTH\n//   1/1 2/1 3/1 4/1 5/1 6/1 7/1 8/1 9/1 10/1 11/1 12/1\n= [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];\n\nvar ACCUMULATED_DAYS_IN_MONTH_LEAP\n//   1/1 2/1   3/1   4/1   5/1   6/1   7/1   8/1   9/1\n// 10/1   11/1   12/1\n= [0, 31, 59 + 1, 90 + 1, 120 + 1, 151 + 1, 181 + 1, 212 + 1, 243 + 1, 273 + 1, 304 + 1, 334 + 1];\n\nvar DAYS_OF_YEAR = 365;\nvar DAYS_OF_4YEAR = 365 * 4 + 1;\nvar DAYS_OF_100YEAR = DAYS_OF_4YEAR * 25 - 1;\nvar DAYS_OF_400YEAR = DAYS_OF_100YEAR * 4 + 1;\nvar _exports = {};\n\nfunction getDayOfYear(year, month, dayOfMonth) {\n  return dayOfMonth + (_exports.isLeapYear(year) ? ACCUMULATED_DAYS_IN_MONTH_LEAP[month] : ACCUMULATED_DAYS_IN_MONTH[month]);\n}\n\nfunction getDayOfWeekFromFixedDate(fixedDate) {\n  // The fixed day 1 (January 1, 1 Gregorian) is Monday.\n  if (fixedDate >= 0) {\n    return fixedDate % 7;\n  }\n  return _exports.mod(fixedDate, 7);\n}\n\nfunction getGregorianYearFromFixedDate(fixedDate) {\n  var d0 = undefined;\n  var d1 = undefined;\n  var d2 = undefined;\n  var d3 = undefined;\n  var n400 = undefined;\n  var n100 = undefined;\n  var n4 = undefined;\n  var n1 = undefined;\n  var year = undefined;\n  d0 = fixedDate - 1;\n\n  n400 = floor(d0 / DAYS_OF_400YEAR);\n  d1 = _exports.mod(d0, DAYS_OF_400YEAR);\n  n100 = floor(d1 / DAYS_OF_100YEAR);\n  d2 = _exports.mod(d1, DAYS_OF_100YEAR);\n  n4 = floor(d2 / DAYS_OF_4YEAR);\n  d3 = _exports.mod(d2, DAYS_OF_4YEAR);\n  n1 = floor(d3 / DAYS_OF_YEAR);\n\n  year = 400 * n400 + 100 * n100 + 4 * n4 + n1;\n\n  // ?\n  if (!(n100 === 4 || n1 === 4)) {\n    ++year;\n  }\n\n  return year;\n}\n\n_exports = module.exports = {\n  each: function each(arr, fn) {\n    for (var i = 0, len = arr.length; i < len; i++) {\n      if (fn(arr[i], i, arr) === false) {\n        break;\n      }\n    }\n  },\n\n  mix: function mix(t, s) {\n    for (var p in s) {\n      if (s.hasOwnProperty(p)) {\n        t[p] = s[p];\n      }\n    }\n  },\n\n  isLeapYear: function isLeapYear(year) {\n    if ((year & 3) !== 0) {\n      return false;\n    }\n    return year % 100 !== 0 || year % 400 === 0;\n  },\n\n  mod: function mod(x, y) {\n    // 负数时不是镜像关系\n    return x - y * floor(x / y);\n  },\n\n  // month: 0 based\n  getFixedDate: function getFixedDate(year, month, dayOfMonth) {\n    var prevYear = year - 1;\n    // 考虑公元前\n    return DAYS_OF_YEAR * prevYear + floor(prevYear / 4) - floor(prevYear / 100) + floor(prevYear / 400) + getDayOfYear(year, month, dayOfMonth);\n  },\n\n  getGregorianDateFromFixedDate: function getGregorianDateFromFixedDate(fixedDate) {\n    var year = getGregorianYearFromFixedDate(fixedDate);\n    var jan1 = _exports.getFixedDate(year, Const.JANUARY, 1);\n    var isLeap = _exports.isLeapYear(year);\n    var ACCUMULATED_DAYS = isLeap ? ACCUMULATED_DAYS_IN_MONTH_LEAP : ACCUMULATED_DAYS_IN_MONTH;\n    var daysDiff = fixedDate - jan1;\n    var month = undefined;\n\n    for (var i = 0; i < ACCUMULATED_DAYS.length; i++) {\n      if (ACCUMULATED_DAYS[i] <= daysDiff) {\n        month = i;\n      } else {\n        break;\n      }\n    }\n\n    var dayOfMonth = fixedDate - jan1 - ACCUMULATED_DAYS[month] + 1;\n    var dayOfWeek = getDayOfWeekFromFixedDate(fixedDate);\n\n    return {\n      year: year,\n      month: month,\n      dayOfMonth: dayOfMonth,\n      dayOfWeek: dayOfWeek,\n      isLeap: isLeap\n    };\n  }\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/gregorian-calendar/lib/utils.js\n ** module id = 162\n ** module chunks = 4\n **/","/*\n * @ignore\n * const for gregorian date\n * @author yiminghe@gmail.com\n */\n\n\"use strict\";\n\nmodule.exports = {\n  /*\n   * Enum indicating sunday\n   * @type Number\n   * @member Date.Gregorian\n   */\n  SUNDAY: 0,\n  /*\n   * Enum indicating monday\n   * @type Number\n   * @member Date.Gregorian\n   */\n  MONDAY: 1,\n  /*\n   * Enum indicating tuesday\n   * @type Number\n   * @member Date.Gregorian\n   */\n  TUESDAY: 2,\n  /*\n   * Enum indicating wednesday\n   * @type Number\n   * @member Date.Gregorian\n   */\n  WEDNESDAY: 3,\n  /*\n   * Enum indicating thursday\n   * @type Number\n   * @member Date.Gregorian\n   */\n  THURSDAY: 4,\n  /*\n   * Enum indicating friday\n   * @type Number\n   * @member Date.Gregorian\n   */\n  FRIDAY: 5,\n  /*\n   * Enum indicating saturday\n   * @type Number\n   * @member Date.Gregorian\n   */\n  SATURDAY: 6,\n  /*\n   * Enum indicating january\n   * @type Number\n   * @member Date.Gregorian\n   */\n  JANUARY: 0,\n  /*\n   * Enum indicating february\n   * @type Number\n   * @member Date.Gregorian\n   */\n  FEBRUARY: 1,\n  /*\n   * Enum indicating march\n   * @type Number\n   * @member Date.Gregorian\n   */\n  MARCH: 2,\n  /*\n   * Enum indicating april\n   * @type Number\n   * @member Date.Gregorian\n   */\n  APRIL: 3,\n  /*\n   * Enum indicating may\n   * @type Number\n   * @member Date.Gregorian\n   */\n  MAY: 4,\n  /*\n   * Enum indicating june\n   * @type Number\n   * @member Date.Gregorian\n   */\n  JUNE: 5,\n  /*\n   * Enum indicating july\n   * @type Number\n   * @member Date.Gregorian\n   */\n  JULY: 6,\n  /*\n   * Enum indicating august\n   * @type Number\n   * @member Date.Gregorian\n   */\n  AUGUST: 7,\n  /*\n   * Enum indicating september\n   * @type Number\n   * @member Date.Gregorian\n   */\n  SEPTEMBER: 8,\n  /*\n   * Enum indicating october\n   * @type Number\n   * @member Date.Gregorian\n   */\n  OCTOBER: 9,\n  /*\n   * Enum indicating november\n   * @type Number\n   * @member Date.Gregorian\n   */\n  NOVEMBER: 10,\n  /*\n   * Enum indicating december\n   * @type Number\n   * @member Date.Gregorian\n   */\n  DECEMBER: 11\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/gregorian-calendar/lib/const.js\n ** module id = 163\n ** module chunks = 4\n **/","/*\n * en-us locale\n * @ignore\n * @author yiminghe@gmail.com\n */\n\"use strict\";\n\nmodule.exports = {\n  // in minutes\n  timezoneOffset: -8 * 60,\n  firstDayOfWeek: 0,\n  minimalDaysInFirstWeek: 1\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/gregorian-calendar/lib/locale/en_US.js\n ** module id = 164\n ** module chunks = 4\n **/","/**\n * @ignore\n * DateTimeFormat for\n * Inspired by DateTimeFormat from JDK.\n * @author yiminghe@gmail.com\n */\n\n'use strict';\n\nvar GregorianCalendar = require('gregorian-calendar');\nvar enUsLocale = require('./locale/en_US');\nvar MAX_VALUE = Number.MAX_VALUE;\nvar warning = require('warning');\n\n/**\n * date or time style enum\n * @enum {Number} Date.Formatter.Style\n */\nvar DateTimeStyle = {\n  /**\n   * full style\n   */\n  FULL: 0,\n  /**\n   * long style\n   */\n  LONG: 1,\n  /**\n   * medium style\n   */\n  MEDIUM: 2,\n  /**\n   * short style\n   */\n  SHORT: 3\n};\n\n/*\n Letter    Date or Time Component    Presentation    Examples\n G    Era designator    Text    AD\n y    Year    Year    1996; 96\n M    Month in year    Month    July; Jul; 07\n w    Week in year    Number    27\n W    Week in month    Number    2\n D    Day in year    Number    189\n d    Day in month    Number    10\n F    Day of week in month    Number    2\n E    Day in week    Text    Tuesday; Tue\n a    Am/pm marker    Text    PM\n H    Hour in day (0-23)    Number    0\n k    Hour in day (1-24)    Number    24\n K    Hour in am/pm (0-11)    Number    0\n h    Hour in am/pm (1-12)    Number    12\n m    Minute in hour    Number    30\n s    Second in minute    Number    55\n S    Millisecond    Number    978\n x z    Time zone    General time zone    Pacific Standard Time; PST; GMT-08:00\n Z    Time zone    RFC 822 time zone    -0800\n */\n\nvar patternChars = new Array(GregorianCalendar.DAY_OF_WEEK_IN_MONTH + 2).join('1');\nvar ERA = 0;\nvar calendarIndexMap = {};\n\npatternChars = patternChars.split('');\npatternChars[ERA] = 'G';\npatternChars[GregorianCalendar.YEAR] = 'y';\npatternChars[GregorianCalendar.MONTH] = 'M';\npatternChars[GregorianCalendar.DAY_OF_MONTH] = 'd';\npatternChars[GregorianCalendar.HOUR_OF_DAY] = 'H';\npatternChars[GregorianCalendar.MINUTES] = 'm';\npatternChars[GregorianCalendar.SECONDS] = 's';\npatternChars[GregorianCalendar.MILLISECONDS] = 'S';\npatternChars[GregorianCalendar.WEEK_OF_YEAR] = 'w';\npatternChars[GregorianCalendar.WEEK_OF_MONTH] = 'W';\npatternChars[GregorianCalendar.DAY_OF_YEAR] = 'D';\npatternChars[GregorianCalendar.DAY_OF_WEEK_IN_MONTH] = 'F';\n\n(function init() {\n  for (var index in patternChars) {\n    if (patternChars.hasOwnProperty(index)) {\n      calendarIndexMap[patternChars[index]] = index;\n    }\n  }\n})();\n\nfunction mix(t, s) {\n  for (var p in s) {\n    if (s.hasOwnProperty(p)) {\n      t[p] = s[p];\n    }\n  }\n}\n\nvar SUBSTITUTE_REG = /\\\\?\\{([^{}]+)\\}/g;\nvar EMPTY = '';\n\nfunction substitute(str, o, regexp) {\n  if (typeof str !== 'string' || !o) {\n    return str;\n  }\n\n  return str.replace(regexp || SUBSTITUTE_REG, function (match, name) {\n    if (match.charAt(0) === '\\\\') {\n      return match.slice(1);\n    }\n    return o[name] === undefined ? EMPTY : o[name];\n  });\n}\n\npatternChars = patternChars.join('') + 'ahkKZE';\n\nfunction encode(lastField, count, compiledPattern) {\n  compiledPattern.push({\n    field: lastField,\n    count: count\n  });\n}\n\nfunction compile(pattern) {\n  var length = pattern.length;\n  var inQuote = false;\n  var compiledPattern = [];\n  var tmpBuffer = null;\n  var count = 0;\n  var lastField = -1;\n\n  for (var i = 0; i < length; i++) {\n    var c = pattern.charAt(i);\n\n    if (c === '\\'') {\n      // '' is treated as a single quote regardless of being\n      // in a quoted section.\n      if (i + 1 < length) {\n        c = pattern.charAt(i + 1);\n        if (c === '\\'') {\n          i++;\n          if (count !== 0) {\n            encode(lastField, count, compiledPattern);\n            lastField = -1;\n            count = 0;\n          }\n          if (inQuote) {\n            tmpBuffer += c;\n          }\n          continue;\n        }\n      }\n      if (!inQuote) {\n        if (count !== 0) {\n          encode(lastField, count, compiledPattern);\n          lastField = -1;\n          count = 0;\n        }\n        tmpBuffer = '';\n        inQuote = true;\n      } else {\n        compiledPattern.push({\n          text: tmpBuffer\n        });\n        inQuote = false;\n      }\n      continue;\n    }\n    if (inQuote) {\n      tmpBuffer += c;\n      continue;\n    }\n    if (!(c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z')) {\n      if (count !== 0) {\n        encode(lastField, count, compiledPattern);\n        lastField = -1;\n        count = 0;\n      }\n      compiledPattern.push({\n        text: c\n      });\n      continue;\n    }\n\n    if (patternChars.indexOf(c) === -1) {\n      throw new Error('Illegal pattern character \"' + c + '\"');\n    }\n\n    if (lastField === -1 || lastField === c) {\n      lastField = c;\n      count++;\n      continue;\n    }\n    encode(lastField, count, compiledPattern);\n    lastField = c;\n    count = 1;\n  }\n\n  if (inQuote) {\n    throw new Error('Unterminated quote');\n  }\n\n  if (count !== 0) {\n    encode(lastField, count, compiledPattern);\n  }\n\n  return compiledPattern;\n}\n\nvar zeroDigit = '0';\n\n// TODO zeroDigit localization??\nfunction zeroPaddingNumber(_x, _x2, _x3, _x4) {\n  var _again = true;\n\n  _function: while (_again) {\n    var value = _x,\n        minDigits = _x2,\n        maxDigits_ = _x3,\n        b = _x4;\n    _again = false;\n\n    // Optimization for 1, 2 and 4 digit numbers. This should\n    // cover most cases of formatting date/time related items.\n    // Note: This optimization code assumes that maxDigits is\n    // either 2 or Integer.MAX_VALUE (maxIntCount in format()).\n    var buffer = b || [];\n    var maxDigits = maxDigits_ || MAX_VALUE;\n    if (value >= 0) {\n      if (value < 100 && minDigits >= 1 && minDigits <= 2) {\n        if (value < 10 && minDigits === 2) {\n          buffer.push(zeroDigit);\n        }\n        buffer.push(value);\n        return buffer.join('');\n      } else if (value >= 1000 && value < 10000) {\n        if (minDigits === 4) {\n          buffer.push(value);\n          return buffer.join('');\n        }\n        if (minDigits === 2 && maxDigits === 2) {\n          _x = value % 100;\n          _x2 = 2;\n          _x3 = 2;\n          _x4 = buffer;\n          _again = true;\n          buffer = maxDigits = undefined;\n          continue _function;\n        }\n      }\n    }\n    buffer.push(value + '');\n    return buffer.join('');\n  }\n}\n\n/**\n *\n * date time formatter for GregorianCalendar\n *\n *      @example\n *\n *          const calendar = new GregorianCalendar(2013,9,24);\n *          // ' to escape\n *          const formatter = new GregorianCalendarFormat(\"'today is' ''yyyy/MM/dd a''\");\n *          document.write(formatter.format(calendar));\n *\n * @class GregorianCalendarFormat\n * @param {String} pattern patter string of date formatter\n *\n * <table border=\"1\">\n * <thead valign=\"bottom\">\n * <tr><th class=\"head\">Letter</th>\n * <th class=\"head\">Date or Time Component</th>\n * <th class=\"head\">Presentation</th>\n * <th class=\"head\">Examples</th>\n * </tr>\n * </thead>\n * <tbody valign=\"top\">\n * <tr><td>G</td>\n * <td>Era designator</td>\n * <td>Text</td>\n * <td>AD</td>\n * </tr>\n * <tr><td>y</td>\n * <td>Year</td>\n * <td>Year</td>\n * <td>1996; 96</td>\n * </tr>\n * <tr><td>M</td>\n * <td>Month in year</td>\n * <td>Month</td>\n * <td>July; Jul; 07</td>\n * </tr>\n * <tr><td>w</td>\n * <td>Week in year</td>\n * <td>Number</td>\n * <td>27</td>\n * </tr>\n * <tr><td>W</td>\n * <td>Week in month</td>\n * <td>Number</td>\n * <td>2</td>\n * </tr>\n * <tr><td>D</td>\n * <td>Day in year</td>\n * <td>Number</td>\n * <td>189</td>\n * </tr>\n * <tr><td>d</td>\n * <td>Day in month</td>\n * <td>Number</td>\n * <td>10</td>\n * </tr>\n * <tr><td>F</td>\n * <td>Day of week in month</td>\n * <td>Number</td>\n * <td>2</td>\n * </tr>\n * <tr><td>E</td>\n * <td>Day in week</td>\n * <td>Text</td>\n * <td>Tuesday; Tue</td>\n * </tr>\n * <tr><td>a</td>\n * <td>Am/pm marker</td>\n * <td>Text</td>\n * <td>PM</td>\n * </tr>\n * <tr><td>H</td>\n *       <td>Hour in day (0-23)</td>\n * <td>Number</td>\n * <td>0</td>\n * </tr>\n * <tr><td>k</td>\n *       <td>Hour in day (1-24)</td>\n * <td>Number</td>\n * <td>24</td>\n * </tr>\n * <tr><td>K</td>\n * <td>Hour in am/pm (0-11)</td>\n * <td>Number</td>\n * <td>0</td>\n * </tr>\n * <tr><td>h</td>\n * <td>Hour in am/pm (1-12)</td>\n * <td>Number</td>\n * <td>12</td>\n * </tr>\n * <tr><td>m</td>\n * <td>Minute in hour</td>\n * <td>Number</td>\n * <td>30</td>\n * </tr>\n * <tr><td>s</td>\n * <td>Second in minute</td>\n * <td>Number</td>\n * <td>55</td>\n * </tr>\n * <tr><td>S</td>\n * <td>Millisecond</td>\n * <td>Number</td>\n * <td>978</td>\n * </tr>\n * <tr><td>x/z</td>\n * <td>Time zone</td>\n * <td>General time zone</td>\n * <td>Pacific Standard Time; PST; GMT-08:00</td>\n * </tr>\n * <tr><td>Z</td>\n * <td>Time zone</td>\n * <td>RFC 822 time zone</td>\n * <td>-0800</td>\n * </tr>\n * </tbody>\n * </table>\n\n * @param {Object} locale format locale\n */\nfunction DateTimeFormat(pattern, locale) {\n  this.locale = locale || enUsLocale;\n  this.originalPattern = pattern;\n  this.pattern = compile(pattern);\n}\n\nfunction formatField(field, count, locale, calendar) {\n  var current = undefined;\n  var value = undefined;\n  switch (field) {\n    case 'G':\n      value = calendar.getYear() > 0 ? 1 : 0;\n      current = locale.eras[value];\n      break;\n    case 'y':\n      value = calendar.getYear();\n      if (value <= 0) {\n        value = 1 - value;\n      }\n      current = zeroPaddingNumber(value, 2, count !== 2 ? MAX_VALUE : 2);\n      break;\n    case 'M':\n      value = calendar.getMonth();\n      if (count >= 4) {\n        current = locale.months[value];\n      } else if (count === 3) {\n        current = locale.shortMonths[value];\n      } else {\n        current = zeroPaddingNumber(value + 1, count);\n      }\n      break;\n    case 'k':\n      current = zeroPaddingNumber(calendar.getHourOfDay() || 24, count);\n      break;\n    case 'E':\n      value = calendar.getDayOfWeek();\n      current = count >= 4 ? locale.weekdays[value] : locale.shortWeekdays[value];\n      break;\n    case 'a':\n      current = locale.ampms[calendar.getHourOfDay() >= 12 ? 1 : 0];\n      break;\n    case 'h':\n      current = zeroPaddingNumber(calendar.getHourOfDay() % 12 || 12, count);\n      break;\n    case 'K':\n      current = zeroPaddingNumber(calendar.getHourOfDay() % 12, count);\n      break;\n    case 'Z':\n      var offset = calendar.getTimezoneOffset();\n      var parts = [offset < 0 ? '-' : '+'];\n      offset = Math.abs(offset);\n      parts.push(zeroPaddingNumber(Math.floor(offset / 60) % 100, 2), zeroPaddingNumber(offset % 60, 2));\n      current = parts.join('');\n      break;\n    default:\n      // case 'd':\n      // case 'H':\n      // case 'm':\n      // case 's':\n      // case 'S':\n      // case 'D':\n      // case 'F':\n      // case 'w':\n      // case 'W':\n      var index = calendarIndexMap[field];\n      value = calendar.get(index);\n      current = zeroPaddingNumber(value, count);\n  }\n  return current;\n}\n\nfunction matchPartString(dateStr, startIndex, match, mLen) {\n  for (var i = 0; i < mLen; i++) {\n    if (dateStr.charAt(startIndex + i) !== match.charAt(i)) {\n      return false;\n    }\n  }\n  return true;\n}\n\nfunction matchField(dateStr, startIndex, matches) {\n  var matchedLen = -1;\n  var index = -1;\n  var i = undefined;\n  var len = matches.length;\n  for (i = 0; i < len; i++) {\n    var m = matches[i];\n    var mLen = m.length;\n    if (mLen > matchedLen && matchPartString(dateStr, startIndex, m, mLen)) {\n      matchedLen = mLen;\n      index = i;\n    }\n  }\n  return index >= 0 ? {\n    value: index,\n    startIndex: startIndex + matchedLen\n  } : null;\n}\n\nfunction getLeadingNumberLen(str) {\n  var i = undefined;\n  var c = undefined;\n  var len = str.length;\n  for (i = 0; i < len; i++) {\n    c = str.charAt(i);\n    if (c < '0' || c > '9') {\n      break;\n    }\n  }\n  return i;\n}\n\nfunction matchNumber(dateStr, startIndex, count, obeyCount) {\n  var str = dateStr;\n  var n = undefined;\n  if (obeyCount) {\n    if (dateStr.length < startIndex + count) {\n      return null;\n    }\n    str = dateStr.slice(startIndex, startIndex + count);\n    if (!str.match(/^\\d+$/)) {\n      throw new Error('GregorianCalendarFormat parse error, dateStr: ' + dateStr + ', patter: ' + this.originalPattern);\n    }\n  } else {\n    str = str.slice(startIndex);\n  }\n  n = parseInt(str, 10);\n  if (isNaN(n)) {\n    throw new Error('GregorianCalendarFormat parse error, dateStr: ' + dateStr + ', patter: ' + this.originalPattern);\n  }\n  return {\n    value: n,\n    startIndex: startIndex + getLeadingNumberLen(str)\n  };\n}\n\nfunction parseField(calendar, dateStr, startIndex_, field, count, obeyCount, tmp) {\n  var match = undefined;\n  var year = undefined;\n  var hour = undefined;\n  var startIndex = startIndex_;\n  if (dateStr.length <= startIndex) {\n    return startIndex;\n  }\n  var locale = this.locale;\n  switch (field) {\n    case 'G':\n      match = matchField(dateStr, startIndex, locale.eras);\n      if (match) {\n        if (calendar.isSetYear()) {\n          if (match.value === 0) {\n            year = calendar.getYear();\n            calendar.setYear(1 - year);\n          }\n        } else {\n          tmp.era = match.value;\n        }\n      }\n      break;\n    case 'y':\n      match = matchNumber.call(this, dateStr, startIndex, count, obeyCount);\n      if (match) {\n        year = match.value;\n        if ('era' in tmp) {\n          if (tmp.era === 0) {\n            year = 1 - year;\n          }\n        }\n        calendar.setYear(year);\n      }\n      break;\n    case 'M':\n      var month = undefined;\n      if (count >= 3) {\n        match = matchField(dateStr, startIndex, locale[count === 3 ? 'shortMonths' : 'months']);\n        if (match) {\n          month = match.value;\n        }\n      } else {\n        match = matchNumber.call(this, dateStr, startIndex, count, obeyCount);\n        if (match) {\n          month = match.value - 1;\n        }\n      }\n      if (match) {\n        calendar.setMonth(month);\n      }\n      break;\n    case 'k':\n      match = matchNumber.call(this, dateStr, startIndex, count, obeyCount);\n      if (match) {\n        calendar.setHourOfDay(match.value % 24);\n      }\n      break;\n    case 'E':\n      match = matchField(dateStr, startIndex, locale[count > 3 ? 'weekdays' : 'shortWeekdays']);\n      if (match) {\n        calendar.setDayOfWeek(match.value);\n      }\n      break;\n    case 'a':\n      match = matchField(dateStr, startIndex, locale.ampms);\n      if (match) {\n        if (calendar.isSetHourOfDay()) {\n          if (match.value) {\n            hour = calendar.getHourOfDay();\n            if (hour < 12) {\n              calendar.setHourOfDay((hour + 12) % 24);\n            }\n          }\n        } else {\n          tmp.ampm = match.value;\n        }\n      }\n      break;\n    case 'h':\n      match = matchNumber.call(this, dateStr, startIndex, count, obeyCount);\n      if (match) {\n        hour = match.value %= 12;\n        if (tmp.ampm) {\n          hour += 12;\n        }\n        calendar.setHourOfDay(hour);\n      }\n      break;\n    case 'K':\n      match = matchNumber.call(this, dateStr, startIndex, count, obeyCount);\n      if (match) {\n        hour = match.value;\n        if (tmp.ampm) {\n          hour += 12;\n        }\n        calendar.setHourOfDay(hour);\n      }\n      break;\n    case 'Z':\n      // let sign = 1;\n      var zoneChar = dateStr.charAt(startIndex);\n      if (zoneChar === '-') {\n        // sign = -1;\n        startIndex++;\n      } else if (zoneChar === '+') {\n        startIndex++;\n      } else {\n        break;\n      }\n      match = matchNumber.call(this, dateStr, startIndex, 2, true);\n      if (match) {\n        var zoneOffset = match.value * 60;\n        startIndex = match.startIndex;\n        match = matchNumber.call(this, dateStr, startIndex, 2, true);\n        if (match) {\n          zoneOffset += match.value;\n        }\n        calendar.setTimezoneOffset(zoneOffset);\n      }\n      break;\n    default:\n      // case 'd':\n      // case 'H':\n      // case 'm':\n      // case 's':\n      // case 'S':\n      // case 'D':\n      // case 'F':\n      // case 'w':\n      // case 'W'\n      match = matchNumber.call(this, dateStr, startIndex, count, obeyCount);\n      if (match) {\n        var index = calendarIndexMap[field];\n        calendar.set(index, match.value);\n      }\n  }\n  if (match) {\n    startIndex = match.startIndex;\n  }\n  return startIndex;\n}\n\nmix(DateTimeFormat.prototype, {\n  /*\n   * format a GregorianDate instance according to specified pattern\n   * @param {GregorianCalendar} calendar GregorianDate instance\n   * @returns {string} formatted string of GregorianDate instance\n   */\n  format: function format(calendar) {\n    if (!calendar.isGregorianCalendar) {\n      throw new Error('calendar must be type of GregorianCalendar');\n    }\n    var i = undefined;\n    var ret = [];\n    var pattern = this.pattern;\n    var len = pattern.length;\n    for (i = 0; i < len; i++) {\n      var comp = pattern[i];\n      if (comp.text) {\n        ret.push(comp.text);\n      } else if ('field' in comp) {\n        ret.push(formatField(comp.field, comp.count, this.locale, calendar));\n      }\n    }\n    return ret.join('');\n  },\n\n  /*\n   * parse a formatted string of GregorianDate instance according to specified pattern\n   * @param {String} dateStr formatted string of GregorianDate\n   * @returns {GregorianCalendar}\n   */\n  parse: function parse(dateStr, option_) {\n    var option = option_ || {};\n    var calendarLocale = option.locale;\n    var calendar = new GregorianCalendar(calendarLocale);\n    var i = undefined;\n    var j = undefined;\n    var tmp = {};\n    var obeyCount = option.obeyCount || false;\n    var dateStrLen = dateStr.length;\n    var errorIndex = -1;\n    var startIndex = 0;\n    var oldStartIndex = 0;\n    var pattern = this.pattern;\n    var len = pattern.length;\n    /* eslint no-labels: 0 no-empty-label:0 */\n    loopPattern: {\n      for (i = 0; errorIndex < 0 && i < len; i++) {\n        var comp = pattern[i];\n        var text = undefined;\n        var textLen = undefined;\n        oldStartIndex = startIndex;\n        text = comp.text;\n        if (text) {\n          textLen = text.length;\n          if (textLen + startIndex > dateStrLen) {\n            errorIndex = startIndex;\n          } else {\n            for (j = 0; j < textLen; j++) {\n              if (text.charAt(j) !== dateStr.charAt(j + startIndex)) {\n                errorIndex = startIndex;\n                break loopPattern;\n              }\n            }\n            startIndex += textLen;\n          }\n        } else if ('field' in comp) {\n          if (!option.obeyCount) {\n            var nextComp = pattern[i + 1];\n            obeyCount = false;\n            if (nextComp) {\n              if ('field' in nextComp) {\n                obeyCount = true;\n              } else {\n                var c = nextComp.text.charAt(0);\n                if (c >= '0' && c <= '9') {\n                  obeyCount = true;\n                }\n              }\n            }\n          }\n          startIndex = parseField.call(this, calendar, dateStr, startIndex, comp.field, comp.count, obeyCount, tmp);\n          if (startIndex === oldStartIndex) {\n            errorIndex = startIndex;\n          }\n        }\n      }\n    }\n\n    if (errorIndex >= 0) {\n      warning(false, 'error when parsing date: ' + dateStr + ', position: ' + dateStr.slice(0, errorIndex) + '^');\n      return undefined;\n    }\n    return calendar;\n  }\n});\n\nmix(DateTimeFormat, {\n  Style: DateTimeStyle,\n\n  /*\n   * get a formatter instance of short style pattern.\n   * en-us: M/d/yy h:mm a\n   * zh-cn: yy-M-d ah:mm\n   * @param {Object} locale locale object\n   * @returns {GregorianCalendar}\n   * @static\n   */\n  getInstance: function getInstance(locale) {\n    return this.getDateTimeInstance(DateTimeStyle.SHORT, DateTimeStyle.SHORT, locale);\n  },\n\n  /*\n   * get a formatter instance of specified date style.\n   * @param {Date.Formatter.Style} dateStyle date format style\n   * @param {Object} locale\n   * @returns {GregorianCalendar}\n   * @static\n   */\n  getDateInstance: function getDateInstance(dateStyle, locale) {\n    return this.getDateTimeInstance(dateStyle, undefined, locale);\n  },\n\n  /*\n   * get a formatter instance of specified date style and time style.\n   * @param {Date.Formatter.Style} dateStyle date format style\n   * @param {Date.Formatter.Style} timeStyle time format style\n   * @param {Object} locale\n   * @returns {GregorianCalendar}\n   * @static\n   */\n  getDateTimeInstance: function getDateTimeInstance(dateStyle, timeStyle, locale_) {\n    var locale = locale_ || enUsLocale;\n    var datePattern = '';\n    if (dateStyle !== undefined) {\n      datePattern = locale.datePatterns[dateStyle];\n    }\n    var timePattern = '';\n    if (timeStyle !== undefined) {\n      timePattern = locale.timePatterns[timeStyle];\n    }\n    var pattern = datePattern;\n    if (timePattern) {\n      if (datePattern) {\n        pattern = substitute(locale.dateTimePattern, {\n          date: datePattern,\n          time: timePattern\n        });\n      } else {\n        pattern = timePattern;\n      }\n    }\n    return new DateTimeFormat(pattern, locale);\n  },\n\n  /*\n   * get a formatter instance of specified time style.\n   * @param {Date.Formatter.Style} timeStyle time format style\n   * @param {Object} locale\n   * @returns {GregorianCalendar}\n   * @static\n   */\n  getTimeInstance: function getTimeInstance(timeStyle, locale) {\n    return this.getDateTimeInstance(undefined, timeStyle, locale);\n  }\n});\n\nmodule.exports = DateTimeFormat;\n\nDateTimeFormat.version = '@VERSION@';\n\n// gc_format@163.com\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/gregorian-calendar-format/lib/gregorian-calendar-format.js\n ** module id = 165\n ** module chunks = 4\n **/","'use strict';\n\nmodule.exports = {\n  eras: ['BC', 'AD'],\n  months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\n  shortMonths: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n  weekdays: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n  shortWeekdays: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n  veryShortWeekdays: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],\n  ampms: ['AM', 'PM'],\n  datePatterns: ['EEEE, MMMM d, yyyy', 'MMMM d, yyyy', 'MMM d, yyyy', 'M/d/yy'],\n  timePatterns: ['h:mm:ss a \\'GMT\\'Z', 'h:mm:ss a', 'h:mm:ss a', 'h:mm a'],\n  dateTimePattern: '{date} {time}'\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/gregorian-calendar-format/lib/locale/en_US.js\n ** module id = 166\n ** module chunks = 4\n **/","/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n'use strict';\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar warning = function() {};\n\nif (process.env.NODE_ENV !== 'production') {\n  warning = function(condition, format, args) {\n    var len = arguments.length;\n    args = new Array(len > 2 ? len - 2 : 0);\n    for (var key = 2; key < len; key++) {\n      args[key - 2] = arguments[key];\n    }\n    if (format === undefined) {\n      throw new Error(\n        '`warning(condition, format, ...args)` requires a warning ' +\n        'message argument'\n      );\n    }\n\n    if (format.length < 10 || (/^[s\\W]*$/).test(format)) {\n      throw new Error(\n        'The warning format should be able to uniquely identify this ' +\n        'warning. Please, use a more descriptive format than: ' + format\n      );\n    }\n\n    if (!condition) {\n      var argIndex = 0;\n      var message = 'Warning: ' +\n        format.replace(/%s/g, function() {\n          return args[argIndex++];\n        });\n      if (typeof console !== 'undefined') {\n        console.error(message);\n      }\n      try {\n        // This error was thrown as a convenience so that you can use this stack\n        // to find the callsite that caused this warning to fire.\n        throw new Error(message);\n      } catch(x) {}\n    }\n  };\n}\n\nmodule.exports = warning;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/warning/browser.js\n ** module id = 167\n ** module chunks = 4\n **/","import TimePanel from './src/';\nexport default TimePanel;\n\n\n\n/** WEBPACK FOOTER **\n ** ./index.js\n **/","import TimePicker from './TimePicker';\nexport default TimePicker;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/index.js\n **/","import React, { PropTypes } from 'react';\nimport Trigger from 'rc-trigger';\nimport Panel from './module/Panel';\nimport placements from './util/placements';\nimport CommonMixin from './mixin/CommonMixin';\nimport { getFormatter } from './util/index';\n\nfunction noop() {\n}\n\nfunction refFn(field, component) {\n  this[field] = component;\n}\n\nconst Picker = React.createClass({\n  propTypes: {\n    prefixCls: PropTypes.string,\n    locale: PropTypes.object,\n    value: PropTypes.object,\n    disabled: PropTypes.bool,\n    allowEmpty: PropTypes.bool,\n    defaultValue: PropTypes.object,\n    open: PropTypes.bool,\n    defaultOpen: PropTypes.bool,\n    align: PropTypes.object,\n    placement: PropTypes.any,\n    transitionName: PropTypes.string,\n    getPopupContainer: PropTypes.func,\n    placeholder: PropTypes.string,\n    formatter: PropTypes.any,\n    showHour: PropTypes.bool,\n    style: PropTypes.object,\n    className: PropTypes.string,\n    showSecond: PropTypes.bool,\n    disabledHours: PropTypes.func,\n    disabledMinutes: PropTypes.func,\n    disabledSeconds: PropTypes.func,\n    hideDisabledOptions: PropTypes.bool,\n    onChange: PropTypes.func,\n    onOpen: PropTypes.func,\n    onClose: PropTypes.func,\n  },\n\n  mixins: [CommonMixin],\n\n  getDefaultProps() {\n    return {\n      prefixCls: 'rc-time-picker',\n      defaultOpen: false,\n      style: {},\n      className: '',\n      align: {},\n      allowEmpty: true,\n      showHour: true,\n      showSecond: true,\n      disabledHours: noop,\n      disabledMinutes: noop,\n      disabledSeconds: noop,\n      hideDisabledOptions: false,\n      placement: 'bottomLeft',\n      onChange: noop,\n      onOpen: noop,\n      onClose: noop,\n    };\n  },\n\n  getInitialState() {\n    this.savePanelRef = refFn.bind(this, 'panelInstance');\n    const { defaultOpen, defaultValue, open = defaultOpen, value = defaultValue } = this.props;\n    return {\n      open,\n      value,\n    };\n  },\n\n  componentWillReceiveProps(nextProps) {\n    const { value, open } = nextProps;\n    if ('value' in nextProps) {\n      this.setState({\n        value,\n      });\n    }\n    if (open !== undefined) {\n      this.setState({ open });\n    }\n  },\n\n  onPanelChange(value) {\n    this.setValue(value);\n  },\n\n  onPanelClear() {\n    this.setValue(null);\n    this.setOpen(false);\n  },\n\n  onVisibleChange(open) {\n    this.setOpen(open);\n  },\n\n  onEsc() {\n    this.setOpen(false);\n    this.refs.picker.focus();\n  },\n\n  onKeyDown(e) {\n    if (e.keyCode === 40) {\n      this.setOpen(true);\n    }\n  },\n\n  setValue(value) {\n    if (!('value' in this.props)) {\n      this.setState({\n        value,\n      });\n    }\n    this.props.onChange(value);\n  },\n\n  getFormatter() {\n    const formatter = this.props.formatter;\n    const locale = this.props.locale;\n    if (formatter) {\n      if (formatter === this.lastFormatter) {\n        return this.normalFormatter;\n      }\n      this.normalFormatter = getFormatter(formatter, locale);\n      this.lastFormatter = formatter;\n      return this.normalFormatter;\n    }\n    if (!this.props.showSecond) {\n      if (!this.notShowSecondFormatter) {\n        this.notShowSecondFormatter = getFormatter('HH:mm', locale);\n      }\n      return this.notShowSecondFormatter;\n    }\n    if (!this.props.showHour) {\n      if (!this.notShowHourFormatter) {\n        this.notShowHourFormatter = getFormatter('mm:ss', locale);\n      }\n      return this.notShowHourFormatter;\n    }\n    if (!this.normalFormatter) {\n      this.normalFormatter = getFormatter('HH:mm:ss', locale);\n    }\n    return this.normalFormatter;\n  },\n\n  getPanelElement() {\n    const {\n      prefixCls, defaultValue, locale, placeholder, disabledHours,\n      disabledMinutes, disabledSeconds, hideDisabledOptions,\n      allowEmpty, showHour, showSecond,\n    } = this.props;\n    return (\n      <Panel\n        prefixCls={`${prefixCls}-panel`}\n        ref={this.savePanelRef}\n        value={this.state.value}\n        onChange={this.onPanelChange}\n        gregorianCalendarLocale={locale.calendar}\n        onClear={this.onPanelClear}\n        defaultValue={defaultValue}\n        showHour={showHour}\n        onEsc={this.onEsc}\n        showSecond={showSecond}\n        locale={locale}\n        allowEmpty={allowEmpty}\n        formatter={this.getFormatter()}\n        placeholder={placeholder}\n        disabledHours={disabledHours}\n        disabledMinutes={disabledMinutes}\n        disabledSeconds={disabledSeconds}\n        hideDisabledOptions={hideDisabledOptions}\n      />\n    );\n  },\n\n  setOpen(open, callback) {\n    const { onOpen, onClose } = this.props;\n    if (this.state.open !== open) {\n      this.setState({\n        open,\n      }, callback);\n      const event = {\n        open,\n      };\n      if (open) {\n        onOpen(event);\n      } else {\n        onClose(event);\n      }\n    }\n  },\n\n  render() {\n    const { prefixCls, placeholder, placement, align, disabled, transitionName, style, className, showHour, showSecond, getPopupContainer } = this.props;\n    const { open, value } = this.state;\n    let popupClassName;\n    if (!showHour || !showSecond) {\n      popupClassName = `${prefixCls}-panel-narrow`;\n    }\n    return (\n      <Trigger\n        prefixCls={`${prefixCls}-panel`}\n        popupClassName={popupClassName}\n        popup={this.getPanelElement()}\n        popupAlign={align}\n        builtinPlacements={placements}\n        popupPlacement={placement}\n        action={disabled ? [] : ['click']}\n        destroyPopupOnHide\n        getPopupContainer={getPopupContainer}\n        popupTransitionName={transitionName}\n        popupVisible={open}\n        onPopupVisibleChange={this.onVisibleChange}\n      >\n        <span className={`${prefixCls} ${className}`} style={style}>\n          <input\n            className={`${prefixCls}-input`}\n            ref=\"picker\" type=\"text\" placeholder={placeholder}\n            readOnly\n            onKeyDown={this.onKeyDown}\n            disabled={disabled} value={value && this.getFormatter().format(value) || ''}\n          />\n          <span className={`${prefixCls}-icon`}/>\n        </span>\n      </Trigger>\n    );\n  },\n});\n\nexport default Picker;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/TimePicker.jsx\n **/","'use strict';\n\nmodule.exports = require('./Trigger');\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rc-trigger/lib/index.js\n ** module id = 171\n ** module chunks = 4\n **/","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true\n});\n\nvar _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; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = require('react-dom');\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _rcUtil = require('rc-util');\n\nvar _Popup = require('./Popup');\n\nvar _Popup2 = _interopRequireDefault(_Popup);\n\nvar _utils = require('./utils');\n\nfunction noop() {}\n\nfunction returnEmptyString() {\n  return '';\n}\n\nvar Trigger = _react2['default'].createClass({\n  displayName: 'Trigger',\n\n  propTypes: {\n    action: _react.PropTypes.any,\n    getPopupClassNameFromAlign: _react.PropTypes.any,\n    onPopupVisibleChange: _react.PropTypes.func,\n    afterPopupVisibleChange: _react.PropTypes.func,\n    popup: _react.PropTypes.node.isRequired,\n    popupStyle: _react.PropTypes.object,\n    popupClassName: _react.PropTypes.string,\n    popupPlacement: _react.PropTypes.string,\n    builtinPlacements: _react.PropTypes.object,\n    popupTransitionName: _react.PropTypes.string,\n    popupAnimation: _react.PropTypes.any,\n    mouseEnterDelay: _react.PropTypes.number,\n    mouseLeaveDelay: _react.PropTypes.number,\n    getPopupContainer: _react.PropTypes.func,\n    destroyPopupOnHide: _react.PropTypes.bool,\n    popupAlign: _react.PropTypes.object,\n    popupVisible: _react.PropTypes.bool\n  },\n\n  getDefaultProps: function getDefaultProps() {\n    return {\n      prefixCls: 'rc-trigger-popup',\n      getPopupClassNameFromAlign: returnEmptyString,\n      onPopupVisibleChange: noop,\n      afterPopupVisibleChange: noop,\n      popupClassName: '',\n      mouseEnterDelay: 0,\n      mouseLeaveDelay: 0.1,\n      popupStyle: {},\n      destroyPopupOnHide: false,\n      popupAlign: {},\n      defaultPopupVisible: false,\n      action: []\n    };\n  },\n\n  getInitialState: function getInitialState() {\n    var props = this.props;\n    var popupVisible = undefined;\n    if ('popupVisible' in props) {\n      popupVisible = !!props.popupVisible;\n    } else {\n      popupVisible = !!props.defaultPopupVisible;\n    }\n    return { popupVisible: popupVisible };\n  },\n\n  componentDidMount: function componentDidMount() {\n    this.componentDidUpdate({}, {\n      popupVisible: this.state.popupVisible\n    });\n  },\n\n  componentWillReceiveProps: function componentWillReceiveProps(nextProps) {\n    if ('popupVisible' in nextProps) {\n      this.setState({\n        popupVisible: !!nextProps.popupVisible\n      });\n    }\n  },\n\n  componentDidUpdate: function componentDidUpdate(prevProps, prevState) {\n    var _this = this;\n\n    var props = this.props;\n    var state = this.state;\n    if (this.popupRendered) {\n      var _ret = (function () {\n        var self = _this;\n        _reactDom2['default'].unstable_renderSubtreeIntoContainer(_this, _this.getPopupElement(), _this.getPopupContainer(), function renderPopup() {\n          if (this.isMounted()) {\n            self.popupDomNode = _reactDom2['default'].findDOMNode(this);\n          } else {\n            self.popupDomNode = null;\n          }\n          if (prevState.popupVisible !== state.popupVisible) {\n            props.afterPopupVisibleChange(state.popupVisible);\n          }\n        });\n        if (props.action.indexOf('click') !== -1) {\n          if (state.popupVisible) {\n            if (!_this.clickOutsideHandler) {\n              _this.clickOutsideHandler = _rcUtil.Dom.addEventListener(document, 'mousedown', _this.onDocumentClick);\n              _this.touchOutsideHandler = _rcUtil.Dom.addEventListener(document, 'touchstart', _this.onDocumentClick);\n            }\n            return {\n              v: undefined\n            };\n          }\n        }\n        if (_this.clickOutsideHandler) {\n          _this.clickOutsideHandler.remove();\n          _this.touchOutsideHandler.remove();\n          _this.clickOutsideHandler = null;\n          _this.touchOutsideHandler = null;\n        }\n      })();\n\n      if (typeof _ret === 'object') return _ret.v;\n    }\n  },\n\n  componentWillUnmount: function componentWillUnmount() {\n    var popupContainer = this.popupContainer;\n    if (popupContainer) {\n      _reactDom2['default'].unmountComponentAtNode(popupContainer);\n      if (this.props.getPopupContainer) {\n        var mountNode = this.props.getPopupContainer();\n        mountNode.removeChild(popupContainer);\n      } else {\n        document.body.removeChild(popupContainer);\n      }\n      this.popupContainer = null;\n    }\n    if (this.delayTimer) {\n      clearTimeout(this.delayTimer);\n      this.delayTimer = null;\n    }\n    if (this.clickOutsideHandler) {\n      this.clickOutsideHandler.remove();\n      this.touchOutsideHandler.remove();\n      this.clickOutsideHandler = null;\n      this.touchOutsideHandler = null;\n    }\n  },\n\n  onMouseEnter: function onMouseEnter() {\n    this.delaySetPopupVisible(true, this.props.mouseEnterDelay);\n  },\n\n  onMouseLeave: function onMouseLeave() {\n    this.delaySetPopupVisible(false, this.props.mouseLeaveDelay);\n  },\n\n  onFocus: function onFocus() {\n    this.focusTime = Date.now();\n    this.setPopupVisible(true);\n  },\n\n  onMouseDown: function onMouseDown() {\n    this.preClickTime = Date.now();\n  },\n\n  onTouchStart: function onTouchStart() {\n    this.preTouchTime = Date.now();\n  },\n\n  onBlur: function onBlur() {\n    this.setPopupVisible(false);\n  },\n\n  onClick: function onClick(event) {\n    // focus will trigger click\n    if (this.focusTime) {\n      var preTime = undefined;\n      if (this.preClickTime && this.preTouchTime) {\n        preTime = Math.min(this.preClickTime, this.preTouchTime);\n      } else if (this.preClickTime) {\n        preTime = this.preClickTime;\n      } else if (this.preTouchTime) {\n        preTime = this.preTouchTime;\n      }\n      if (Math.abs(preTime - this.focusTime) < 20) {\n        return;\n      }\n      this.focusTime = 0;\n    }\n    this.preClickTime = 0;\n    this.preTouchTime = 0;\n    event.preventDefault();\n    this.setPopupVisible(!this.state.popupVisible);\n  },\n\n  onDocumentClick: function onDocumentClick(event) {\n    var target = event.target;\n    var root = _reactDom2['default'].findDOMNode(this);\n    var popupNode = this.getPopupDomNode();\n    if (!_rcUtil.Dom.contains(root, target) && !_rcUtil.Dom.contains(popupNode, target)) {\n      this.setPopupVisible(false);\n    }\n  },\n\n  getPopupDomNode: function getPopupDomNode() {\n    // for test\n    return this.popupDomNode;\n  },\n\n  getPopupContainer: function getPopupContainer() {\n    if (!this.popupContainer) {\n      this.popupContainer = document.createElement('div');\n      if (this.props.getPopupContainer) {\n        var mountNode = this.props.getPopupContainer();\n        mountNode.appendChild(this.popupContainer);\n      } else {\n        document.body.appendChild(this.popupContainer);\n      }\n    }\n    return this.popupContainer;\n  },\n\n  getPopupClassNameFromAlign: function getPopupClassNameFromAlign(align) {\n    var className = [];\n    var props = this.props;\n    var popupPlacement = props.popupPlacement;\n    var builtinPlacements = props.builtinPlacements;\n    var prefixCls = props.prefixCls;\n\n    if (popupPlacement && builtinPlacements) {\n      className.push((0, _utils.getPopupClassNameFromAlign)(builtinPlacements, prefixCls, align));\n    }\n    if (props.getPopupClassNameFromAlign) {\n      className.push(props.getPopupClassNameFromAlign(align));\n    }\n    return className.join(' ');\n  },\n\n  getPopupAlign: function getPopupAlign() {\n    var props = this.props;\n    var popupPlacement = props.popupPlacement;\n    var popupAlign = props.popupAlign;\n    var builtinPlacements = props.builtinPlacements;\n\n    if (popupPlacement && builtinPlacements) {\n      return (0, _utils.getAlignFromPlacement)(builtinPlacements, popupPlacement, popupAlign);\n    }\n    return popupAlign;\n  },\n\n  getPopupElement: function getPopupElement() {\n    var props = this.props;\n    var state = this.state;\n    var mouseProps = {};\n    if (props.action.indexOf('hover') !== -1) {\n      mouseProps.onMouseEnter = this.onMouseEnter;\n      mouseProps.onMouseLeave = this.onMouseLeave;\n    }\n    return _react2['default'].createElement(\n      _Popup2['default'],\n      _extends({ prefixCls: props.prefixCls,\n        destroyPopupOnHide: props.destroyPopupOnHide,\n        visible: state.popupVisible,\n        className: props.popupClassName,\n        action: props.action,\n        align: this.getPopupAlign(),\n        animation: props.popupAnimation,\n        getClassNameFromAlign: this.getPopupClassNameFromAlign\n      }, mouseProps, {\n        wrap: this,\n        style: props.popupStyle,\n        transitionName: props.popupTransitionName }),\n      props.popup\n    );\n  },\n\n  setPopupVisible: function setPopupVisible(popupVisible) {\n    if (this.state.popupVisible !== popupVisible) {\n      if (!('popupVisible' in this.props)) {\n        this.setState({\n          popupVisible: popupVisible\n        });\n      }\n      this.props.onPopupVisibleChange(popupVisible);\n    }\n  },\n\n  delaySetPopupVisible: function delaySetPopupVisible(visible, delayS) {\n    var _this2 = this;\n\n    var delay = delayS * 1000;\n    if (this.delayTimer) {\n      clearTimeout(this.delayTimer);\n      this.delayTimer = null;\n    }\n    if (delay) {\n      this.delayTimer = setTimeout(function () {\n        _this2.setPopupVisible(visible);\n        _this2.delayTimer = null;\n      }, delay);\n    } else {\n      this.setPopupVisible(visible);\n    }\n  },\n\n  render: function render() {\n    this.popupRendered = this.popupRendered || this.state.popupVisible;\n    var props = this.props;\n    var children = props.children;\n    var child = _react2['default'].Children.only(children);\n    var childProps = child.props || {};\n    var newChildProps = {};\n    var trigger = props.action;\n    if (trigger.indexOf('click') !== -1) {\n      newChildProps.onClick = (0, _rcUtil.createChainedFunction)(this.onClick, childProps.onClick);\n      newChildProps.onMouseDown = (0, _rcUtil.createChainedFunction)(this.onMouseDown, childProps.onMouseDown);\n      newChildProps.onTouchStart = (0, _rcUtil.createChainedFunction)(this.onTouchStart, childProps.onTouchStart);\n    }\n    if (trigger.indexOf('hover') !== -1) {\n      newChildProps.onMouseEnter = (0, _rcUtil.createChainedFunction)(this.onMouseEnter, childProps.onMouseEnter);\n      newChildProps.onMouseLeave = (0, _rcUtil.createChainedFunction)(this.onMouseLeave, childProps.onMouseLeave);\n    }\n    if (trigger.indexOf('focus') !== -1) {\n      newChildProps.onFocus = (0, _rcUtil.createChainedFunction)(this.onFocus, childProps.onFocus);\n      newChildProps.onBlur = (0, _rcUtil.createChainedFunction)(this.onBlur, childProps.onBlur);\n    }\n\n    return _react2['default'].cloneElement(child, newChildProps);\n  }\n});\n\nexports['default'] = Trigger;\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rc-trigger/lib/Trigger.js\n ** module id = 172\n ** module chunks = 4\n **/","'use strict';\n\nmodule.exports = {\n  guid: require('./guid'),\n  classSet: require('./classSet'),\n  joinClasses: require('./joinClasses'),\n  KeyCode: require('./KeyCode'),\n  PureRenderMixin: require('./PureRenderMixin'),\n  shallowEqual: require('./shallowEqual'),\n  createChainedFunction: require('./createChainedFunction'),\n  Dom: {\n    addEventListener: require('./Dom/addEventListener'),\n    contains: require('./Dom/contains')\n  },\n  Children: {\n    toArray: require('./Children/toArray'),\n    mapSelf: require('./Children/mapSelf')\n  }\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rc-util/lib/index.js\n ** module id = 173\n ** module chunks = 4\n **/","'use strict';\n\nvar seed = 0;\nmodule.exports = function guid() {\n  return Date.now() + '_' + seed++;\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rc-util/lib/guid.js\n ** module id = 174\n ** module chunks = 4\n **/","'use strict';\n\nvar deprecate = require('util-deprecate');\nvar classNames = require('classnames');\n\nmodule.exports = deprecate(classNames, '`rcUtil.classSet()` is deprecated, use `classNames()` by `require(\\'classnames\\')` instead');\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rc-util/lib/classSet.js\n ** module id = 175\n ** module chunks = 4\n **/","\n/**\n * Module exports.\n */\n\nmodule.exports = deprecate;\n\n/**\n * Mark that a method should not be used.\n * Returns a modified function which warns once by default.\n *\n * If `localStorage.noDeprecation = true` is set, then it is a no-op.\n *\n * If `localStorage.throwDeprecation = true` is set, then deprecated functions\n * will throw an Error when invoked.\n *\n * If `localStorage.traceDeprecation = true` is set, then deprecated functions\n * will invoke `console.trace()` instead of `console.error()`.\n *\n * @param {Function} fn - the function to deprecate\n * @param {String} msg - the string to print to the console when `fn` is invoked\n * @returns {Function} a new \"deprecated\" version of `fn`\n * @api public\n */\n\nfunction deprecate (fn, msg) {\n  if (config('noDeprecation')) {\n    return fn;\n  }\n\n  var warned = false;\n  function deprecated() {\n    if (!warned) {\n      if (config('throwDeprecation')) {\n        throw new Error(msg);\n      } else if (config('traceDeprecation')) {\n        console.trace(msg);\n      } else {\n        console.warn(msg);\n      }\n      warned = true;\n    }\n    return fn.apply(this, arguments);\n  }\n\n  return deprecated;\n}\n\n/**\n * Checks `localStorage` for boolean values for the given `name`.\n *\n * @param {String} name\n * @returns {Boolean}\n * @api private\n */\n\nfunction config (name) {\n  // accessing global.localStorage can trigger a DOMException in sandboxed iframes\n  try {\n    if (!global.localStorage) return false;\n  } catch (_) {\n    return false;\n  }\n  var val = global.localStorage[name];\n  if (null == val) return false;\n  return String(val).toLowerCase() === 'true';\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/util-deprecate/browser.js\n ** module id = 176\n ** module chunks = 4\n **/","/*!\n  Copyright (c) 2015 Jed Watson.\n  Licensed under the MIT License (MIT), see\n  http://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses += ' ' + arg;\n\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\tclasses += ' ' + classNames.apply(null, arg);\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tfor (var key in arg) {\n\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\tclasses += ' ' + key;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.substr(1);\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/classnames/index.js\n ** module id = 177\n ** module chunks = 4\n **/","'use strict';\n\nvar deprecate = require('util-deprecate');\nvar classNames = require('classnames');\n\nmodule.exports = deprecate(classNames, '`rcUtil.joinClasses()` is deprecated, use `classNames()` by `require(\\'classnames\\')` instead');\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rc-util/lib/joinClasses.js\n ** module id = 178\n ** module chunks = 4\n **/","/**\n * @ignore\n * some key-codes definition and utils from closure-library\n * @author yiminghe@gmail.com\n */\n\n'use strict';\n\nvar KeyCode = {\n  /**\n   * MAC_ENTER\n   */\n  MAC_ENTER: 3,\n  /**\n   * BACKSPACE\n   */\n  BACKSPACE: 8,\n  /**\n   * TAB\n   */\n  TAB: 9,\n  /**\n   * NUMLOCK on FF/Safari Mac\n   */\n  NUM_CENTER: 12, // NUMLOCK on FF/Safari Mac\n  /**\n   * ENTER\n   */\n  ENTER: 13,\n  /**\n   * SHIFT\n   */\n  SHIFT: 16,\n  /**\n   * CTRL\n   */\n  CTRL: 17,\n  /**\n   * ALT\n   */\n  ALT: 18,\n  /**\n   * PAUSE\n   */\n  PAUSE: 19,\n  /**\n   * CAPS_LOCK\n   */\n  CAPS_LOCK: 20,\n  /**\n   * ESC\n   */\n  ESC: 27,\n  /**\n   * SPACE\n   */\n  SPACE: 32,\n  /**\n   * PAGE_UP\n   */\n  PAGE_UP: 33, // also NUM_NORTH_EAST\n  /**\n   * PAGE_DOWN\n   */\n  PAGE_DOWN: 34, // also NUM_SOUTH_EAST\n  /**\n   * END\n   */\n  END: 35, // also NUM_SOUTH_WEST\n  /**\n   * HOME\n   */\n  HOME: 36, // also NUM_NORTH_WEST\n  /**\n   * LEFT\n   */\n  LEFT: 37, // also NUM_WEST\n  /**\n   * UP\n   */\n  UP: 38, // also NUM_NORTH\n  /**\n   * RIGHT\n   */\n  RIGHT: 39, // also NUM_EAST\n  /**\n   * DOWN\n   */\n  DOWN: 40, // also NUM_SOUTH\n  /**\n   * PRINT_SCREEN\n   */\n  PRINT_SCREEN: 44,\n  /**\n   * INSERT\n   */\n  INSERT: 45, // also NUM_INSERT\n  /**\n   * DELETE\n   */\n  DELETE: 46, // also NUM_DELETE\n  /**\n   * ZERO\n   */\n  ZERO: 48,\n  /**\n   * ONE\n   */\n  ONE: 49,\n  /**\n   * TWO\n   */\n  TWO: 50,\n  /**\n   * THREE\n   */\n  THREE: 51,\n  /**\n   * FOUR\n   */\n  FOUR: 52,\n  /**\n   * FIVE\n   */\n  FIVE: 53,\n  /**\n   * SIX\n   */\n  SIX: 54,\n  /**\n   * SEVEN\n   */\n  SEVEN: 55,\n  /**\n   * EIGHT\n   */\n  EIGHT: 56,\n  /**\n   * NINE\n   */\n  NINE: 57,\n  /**\n   * QUESTION_MARK\n   */\n  QUESTION_MARK: 63, // needs localization\n  /**\n   * A\n   */\n  A: 65,\n  /**\n   * B\n   */\n  B: 66,\n  /**\n   * C\n   */\n  C: 67,\n  /**\n   * D\n   */\n  D: 68,\n  /**\n   * E\n   */\n  E: 69,\n  /**\n   * F\n   */\n  F: 70,\n  /**\n   * G\n   */\n  G: 71,\n  /**\n   * H\n   */\n  H: 72,\n  /**\n   * I\n   */\n  I: 73,\n  /**\n   * J\n   */\n  J: 74,\n  /**\n   * K\n   */\n  K: 75,\n  /**\n   * L\n   */\n  L: 76,\n  /**\n   * M\n   */\n  M: 77,\n  /**\n   * N\n   */\n  N: 78,\n  /**\n   * O\n   */\n  O: 79,\n  /**\n   * P\n   */\n  P: 80,\n  /**\n   * Q\n   */\n  Q: 81,\n  /**\n   * R\n   */\n  R: 82,\n  /**\n   * S\n   */\n  S: 83,\n  /**\n   * T\n   */\n  T: 84,\n  /**\n   * U\n   */\n  U: 85,\n  /**\n   * V\n   */\n  V: 86,\n  /**\n   * W\n   */\n  W: 87,\n  /**\n   * X\n   */\n  X: 88,\n  /**\n   * Y\n   */\n  Y: 89,\n  /**\n   * Z\n   */\n  Z: 90,\n  /**\n   * META\n   */\n  META: 91, // WIN_KEY_LEFT\n  /**\n   * WIN_KEY_RIGHT\n   */\n  WIN_KEY_RIGHT: 92,\n  /**\n   * CONTEXT_MENU\n   */\n  CONTEXT_MENU: 93,\n  /**\n   * NUM_ZERO\n   */\n  NUM_ZERO: 96,\n  /**\n   * NUM_ONE\n   */\n  NUM_ONE: 97,\n  /**\n   * NUM_TWO\n   */\n  NUM_TWO: 98,\n  /**\n   * NUM_THREE\n   */\n  NUM_THREE: 99,\n  /**\n   * NUM_FOUR\n   */\n  NUM_FOUR: 100,\n  /**\n   * NUM_FIVE\n   */\n  NUM_FIVE: 101,\n  /**\n   * NUM_SIX\n   */\n  NUM_SIX: 102,\n  /**\n   * NUM_SEVEN\n   */\n  NUM_SEVEN: 103,\n  /**\n   * NUM_EIGHT\n   */\n  NUM_EIGHT: 104,\n  /**\n   * NUM_NINE\n   */\n  NUM_NINE: 105,\n  /**\n   * NUM_MULTIPLY\n   */\n  NUM_MULTIPLY: 106,\n  /**\n   * NUM_PLUS\n   */\n  NUM_PLUS: 107,\n  /**\n   * NUM_MINUS\n   */\n  NUM_MINUS: 109,\n  /**\n   * NUM_PERIOD\n   */\n  NUM_PERIOD: 110,\n  /**\n   * NUM_DIVISION\n   */\n  NUM_DIVISION: 111,\n  /**\n   * F1\n   */\n  F1: 112,\n  /**\n   * F2\n   */\n  F2: 113,\n  /**\n   * F3\n   */\n  F3: 114,\n  /**\n   * F4\n   */\n  F4: 115,\n  /**\n   * F5\n   */\n  F5: 116,\n  /**\n   * F6\n   */\n  F6: 117,\n  /**\n   * F7\n   */\n  F7: 118,\n  /**\n   * F8\n   */\n  F8: 119,\n  /**\n   * F9\n   */\n  F9: 120,\n  /**\n   * F10\n   */\n  F10: 121,\n  /**\n   * F11\n   */\n  F11: 122,\n  /**\n   * F12\n   */\n  F12: 123,\n  /**\n   * NUMLOCK\n   */\n  NUMLOCK: 144,\n  /**\n   * SEMICOLON\n   */\n  SEMICOLON: 186, // needs localization\n  /**\n   * DASH\n   */\n  DASH: 189, // needs localization\n  /**\n   * EQUALS\n   */\n  EQUALS: 187, // needs localization\n  /**\n   * COMMA\n   */\n  COMMA: 188, // needs localization\n  /**\n   * PERIOD\n   */\n  PERIOD: 190, // needs localization\n  /**\n   * SLASH\n   */\n  SLASH: 191, // needs localization\n  /**\n   * APOSTROPHE\n   */\n  APOSTROPHE: 192, // needs localization\n  /**\n   * SINGLE_QUOTE\n   */\n  SINGLE_QUOTE: 222, // needs localization\n  /**\n   * OPEN_SQUARE_BRACKET\n   */\n  OPEN_SQUARE_BRACKET: 219, // needs localization\n  /**\n   * BACKSLASH\n   */\n  BACKSLASH: 220, // needs localization\n  /**\n   * CLOSE_SQUARE_BRACKET\n   */\n  CLOSE_SQUARE_BRACKET: 221, // needs localization\n  /**\n   * WIN_KEY\n   */\n  WIN_KEY: 224,\n  /**\n   * MAC_FF_META\n   */\n  MAC_FF_META: 224, // Firefox (Gecko) fires this for the meta key instead of 91\n  /**\n   * WIN_IME\n   */\n  WIN_IME: 229\n};\n\n/*\n whether text and modified key is entered at the same time.\n */\nKeyCode.isTextModifyingKeyEvent = function isTextModifyingKeyEvent(e) {\n  var keyCode = e.keyCode;\n  if (e.altKey && !e.ctrlKey || e.metaKey ||\n  // Function keys don't generate text\n  keyCode >= KeyCode.F1 && keyCode <= KeyCode.F12) {\n    return false;\n  }\n\n  // The following keys are quite harmless, even in combination with\n  // CTRL, ALT or SHIFT.\n  switch (keyCode) {\n    case KeyCode.ALT:\n    case KeyCode.CAPS_LOCK:\n    case KeyCode.CONTEXT_MENU:\n    case KeyCode.CTRL:\n    case KeyCode.DOWN:\n    case KeyCode.END:\n    case KeyCode.ESC:\n    case KeyCode.HOME:\n    case KeyCode.INSERT:\n    case KeyCode.LEFT:\n    case KeyCode.MAC_FF_META:\n    case KeyCode.META:\n    case KeyCode.NUMLOCK:\n    case KeyCode.NUM_CENTER:\n    case KeyCode.PAGE_DOWN:\n    case KeyCode.PAGE_UP:\n    case KeyCode.PAUSE:\n    case KeyCode.PRINT_SCREEN:\n    case KeyCode.RIGHT:\n    case KeyCode.SHIFT:\n    case KeyCode.UP:\n    case KeyCode.WIN_KEY:\n    case KeyCode.WIN_KEY_RIGHT:\n      return false;\n    default:\n      return true;\n  }\n};\n\n/*\n whether character is entered.\n */\nKeyCode.isCharacterKey = function isCharacterKey(keyCode) {\n  if (keyCode >= KeyCode.ZERO && keyCode <= KeyCode.NINE) {\n    return true;\n  }\n\n  if (keyCode >= KeyCode.NUM_ZERO && keyCode <= KeyCode.NUM_MULTIPLY) {\n    return true;\n  }\n\n  if (keyCode >= KeyCode.A && keyCode <= KeyCode.Z) {\n    return true;\n  }\n\n  // Safari sends zero key code for non-latin characters.\n  if (window.navigation.userAgent.indexOf('WebKit') !== -1 && keyCode === 0) {\n    return true;\n  }\n\n  switch (keyCode) {\n    case KeyCode.SPACE:\n    case KeyCode.QUESTION_MARK:\n    case KeyCode.NUM_PLUS:\n    case KeyCode.NUM_MINUS:\n    case KeyCode.NUM_PERIOD:\n    case KeyCode.NUM_DIVISION:\n    case KeyCode.SEMICOLON:\n    case KeyCode.DASH:\n    case KeyCode.EQUALS:\n    case KeyCode.COMMA:\n    case KeyCode.PERIOD:\n    case KeyCode.SLASH:\n    case KeyCode.APOSTROPHE:\n    case KeyCode.SINGLE_QUOTE:\n    case KeyCode.OPEN_SQUARE_BRACKET:\n    case KeyCode.BACKSLASH:\n    case KeyCode.CLOSE_SQUARE_BRACKET:\n      return true;\n    default:\n      return false;\n  }\n};\n\nmodule.exports = KeyCode;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rc-util/lib/KeyCode.js\n ** module id = 179\n ** module chunks = 4\n **/","'use strict';\n\nvar shallowEqual = require('./shallowEqual');\n\n/**\n * If your React component's render function is \"pure\", e.g. it will render the\n * same result given the same props and state, provide this Mixin for a\n * considerable performance boost.\n *\n * Most React components have pure render functions.\n *\n * Example:\n *\n *   const ReactComponentWithPureRenderMixin =\n *     require('ReactComponentWithPureRenderMixin');\n *   React.createClass({\n *     mixins: [ReactComponentWithPureRenderMixin],\n *\n *     render: function() {\n *       return <div className={this.props.className}>foo</div>;\n *     }\n *   });\n *\n * Note: This only checks shallow equality for props and state. If these contain\n * complex data structures this mixin may have false-negatives for deeper\n * differences. Only mixin to components which have simple props and state, or\n * use `forceUpdate()` when you know deep data structures have changed.\n */\nvar ReactComponentWithPureRenderMixin = {\n  shouldComponentUpdate: function shouldComponentUpdate(nextProps, nextState) {\n    return !shallowEqual(this.props, nextProps) || !shallowEqual(this.state, nextState);\n  }\n};\n\nmodule.exports = ReactComponentWithPureRenderMixin;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rc-util/lib/PureRenderMixin.js\n ** module id = 180\n ** module chunks = 4\n **/","'use strict';\n\nvar shallowEqual = require('shallowequal');\n\nmodule.exports = shallowEqual;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rc-util/lib/shallowEqual.js\n ** module id = 181\n ** module chunks = 4\n **/","'use strict';\n\nvar fetchKeys = require('lodash.keys');\n\nmodule.exports = function shallowEqual(objA, objB, compare, compareContext) {\n\n    var ret = compare ? compare.call(compareContext, objA, objB) : void 0;\n\n    if (ret !== void 0) {\n        return !!ret;\n    }\n\n    if (objA === objB) {\n        return true;\n    }\n\n    if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {\n        return false;\n    }\n\n    var keysA = fetchKeys(objA);\n    var keysB = fetchKeys(objB);\n\n    var len = keysA.length;\n    if (len !== keysB.length) {\n        return false;\n    }\n\n    compareContext = compareContext || null;\n\n    // Test for A's keys different from B.\n    var bHasOwnProperty = Object.prototype.hasOwnProperty.bind(objB);\n    for (var i = 0; i < len; i++) {\n        var key = keysA[i];\n        if (!bHasOwnProperty(key)) {\n            return false;\n        }\n        var valueA = objA[key];\n        var valueB = objB[key];\n\n        var _ret = compare ? compare.call(compareContext, valueA, valueB, key) : void 0;\n        if (_ret === false || _ret === void 0 && valueA !== valueB) {\n            return false;\n        }\n    }\n\n    return true;\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/shallowequal/modules/index.js\n ** module id = 182\n ** module chunks = 4\n **/","/**\n * lodash 3.1.2 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\nvar getNative = require('lodash._getnative'),\n    isArguments = require('lodash.isarguments'),\n    isArray = require('lodash.isarray');\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^\\d+$/;\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = getNative(Object, 'keys');\n\n/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n * that affects Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\n/**\n * Checks if `value` is array-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(getLength(value));\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;\n  length = length == null ? MAX_SAFE_INTEGER : length;\n  return value > -1 && value % 1 == 0 && value < length;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * A fallback implementation of `Object.keys` which creates an array of the\n * own enumerable property names of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction shimKeys(object) {\n  var props = keysIn(object),\n      propsLength = props.length,\n      length = propsLength && object.length;\n\n  var allowIndexes = !!length && isLength(length) &&\n    (isArray(object) || isArguments(object));\n\n  var index = -1,\n      result = [];\n\n  while (++index < propsLength) {\n    var key = props[index];\n    if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nvar keys = !nativeKeys ? shimKeys : function(object) {\n  var Ctor = object == null ? undefined : object.constructor;\n  if ((typeof Ctor == 'function' && Ctor.prototype === object) ||\n      (typeof object != 'function' && isArrayLike(object))) {\n    return shimKeys(object);\n  }\n  return isObject(object) ? nativeKeys(object) : [];\n};\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n  if (object == null) {\n    return [];\n  }\n  if (!isObject(object)) {\n    object = Object(object);\n  }\n  var length = object.length;\n  length = (length && isLength(length) &&\n    (isArray(object) || isArguments(object)) && length) || 0;\n\n  var Ctor = object.constructor,\n      index = -1,\n      isProto = typeof Ctor == 'function' && Ctor.prototype === object,\n      result = Array(length),\n      skipIndexes = length > 0;\n\n  while (++index < length) {\n    result[index] = (index + '');\n  }\n  for (var key in object) {\n    if (!(skipIndexes && isIndex(key, length)) &&\n        !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = keys;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash.keys/index.js\n ** module id = 183\n ** module chunks = 4\n **/","/**\n * lodash 3.9.1 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]';\n\n/** Used to detect host constructors (Safari > 5). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar fnToString = Function.prototype.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  fnToString.call(hasOwnProperty).replace(/[\\\\^$.*+?()[\\]{}|]/g, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = object == null ? undefined : object[key];\n  return isNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in older versions of Chrome and Safari which return 'function' for regexes\n  // and Safari 8 equivalents which return 'object' for typed array constructors.\n  return isObject(value) && objToString.call(value) == funcTag;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is a native function.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function, else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\nfunction isNative(value) {\n  if (value == null) {\n    return false;\n  }\n  if (isFunction(value)) {\n    return reIsNative.test(fnToString.call(value));\n  }\n  return isObjectLike(value) && reIsHostCtor.test(value);\n}\n\nmodule.exports = getNative;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash._getnative/index.js\n ** module id = 184\n ** module chunks = 4\n **/","/**\n * lodash 3.0.4 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Native method references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n * that affects Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\n/**\n * Checks if `value` is array-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(getLength(value));\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is classified as an `arguments` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n  return isObjectLike(value) && isArrayLike(value) &&\n    hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee');\n}\n\nmodule.exports = isArguments;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash.isarguments/index.js\n ** module id = 185\n ** module chunks = 4\n **/","/**\n * lodash 3.0.4 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/** `Object#toString` result references. */\nvar arrayTag = '[object Array]',\n    funcTag = '[object Function]';\n\n/** Used to detect host constructors (Safari > 5). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar fnToString = Function.prototype.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  fnToString.call(hasOwnProperty).replace(/[\\\\^$.*+?()[\\]{}|]/g, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeIsArray = getNative(Array, 'isArray');\n\n/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = object == null ? undefined : object[key];\n  return isNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(function() { return arguments; }());\n * // => false\n */\nvar isArray = nativeIsArray || function(value) {\n  return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag;\n};\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in older versions of Chrome and Safari which return 'function' for regexes\n  // and Safari 8 equivalents which return 'object' for typed array constructors.\n  return isObject(value) && objToString.call(value) == funcTag;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is a native function.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function, else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\nfunction isNative(value) {\n  if (value == null) {\n    return false;\n  }\n  if (isFunction(value)) {\n    return reIsNative.test(fnToString.call(value));\n  }\n  return isObjectLike(value) && reIsHostCtor.test(value);\n}\n\nmodule.exports = isArray;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash.isarray/index.js\n ** module id = 186\n ** module chunks = 4\n **/","/**\n * Safe chained function\n *\n * Will only create a new function if needed,\n * otherwise will pass back existing functions or null.\n *\n * @returns {function|null}\n */\n\"use strict\";\n\nfunction createChainedFunction() {\n  var args = arguments;\n  return function chainedFunction() {\n    for (var i = 0; i < args.length; i++) {\n      if (args[i] && args[i].apply) {\n        args[i].apply(this, arguments);\n      }\n    }\n  };\n}\n\nmodule.exports = createChainedFunction;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rc-util/lib/createChainedFunction.js\n ** module id = 187\n ** module chunks = 4\n **/","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true\n});\nexports['default'] = addEventListenerWrap;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _addDomEventListener = require('add-dom-event-listener');\n\nvar _addDomEventListener2 = _interopRequireDefault(_addDomEventListener);\n\nvar _reactDom = require('react-dom');\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nfunction addEventListenerWrap(target, eventType, cb) {\n  /* eslint camelcase: 2 */\n  var callback = _reactDom2['default'].unstable_batchedUpdates ? function run(e) {\n    _reactDom2['default'].unstable_batchedUpdates(cb, e);\n  } : cb;\n  return (0, _addDomEventListener2['default'])(target, eventType, callback);\n}\n\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rc-util/lib/Dom/addEventListener.js\n ** module id = 188\n ** module chunks = 4\n **/","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true\n});\nexports['default'] = addEventListener;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _EventObject = require('./EventObject');\n\nvar _EventObject2 = _interopRequireDefault(_EventObject);\n\nfunction addEventListener(target, eventType, callback) {\n  function wrapCallback(e) {\n    var ne = new _EventObject2['default'](e);\n    callback.call(target, ne);\n  }\n\n  if (target.addEventListener) {\n    target.addEventListener(eventType, wrapCallback, false);\n    return {\n      remove: function remove() {\n        target.removeEventListener(eventType, wrapCallback, false);\n      }\n    };\n  } else if (target.attachEvent) {\n    target.attachEvent('on' + eventType, wrapCallback);\n    return {\n      remove: function remove() {\n        target.detachEvent('on' + eventType, wrapCallback);\n      }\n    };\n  }\n}\n\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/add-dom-event-listener/lib/index.js\n ** module id = 189\n ** module chunks = 4\n **/","/**\n * @ignore\n * event object for dom\n * @author yiminghe@gmail.com\n */\n\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _EventBaseObject = require('./EventBaseObject');\n\nvar _EventBaseObject2 = _interopRequireDefault(_EventBaseObject);\n\nvar _objectAssign = require('object-assign');\n\nvar _objectAssign2 = _interopRequireDefault(_objectAssign);\n\nvar TRUE = true;\nvar FALSE = false;\nvar commonProps = ['altKey', 'bubbles', 'cancelable', 'ctrlKey', 'currentTarget', 'eventPhase', 'metaKey', 'shiftKey', 'target', 'timeStamp', 'view', 'type'];\n\nfunction isNullOrUndefined(w) {\n  return w === null || w === undefined;\n}\n\nvar eventNormalizers = [{\n  reg: /^key/,\n  props: ['char', 'charCode', 'key', 'keyCode', 'which'],\n  fix: function fix(event, nativeEvent) {\n    if (isNullOrUndefined(event.which)) {\n      event.which = !isNullOrUndefined(nativeEvent.charCode) ? nativeEvent.charCode : nativeEvent.keyCode;\n    }\n\n    // add metaKey to non-Mac browsers (use ctrl for PC 's and Meta for Macs)\n    if (event.metaKey === undefined) {\n      event.metaKey = event.ctrlKey;\n    }\n  }\n}, {\n  reg: /^touch/,\n  props: ['touches', 'changedTouches', 'targetTouches']\n}, {\n  reg: /^hashchange$/,\n  props: ['newURL', 'oldURL']\n}, {\n  reg: /^gesturechange$/i,\n  props: ['rotation', 'scale']\n}, {\n  reg: /^(mousewheel|DOMMouseScroll)$/,\n  props: [],\n  fix: function fix(event, nativeEvent) {\n    var deltaX = undefined;\n    var deltaY = undefined;\n    var delta = undefined;\n    var wheelDelta = nativeEvent.wheelDelta;\n    var axis = nativeEvent.axis;\n    var wheelDeltaY = nativeEvent.wheelDeltaY;\n    var wheelDeltaX = nativeEvent.wheelDeltaX;\n    var detail = nativeEvent.detail;\n\n    // ie/webkit\n    if (wheelDelta) {\n      delta = wheelDelta / 120;\n    }\n\n    // gecko\n    if (detail) {\n      // press control e.detail == 1 else e.detail == 3\n      delta = 0 - (detail % 3 === 0 ? detail / 3 : detail);\n    }\n\n    // Gecko\n    if (axis !== undefined) {\n      if (axis === event.HORIZONTAL_AXIS) {\n        deltaY = 0;\n        deltaX = 0 - delta;\n      } else if (axis === event.VERTICAL_AXIS) {\n        deltaX = 0;\n        deltaY = delta;\n      }\n    }\n\n    // Webkit\n    if (wheelDeltaY !== undefined) {\n      deltaY = wheelDeltaY / 120;\n    }\n    if (wheelDeltaX !== undefined) {\n      deltaX = -1 * wheelDeltaX / 120;\n    }\n\n    // 默认 deltaY (ie)\n    if (!deltaX && !deltaY) {\n      deltaY = delta;\n    }\n\n    if (deltaX !== undefined) {\n      /**\n       * deltaX of mousewheel event\n       * @property deltaX\n       * @member Event.DomEvent.Object\n       */\n      event.deltaX = deltaX;\n    }\n\n    if (deltaY !== undefined) {\n      /**\n       * deltaY of mousewheel event\n       * @property deltaY\n       * @member Event.DomEvent.Object\n       */\n      event.deltaY = deltaY;\n    }\n\n    if (delta !== undefined) {\n      /**\n       * delta of mousewheel event\n       * @property delta\n       * @member Event.DomEvent.Object\n       */\n      event.delta = delta;\n    }\n  }\n}, {\n  reg: /^mouse|contextmenu|click|mspointer|(^DOMMouseScroll$)/i,\n  props: ['buttons', 'clientX', 'clientY', 'button', 'offsetX', 'relatedTarget', 'which', 'fromElement', 'toElement', 'offsetY', 'pageX', 'pageY', 'screenX', 'screenY'],\n  fix: function fix(event, nativeEvent) {\n    var eventDoc = undefined;\n    var doc = undefined;\n    var body = undefined;\n    var target = event.target;\n    var button = nativeEvent.button;\n\n    // Calculate pageX/Y if missing and clientX/Y available\n    if (target && isNullOrUndefined(event.pageX) && !isNullOrUndefined(nativeEvent.clientX)) {\n      eventDoc = target.ownerDocument || document;\n      doc = eventDoc.documentElement;\n      body = eventDoc.body;\n      event.pageX = nativeEvent.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);\n      event.pageY = nativeEvent.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0);\n    }\n\n    // which for click: 1 === left; 2 === middle; 3 === right\n    // do not use button\n    if (!event.which && button !== undefined) {\n      if (button & 1) {\n        event.which = 1;\n      } else if (button & 2) {\n        event.which = 3;\n      } else if (button & 4) {\n        event.which = 2;\n      } else {\n        event.which = 0;\n      }\n    }\n\n    // add relatedTarget, if necessary\n    if (!event.relatedTarget && event.fromElement) {\n      event.relatedTarget = event.fromElement === target ? event.toElement : event.fromElement;\n    }\n\n    return event;\n  }\n}];\n\nfunction retTrue() {\n  return TRUE;\n}\n\nfunction retFalse() {\n  return FALSE;\n}\n\nfunction DomEventObject(nativeEvent) {\n  var type = nativeEvent.type;\n\n  var isNative = typeof nativeEvent.stopPropagation === 'function' || typeof nativeEvent.cancelBubble === 'boolean';\n\n  _EventBaseObject2['default'].call(this);\n\n  this.nativeEvent = nativeEvent;\n\n  // in case dom event has been mark as default prevented by lower dom node\n  var isDefaultPrevented = retFalse;\n  if ('defaultPrevented' in nativeEvent) {\n    isDefaultPrevented = nativeEvent.defaultPrevented ? retTrue : retFalse;\n  } else if ('getPreventDefault' in nativeEvent) {\n    // https://bugzilla.mozilla.org/show_bug.cgi?id=691151\n    isDefaultPrevented = nativeEvent.getPreventDefault() ? retTrue : retFalse;\n  } else if ('returnValue' in nativeEvent) {\n    isDefaultPrevented = nativeEvent.returnValue === FALSE ? retTrue : retFalse;\n  }\n\n  this.isDefaultPrevented = isDefaultPrevented;\n\n  var fixFns = [];\n  var fixFn = undefined;\n  var l = undefined;\n  var prop = undefined;\n  var props = commonProps.concat();\n\n  eventNormalizers.forEach(function (normalizer) {\n    if (type.match(normalizer.reg)) {\n      props = props.concat(normalizer.props);\n      if (normalizer.fix) {\n        fixFns.push(normalizer.fix);\n      }\n    }\n  });\n\n  l = props.length;\n\n  // clone properties of the original event object\n  while (l) {\n    prop = props[--l];\n    this[prop] = nativeEvent[prop];\n  }\n\n  // fix target property, if necessary\n  if (!this.target && isNative) {\n    this.target = nativeEvent.srcElement || document; // srcElement might not be defined either\n  }\n\n  // check if target is a text node (safari)\n  if (this.target && this.target.nodeType === 3) {\n    this.target = this.target.parentNode;\n  }\n\n  l = fixFns.length;\n\n  while (l) {\n    fixFn = fixFns[--l];\n    fixFn(this, nativeEvent);\n  }\n\n  this.timeStamp = nativeEvent.timeStamp || Date.now();\n}\n\nvar EventBaseObjectProto = _EventBaseObject2['default'].prototype;\n\n(0, _objectAssign2['default'])(DomEventObject.prototype, EventBaseObjectProto, {\n  constructor: DomEventObject,\n\n  preventDefault: function preventDefault() {\n    var e = this.nativeEvent;\n\n    // if preventDefault exists run it on the original event\n    if (e.preventDefault) {\n      e.preventDefault();\n    } else {\n      // otherwise set the returnValue property of the original event to FALSE (IE)\n      e.returnValue = FALSE;\n    }\n\n    EventBaseObjectProto.preventDefault.call(this);\n  },\n\n  stopPropagation: function stopPropagation() {\n    var e = this.nativeEvent;\n\n    // if stopPropagation exists run it on the original event\n    if (e.stopPropagation) {\n      e.stopPropagation();\n    } else {\n      // otherwise set the cancelBubble property of the original event to TRUE (IE)\n      e.cancelBubble = TRUE;\n    }\n\n    EventBaseObjectProto.stopPropagation.call(this);\n  }\n});\n\nexports['default'] = DomEventObject;\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/add-dom-event-listener/lib/EventObject.js\n ** module id = 190\n ** module chunks = 4\n **/","/**\n * @ignore\n * base event object for custom and dom event.\n * @author yiminghe@gmail.com\n */\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nfunction returnFalse() {\n  return false;\n}\n\nfunction returnTrue() {\n  return true;\n}\n\nfunction EventBaseObject() {\n  this.timeStamp = Date.now();\n  this.target = undefined;\n  this.currentTarget = undefined;\n}\n\nEventBaseObject.prototype = {\n  isEventObject: 1,\n\n  constructor: EventBaseObject,\n\n  isDefaultPrevented: returnFalse,\n\n  isPropagationStopped: returnFalse,\n\n  isImmediatePropagationStopped: returnFalse,\n\n  preventDefault: function preventDefault() {\n    this.isDefaultPrevented = returnTrue;\n  },\n\n  stopPropagation: function stopPropagation() {\n    this.isPropagationStopped = returnTrue;\n  },\n\n  stopImmediatePropagation: function stopImmediatePropagation() {\n    this.isImmediatePropagationStopped = returnTrue;\n    // fixed 1.2\n    // call stopPropagation implicitly\n    this.stopPropagation();\n  },\n\n  halt: function halt(immediate) {\n    if (immediate) {\n      this.stopImmediatePropagation();\n    } else {\n      this.stopPropagation();\n    }\n    this.preventDefault();\n  }\n};\n\nexports[\"default\"] = EventBaseObject;\nmodule.exports = exports[\"default\"];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/add-dom-event-listener/lib/EventBaseObject.js\n ** module id = 191\n ** module chunks = 4\n **/","/* eslint-disable no-unused-vars */\n'use strict';\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nmodule.exports = Object.assign || function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (Object.getOwnPropertySymbols) {\n\t\t\tsymbols = Object.getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/object-assign/index.js\n ** module id = 192\n ** module chunks = 4\n **/","\"use strict\";\n\nmodule.exports = function contains(root, n) {\n  var node = n;\n  while (node) {\n    if (node === root) {\n      return true;\n    }\n    node = node.parentNode;\n  }\n\n  return false;\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rc-util/lib/Dom/contains.js\n ** module id = 193\n ** module chunks = 4\n **/","'use strict';\n\nvar React = require('react');\n\nmodule.exports = function toArray(children) {\n  var ret = [];\n  React.Children.forEach(children, function each(c) {\n    ret.push(c);\n  });\n  return ret;\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rc-util/lib/Children/toArray.js\n ** module id = 194\n ** module chunks = 4\n **/","'use strict';\n\nvar React = require('react');\n\nfunction mirror(o) {\n  return o;\n}\n\nmodule.exports = function mapSelf(children) {\n  // return ReactFragment\n  return React.Children.map(children, mirror);\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rc-util/lib/Children/mapSelf.js\n ** module id = 195\n ** module chunks = 4\n **/","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = require('react-dom');\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _rcAlign = require('rc-align');\n\nvar _rcAlign2 = _interopRequireDefault(_rcAlign);\n\nvar _rcAnimate = require('rc-animate');\n\nvar _rcAnimate2 = _interopRequireDefault(_rcAnimate);\n\nvar _PopupInner = require('./PopupInner');\n\nvar _PopupInner2 = _interopRequireDefault(_PopupInner);\n\nvar Popup = _react2['default'].createClass({\n  displayName: 'Popup',\n\n  propTypes: {\n    visible: _react.PropTypes.bool,\n    wrap: _react.PropTypes.object,\n    style: _react.PropTypes.object,\n    getClassNameFromAlign: _react.PropTypes.func,\n    onMouseEnter: _react.PropTypes.func,\n    className: _react.PropTypes.string,\n    onMouseLeave: _react.PropTypes.func\n  },\n\n  componentDidMount: function componentDidMount() {\n    this.rootNode = this.getPopupDomNode();\n  },\n\n  onAlign: function onAlign(popupDomNode, align) {\n    var props = this.props;\n    var alignClassName = props.getClassNameFromAlign(props.align);\n    var currentAlignClassName = props.getClassNameFromAlign(align);\n    if (alignClassName !== currentAlignClassName) {\n      this.currentAlignClassName = currentAlignClassName;\n      popupDomNode.className = this.getClassName(currentAlignClassName);\n    }\n  },\n\n  getPopupDomNode: function getPopupDomNode() {\n    return _reactDom2['default'].findDOMNode(this);\n  },\n\n  getTarget: function getTarget() {\n    return _reactDom2['default'].findDOMNode(this.props.wrap);\n  },\n\n  getTransitionName: function getTransitionName() {\n    var props = this.props;\n    var transitionName = props.transitionName;\n    if (!transitionName && props.animation) {\n      transitionName = props.prefixCls + '-' + props.animation;\n    }\n    return transitionName;\n  },\n\n  getClassName: function getClassName(currentAlignClassName) {\n    var props = this.props;\n    var prefixCls = props.prefixCls;\n\n    var className = prefixCls + ' ' + props.className + ' ';\n    className += currentAlignClassName;\n    return className;\n  },\n\n  render: function render() {\n    var props = this.props;\n    var align = props.align;\n    var style = props.style;\n    var visible = props.visible;\n    var prefixCls = props.prefixCls;\n    var destroyPopupOnHide = props.destroyPopupOnHide;\n\n    var className = this.getClassName(this.currentAlignClassName || props.getClassNameFromAlign(align));\n    var hiddenClassName = prefixCls + '-hidden';\n    if (!visible) {\n      this.currentAlignClassName = null;\n    }\n    if (destroyPopupOnHide) {\n      return _react2['default'].createElement(\n        _rcAnimate2['default'],\n        { component: '',\n          exclusive: true,\n          transitionAppear: true,\n          transitionName: this.getTransitionName() },\n        visible ? _react2['default'].createElement(\n          _rcAlign2['default'],\n          { target: this.getTarget,\n            key: 'popup',\n            monitorWindowResize: true,\n            align: align,\n            onAlign: this.onAlign },\n          _react2['default'].createElement(\n            _PopupInner2['default'],\n            { className: className,\n              visible: true,\n              onMouseEnter: props.onMouseEnter,\n              onMouseLeave: props.onMouseLeave,\n              style: style },\n            props.children\n          )\n        ) : null\n      );\n    }\n    return _react2['default'].createElement(\n      _rcAnimate2['default'],\n      { component: '',\n        exclusive: true,\n        transitionAppear: true,\n        transitionName: this.getTransitionName(),\n        showProp: 'xVisible' },\n      _react2['default'].createElement(\n        _rcAlign2['default'],\n        { target: this.getTarget,\n          key: 'popup',\n          monitorWindowResize: true,\n          xVisible: visible,\n          childrenProps: {\n            visible: 'xVisible'\n          },\n          disabled: !visible,\n          align: align,\n          onAlign: this.onAlign },\n        _react2['default'].createElement(\n          _PopupInner2['default'],\n          { className: className,\n            hiddenClassName: hiddenClassName,\n            onMouseEnter: props.onMouseEnter,\n            onMouseLeave: props.onMouseLeave,\n            style: style },\n          props.children\n        )\n      )\n    );\n  }\n});\n\nexports['default'] = Popup;\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rc-trigger/lib/Popup.js\n ** module id = 196\n ** module chunks = 4\n **/","// export this package's api\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _Align = require('./Align');\n\nvar _Align2 = _interopRequireDefault(_Align);\n\nexports['default'] = _Align2['default'];\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rc-align/lib/index.js\n ** module id = 197\n ** module chunks = 4\n **/","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = require('react-dom');\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _domAlign = require('dom-align');\n\nvar _domAlign2 = _interopRequireDefault(_domAlign);\n\nvar _rcUtil = require('rc-util');\n\nvar _isWindow = require('./isWindow');\n\nvar _isWindow2 = _interopRequireDefault(_isWindow);\n\nfunction buffer(fn, ms) {\n  var timer = undefined;\n  return function bufferFn() {\n    if (timer) {\n      clearTimeout(timer);\n    }\n    timer = setTimeout(fn, ms);\n  };\n}\n\nvar Align = _react2['default'].createClass({\n  displayName: 'Align',\n\n  propTypes: {\n    childrenProps: _react.PropTypes.object,\n    align: _react.PropTypes.object.isRequired,\n    target: _react.PropTypes.func,\n    onAlign: _react.PropTypes.func,\n    monitorBufferTime: _react.PropTypes.number,\n    monitorWindowResize: _react.PropTypes.bool,\n    disabled: _react.PropTypes.bool,\n    children: _react.PropTypes.any\n  },\n\n  getDefaultProps: function getDefaultProps() {\n    return {\n      target: function target() {\n        return window;\n      },\n      onAlign: function onAlign() {},\n      monitorBufferTime: 50,\n      monitorWindowResize: false,\n      disabled: false\n    };\n  },\n\n  componentDidMount: function componentDidMount() {\n    var props = this.props;\n    // if parent ref not attached .... use document.getElementById\n    if (!props.disabled) {\n      var source = _reactDom2['default'].findDOMNode(this);\n      props.onAlign(source, (0, _domAlign2['default'])(source, props.target(), props.align));\n      if (props.monitorWindowResize) {\n        this.startMonitorWindowResize();\n      }\n    }\n  },\n\n  componentDidUpdate: function componentDidUpdate(prevProps) {\n    var reAlign = false;\n    var props = this.props;\n    var currentTarget = undefined;\n\n    if (!props.disabled) {\n      if (prevProps.disabled || prevProps.align !== props.align) {\n        reAlign = true;\n        currentTarget = props.target();\n      } else {\n        var lastTarget = prevProps.target();\n        currentTarget = props.target();\n        if ((0, _isWindow2['default'])(lastTarget) && (0, _isWindow2['default'])(currentTarget)) {\n          reAlign = false;\n        } else if (lastTarget !== currentTarget) {\n          reAlign = true;\n        }\n      }\n    }\n\n    if (reAlign) {\n      var source = _reactDom2['default'].findDOMNode(this);\n      props.onAlign(source, (0, _domAlign2['default'])(source, currentTarget, props.align));\n    }\n\n    if (props.monitorWindowResize && !props.disabled) {\n      this.startMonitorWindowResize();\n    } else {\n      this.stopMonitorWindowResize();\n    }\n  },\n\n  componentWillUnmount: function componentWillUnmount() {\n    this.stopMonitorWindowResize();\n  },\n\n  onWindowResize: function onWindowResize() {\n    var props = this.props;\n    if (!props.disabled) {\n      var source = _reactDom2['default'].findDOMNode(this);\n      props.onAlign(source, (0, _domAlign2['default'])(source, props.target(), props.align));\n    }\n  },\n\n  startMonitorWindowResize: function startMonitorWindowResize() {\n    if (!this.resizeHandler) {\n      this.resizeHandler = _rcUtil.Dom.addEventListener(window, 'resize', buffer(this.onWindowResize, this.props.monitorBufferTime));\n    }\n  },\n\n  stopMonitorWindowResize: function stopMonitorWindowResize() {\n    if (this.resizeHandler) {\n      this.resizeHandler.remove();\n      this.resizeHandler = null;\n    }\n  },\n\n  render: function render() {\n    var _props = this.props;\n    var childrenProps = _props.childrenProps;\n    var children = _props.children;\n\n    var child = _react2['default'].Children.only(children);\n    if (childrenProps) {\n      var newProps = {};\n      for (var prop in childrenProps) {\n        if (childrenProps.hasOwnProperty(prop)) {\n          newProps[prop] = this.props[childrenProps[prop]];\n        }\n      }\n      return _react2['default'].cloneElement(child, newProps);\n    }\n    return child;\n  }\n});\n\nexports['default'] = Align;\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rc-align/lib/Align.js\n ** module id = 198\n ** module chunks = 4\n **/","/**\n * align dom node flexibly\n * @author yiminghe@gmail.com\n */\n\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('./utils');\n\nvar _utils2 = _interopRequireDefault(_utils);\n\nvar _getOffsetParent = require('./getOffsetParent');\n\nvar _getOffsetParent2 = _interopRequireDefault(_getOffsetParent);\n\nvar _getVisibleRectForElement = require('./getVisibleRectForElement');\n\nvar _getVisibleRectForElement2 = _interopRequireDefault(_getVisibleRectForElement);\n\nvar _adjustForViewport = require('./adjustForViewport');\n\nvar _adjustForViewport2 = _interopRequireDefault(_adjustForViewport);\n\nvar _getRegion = require('./getRegion');\n\nvar _getRegion2 = _interopRequireDefault(_getRegion);\n\nvar _getElFuturePos = require('./getElFuturePos');\n\nvar _getElFuturePos2 = _interopRequireDefault(_getElFuturePos);\n\n// http://yiminghe.iteye.com/blog/1124720\n\nfunction isFailX(elFuturePos, elRegion, visibleRect) {\n  return elFuturePos.left < visibleRect.left || elFuturePos.left + elRegion.width > visibleRect.right;\n}\n\nfunction isFailY(elFuturePos, elRegion, visibleRect) {\n  return elFuturePos.top < visibleRect.top || elFuturePos.top + elRegion.height > visibleRect.bottom;\n}\n\nfunction flip(points, reg, map) {\n  var ret = [];\n  _utils2['default'].each(points, function (p) {\n    ret.push(p.replace(reg, function (m) {\n      return map[m];\n    }));\n  });\n  return ret;\n}\n\nfunction flipOffset(offset, index) {\n  offset[index] = -offset[index];\n  return offset;\n}\n\nfunction convertOffset(str, offsetLen) {\n  var n = undefined;\n  if (/%$/.test(str)) {\n    n = parseInt(str.substring(0, str.length - 1), 10) / 100 * offsetLen;\n  } else {\n    n = parseInt(str, 10);\n  }\n  return n || 0;\n}\n\nfunction normalizeOffset(offset, el) {\n  offset[0] = convertOffset(offset[0], el.width);\n  offset[1] = convertOffset(offset[1], el.height);\n}\n\nfunction domAlign(el, refNode, align) {\n  var points = align.points;\n  var offset = align.offset || [0, 0];\n  var targetOffset = align.targetOffset || [0, 0];\n  var overflow = align.overflow;\n  var target = align.target || refNode;\n  var source = align.source || el;\n  offset = [].concat(offset);\n  targetOffset = [].concat(targetOffset);\n  overflow = overflow || {};\n  var newOverflowCfg = {};\n\n  var fail = 0;\n  // 当前节点可以被放置的显示区域\n  var visibleRect = (0, _getVisibleRectForElement2['default'])(source);\n  // 当前节点所占的区域, left/top/width/height\n  var elRegion = (0, _getRegion2['default'])(source);\n  // 参照节点所占的区域, left/top/width/height\n  var refNodeRegion = (0, _getRegion2['default'])(target);\n  // 将 offset 转换成数值,支持百分比\n  normalizeOffset(offset, elRegion);\n  normalizeOffset(targetOffset, refNodeRegion);\n  // 当前节点将要被放置的位置\n  var elFuturePos = (0, _getElFuturePos2['default'])(elRegion, refNodeRegion, points, offset, targetOffset);\n  // 当前节点将要所处的区域\n  var newElRegion = _utils2['default'].merge(elRegion, elFuturePos);\n\n  // 如果可视区域不能完全放置当前节点时允许调整\n  if (visibleRect && (overflow.adjustX || overflow.adjustY)) {\n    if (overflow.adjustX) {\n      // 如果横向不能放下\n      if (isFailX(elFuturePos, elRegion, visibleRect)) {\n        fail = 1;\n        // 对齐位置反下\n        points = flip(points, /[lr]/ig, {\n          l: 'r',\n          r: 'l'\n        });\n        // 偏移量也反下\n        offset = flipOffset(offset, 0);\n        targetOffset = flipOffset(targetOffset, 0);\n      }\n    }\n\n    if (overflow.adjustY) {\n      // 如果纵向不能放下\n      if (isFailY(elFuturePos, elRegion, visibleRect)) {\n        fail = 1;\n        // 对齐位置反下\n        points = flip(points, /[tb]/ig, {\n          t: 'b',\n          b: 't'\n        });\n        // 偏移量也反下\n        offset = flipOffset(offset, 1);\n        targetOffset = flipOffset(targetOffset, 1);\n      }\n    }\n\n    // 如果失败,重新计算当前节点将要被放置的位置\n    if (fail) {\n      elFuturePos = (0, _getElFuturePos2['default'])(elRegion, refNodeRegion, points, offset, targetOffset);\n      _utils2['default'].mix(newElRegion, elFuturePos);\n    }\n\n    // 检查反下后的位置是否可以放下了\n    // 如果仍然放不下只有指定了可以调整当前方向才调整\n    newOverflowCfg.adjustX = overflow.adjustX && isFailX(elFuturePos, elRegion, visibleRect);\n\n    newOverflowCfg.adjustY = overflow.adjustY && isFailY(elFuturePos, elRegion, visibleRect);\n\n    // 确实要调整,甚至可能会调整高度宽度\n    if (newOverflowCfg.adjustX || newOverflowCfg.adjustY) {\n      newElRegion = (0, _adjustForViewport2['default'])(elFuturePos, elRegion, visibleRect, newOverflowCfg);\n    }\n  }\n\n  // need judge to in case set fixed with in css on height auto element\n  if (newElRegion.width !== elRegion.width) {\n    _utils2['default'].css(source, 'width', source.width() + newElRegion.width - elRegion.width);\n  }\n\n  if (newElRegion.height !== elRegion.height) {\n    _utils2['default'].css(source, 'height', source.height() + newElRegion.height - elRegion.height);\n  }\n\n  // https://github.com/kissyteam/kissy/issues/190\n  // http://localhost:8888/kissy/src/overlay/demo/other/relative_align/align.html\n  // 相对于屏幕位置没变,而 left/top 变了\n  // 例如 <div 'relative'><el absolute></div>\n  _utils2['default'].offset(source, {\n    left: newElRegion.left,\n    top: newElRegion.top\n  }, {\n    useCssRight: align.useCssRight,\n    useCssBottom: align.useCssBottom\n  });\n\n  return {\n    points: points,\n    offset: offset,\n    targetOffset: targetOffset,\n    overflow: newOverflowCfg\n  };\n}\n\ndomAlign.__getOffsetParent = _getOffsetParent2['default'];\n\ndomAlign.__getVisibleRectForElement = _getVisibleRectForElement2['default'];\n\nexports['default'] = domAlign;\n\n/**\n *  2012-04-26 yiminghe@gmail.com\n *   - 优化智能对齐算法\n *   - 慎用 resizeXX\n *\n *  2011-07-13 yiminghe@gmail.com note:\n *   - 增加智能对齐,以及大小调整选项\n **/\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/dom-align/lib/index.js\n ** module id = 199\n ** module chunks = 4\n **/","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true\n});\nvar RE_NUM = /[\\-+]?(?:\\d*\\.|)\\d+(?:[eE][\\-+]?\\d+|)/.source;\n\nvar getComputedStyleX = undefined;\n\nfunction css(el, name, v) {\n  var value = v;\n  if (typeof name === 'object') {\n    for (var i in name) {\n      if (name.hasOwnProperty(i)) {\n        css(el, i, name[i]);\n      }\n    }\n    return undefined;\n  }\n  if (typeof value !== 'undefined') {\n    if (typeof value === 'number') {\n      value = value + 'px';\n    }\n    el.style[name] = value;\n    return undefined;\n  }\n  return getComputedStyleX(el, name);\n}\n\nfunction getClientPosition(elem) {\n  var box = undefined;\n  var x = undefined;\n  var y = undefined;\n  var doc = elem.ownerDocument;\n  var body = doc.body;\n  var docElem = doc && doc.documentElement;\n  // 根据 GBS 最新数据,A-Grade Browsers 都已支持 getBoundingClientRect 方法,不用再考虑传统的实现方式\n  box = elem.getBoundingClientRect();\n\n  // 注:jQuery 还考虑减去 docElem.clientLeft/clientTop\n  // 但测试发现,这样反而会导致当 html 和 body 有边距/边框样式时,获取的值不正确\n  // 此外,ie6 会忽略 html 的 margin 值,幸运地是没有谁会去设置 html 的 margin\n\n  x = box.left;\n  y = box.top;\n\n  // In IE, most of the time, 2 extra pixels are added to the top and left\n  // due to the implicit 2-pixel inset border.  In IE6/7 quirks mode and\n  // IE6 standards mode, this border can be overridden by setting the\n  // document element's border to zero -- thus, we cannot rely on the\n  // offset always being 2 pixels.\n\n  // In quirks mode, the offset can be determined by querying the body's\n  // clientLeft/clientTop, but in standards mode, it is found by querying\n  // the document element's clientLeft/clientTop.  Since we already called\n  // getClientBoundingRect we have already forced a reflow, so it is not\n  // too expensive just to query them all.\n\n  // ie 下应该减去窗口的边框吧,毕竟默认 absolute 都是相对窗口定位的\n  // 窗口边框标准是设 documentElement ,quirks 时设置 body\n  // 最好禁止在 body 和 html 上边框 ,但 ie < 9 html 默认有 2px ,减去\n  // 但是非 ie 不可能设置窗口边框,body html 也不是窗口 ,ie 可以通过 html,body 设置\n  // 标准 ie 下 docElem.clientTop 就是 border-top\n  // ie7 html 即窗口边框改变不了。永远为 2\n  // 但标准 firefox/chrome/ie9 下 docElem.clientTop 是窗口边框,即使设了 border-top 也为 0\n\n  x -= docElem.clientLeft || body.clientLeft || 0;\n  y -= docElem.clientTop || body.clientTop || 0;\n\n  return { left: x, top: y };\n}\n\nfunction getScroll(w, top) {\n  var ret = w['page' + (top ? 'Y' : 'X') + 'Offset'];\n  var method = 'scroll' + (top ? 'Top' : 'Left');\n  if (typeof ret !== 'number') {\n    var d = w.document;\n    // ie6,7,8 standard mode\n    ret = d.documentElement[method];\n    if (typeof ret !== 'number') {\n      // quirks mode\n      ret = d.body[method];\n    }\n  }\n  return ret;\n}\n\nfunction getScrollLeft(w) {\n  return getScroll(w);\n}\n\nfunction getScrollTop(w) {\n  return getScroll(w, true);\n}\n\nfunction getOffset(el) {\n  var pos = getClientPosition(el);\n  var doc = el.ownerDocument;\n  var w = doc.defaultView || doc.parentWindow;\n  pos.left += getScrollLeft(w);\n  pos.top += getScrollTop(w);\n  return pos;\n}\nfunction _getComputedStyle(elem, name, cs) {\n  var computedStyle = cs;\n  var val = '';\n  var d = elem.ownerDocument;\n  computedStyle = computedStyle || d.defaultView.getComputedStyle(elem, null);\n\n  // https://github.com/kissyteam/kissy/issues/61\n  if (computedStyle) {\n    val = computedStyle.getPropertyValue(name) || computedStyle[name];\n  }\n\n  return val;\n}\n\nvar _RE_NUM_NO_PX = new RegExp('^(' + RE_NUM + ')(?!px)[a-z%]+$', 'i');\nvar RE_POS = /^(top|right|bottom|left)$/;\nvar CURRENT_STYLE = 'currentStyle';\nvar RUNTIME_STYLE = 'runtimeStyle';\nvar LEFT = 'left';\nvar PX = 'px';\n\nfunction _getComputedStyleIE(elem, name) {\n  // currentStyle maybe null\n  // http://msdn.microsoft.com/en-us/library/ms535231.aspx\n  var ret = elem[CURRENT_STYLE] && elem[CURRENT_STYLE][name];\n\n  // 当 width/height 设置为百分比时,通过 pixelLeft 方式转换的 width/height 值\n  // 一开始就处理了! CUSTOM_STYLE.height,CUSTOM_STYLE.width ,cssHook 解决@2011-08-19\n  // 在 ie 下不对,需要直接用 offset 方式\n  // borderWidth 等值也有问题,但考虑到 borderWidth 设为百分比的概率很小,这里就不考虑了\n\n  // From the awesome hack by Dean Edwards\n  // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291\n  // If we're not dealing with a regular pixel number\n  // but a number that has a weird ending, we need to convert it to pixels\n  // exclude left right for relativity\n  if (_RE_NUM_NO_PX.test(ret) && !RE_POS.test(name)) {\n    // Remember the original values\n    var style = elem.style;\n    var left = style[LEFT];\n    var rsLeft = elem[RUNTIME_STYLE][LEFT];\n\n    // prevent flashing of content\n    elem[RUNTIME_STYLE][LEFT] = elem[CURRENT_STYLE][LEFT];\n\n    // Put in the new values to get a computed value out\n    style[LEFT] = name === 'fontSize' ? '1em' : ret || 0;\n    ret = style.pixelLeft + PX;\n\n    // Revert the changed values\n    style[LEFT] = left;\n\n    elem[RUNTIME_STYLE][LEFT] = rsLeft;\n  }\n  return ret === '' ? 'auto' : ret;\n}\n\nif (typeof window !== 'undefined') {\n  getComputedStyleX = window.getComputedStyle ? _getComputedStyle : _getComputedStyleIE;\n}\n\nfunction getOffsetDirection(dir, option) {\n  if (dir === 'left') {\n    return option.useCssRight ? 'right' : dir;\n  }\n  return option.useCssBottom ? 'bottom' : dir;\n}\n\nfunction oppositeOffsetDirection(dir) {\n  if (dir === 'left') {\n    return 'right';\n  } else if (dir === 'right') {\n    return 'left';\n  } else if (dir === 'top') {\n    return 'bottom';\n  } else if (dir === 'bottom') {\n    return 'top';\n  }\n}\n\n// 设置 elem 相对 elem.ownerDocument 的坐标\nfunction setOffset(elem, offset, option) {\n  // set position first, in-case top/left are set even on static elem\n  if (css(elem, 'position') === 'static') {\n    elem.style.position = 'relative';\n  }\n  var presetH = -999;\n  var presetV = -999;\n  var horizontalProperty = getOffsetDirection('left', option);\n  var verticalProperty = getOffsetDirection('top', option);\n  var oppositeHorizontalProperty = oppositeOffsetDirection(horizontalProperty);\n  var oppositeVerticalProperty = oppositeOffsetDirection(verticalProperty);\n\n  if (horizontalProperty !== 'left') {\n    presetH = 999;\n  }\n\n  if (verticalProperty !== 'top') {\n    presetV = 999;\n  }\n\n  if ('left' in offset) {\n    elem.style[oppositeHorizontalProperty] = '';\n    elem.style[horizontalProperty] = presetH + 'px';\n  }\n  if ('top' in offset) {\n    elem.style[oppositeVerticalProperty] = '';\n    elem.style[verticalProperty] = presetV + 'px';\n  }\n  var old = getOffset(elem);\n  var ret = {};\n  var key = undefined;\n  for (key in offset) {\n    if (offset.hasOwnProperty(key)) {\n      var dir = getOffsetDirection(key, option);\n      var preset = key === 'left' ? presetH : presetV;\n      if (dir === key) {\n        ret[dir] = preset + offset[key] - old[key];\n      } else {\n        ret[dir] = preset + old[key] - offset[key];\n      }\n    }\n  }\n  css(elem, ret);\n}\n\nfunction each(arr, fn) {\n  for (var i = 0; i < arr.length; i++) {\n    fn(arr[i]);\n  }\n}\n\nfunction isBorderBoxFn(elem) {\n  return getComputedStyleX(elem, 'boxSizing') === 'border-box';\n}\n\nvar BOX_MODELS = ['margin', 'border', 'padding'];\nvar CONTENT_INDEX = -1;\nvar PADDING_INDEX = 2;\nvar BORDER_INDEX = 1;\nvar MARGIN_INDEX = 0;\n\nfunction swap(elem, options, callback) {\n  var old = {};\n  var style = elem.style;\n  var name = undefined;\n\n  // Remember the old values, and insert the new ones\n  for (name in options) {\n    if (options.hasOwnProperty(name)) {\n      old[name] = style[name];\n      style[name] = options[name];\n    }\n  }\n\n  callback.call(elem);\n\n  // Revert the old values\n  for (name in options) {\n    if (options.hasOwnProperty(name)) {\n      style[name] = old[name];\n    }\n  }\n}\n\nfunction getPBMWidth(elem, props, which) {\n  var value = 0;\n  var prop = undefined;\n  var j = undefined;\n  var i = undefined;\n  for (j = 0; j < props.length; j++) {\n    prop = props[j];\n    if (prop) {\n      for (i = 0; i < which.length; i++) {\n        var cssProp = undefined;\n        if (prop === 'border') {\n          cssProp = prop + which[i] + 'Width';\n        } else {\n          cssProp = prop + which[i];\n        }\n        value += parseFloat(getComputedStyleX(elem, cssProp)) || 0;\n      }\n    }\n  }\n  return value;\n}\n\n/**\n * A crude way of determining if an object is a window\n * @member util\n */\nfunction isWindow(obj) {\n  // must use == for ie8\n  /* eslint eqeqeq:0 */\n  return obj !== null && obj !== undefined && obj == obj.window;\n}\n\nvar domUtils = {};\n\neach(['Width', 'Height'], function (name) {\n  domUtils['doc' + name] = function (refWin) {\n    var d = refWin.document;\n    return Math.max(\n    // firefox chrome documentElement.scrollHeight< body.scrollHeight\n    // ie standard mode : documentElement.scrollHeight> body.scrollHeight\n    d.documentElement['scroll' + name],\n    // quirks : documentElement.scrollHeight 最大等于可视窗口多一点?\n    d.body['scroll' + name], domUtils['viewport' + name](d));\n  };\n\n  domUtils['viewport' + name] = function (win) {\n    // pc browser includes scrollbar in window.innerWidth\n    var prop = 'client' + name;\n    var doc = win.document;\n    var body = doc.body;\n    var documentElement = doc.documentElement;\n    var documentElementProp = documentElement[prop];\n    // 标准模式取 documentElement\n    // backcompat 取 body\n    return doc.compatMode === 'CSS1Compat' && documentElementProp || body && body[prop] || documentElementProp;\n  };\n});\n\n/*\n 得到元素的大小信息\n @param elem\n @param name\n @param {String} [extra]  'padding' : (css width) + padding\n 'border' : (css width) + padding + border\n 'margin' : (css width) + padding + border + margin\n */\nfunction getWH(elem, name, ex) {\n  var extra = ex;\n  if (isWindow(elem)) {\n    return name === 'width' ? domUtils.viewportWidth(elem) : domUtils.viewportHeight(elem);\n  } else if (elem.nodeType === 9) {\n    return name === 'width' ? domUtils.docWidth(elem) : domUtils.docHeight(elem);\n  }\n  var which = name === 'width' ? ['Left', 'Right'] : ['Top', 'Bottom'];\n  var borderBoxValue = name === 'width' ? elem.offsetWidth : elem.offsetHeight;\n  var computedStyle = getComputedStyleX(elem);\n  var isBorderBox = isBorderBoxFn(elem, computedStyle);\n  var cssBoxValue = 0;\n  if (borderBoxValue === null || borderBoxValue === undefined || borderBoxValue <= 0) {\n    borderBoxValue = undefined;\n    // Fall back to computed then un computed css if necessary\n    cssBoxValue = getComputedStyleX(elem, name);\n    if (cssBoxValue === null || cssBoxValue === undefined || Number(cssBoxValue) < 0) {\n      cssBoxValue = elem.style[name] || 0;\n    }\n    // Normalize '', auto, and prepare for extra\n    cssBoxValue = parseFloat(cssBoxValue) || 0;\n  }\n  if (extra === undefined) {\n    extra = isBorderBox ? BORDER_INDEX : CONTENT_INDEX;\n  }\n  var borderBoxValueOrIsBorderBox = borderBoxValue !== undefined || isBorderBox;\n  var val = borderBoxValue || cssBoxValue;\n  if (extra === CONTENT_INDEX) {\n    if (borderBoxValueOrIsBorderBox) {\n      return val - getPBMWidth(elem, ['border', 'padding'], which, computedStyle);\n    }\n    return cssBoxValue;\n  } else if (borderBoxValueOrIsBorderBox) {\n    if (extra === BORDER_INDEX) {\n      return val;\n    }\n    return val + (extra === PADDING_INDEX ? -getPBMWidth(elem, ['border'], which, computedStyle) : getPBMWidth(elem, ['margin'], which, computedStyle));\n  }\n  return cssBoxValue + getPBMWidth(elem, BOX_MODELS.slice(extra), which, computedStyle);\n}\n\nvar cssShow = { position: 'absolute', visibility: 'hidden', display: 'block' };\n\n// fix #119 : https://github.com/kissyteam/kissy/issues/119\nfunction getWHIgnoreDisplay() {\n  for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  var val = undefined;\n  var elem = args[0];\n  // in case elem is window\n  // elem.offsetWidth === undefined\n  if (elem.offsetWidth !== 0) {\n    val = getWH.apply(undefined, args);\n  } else {\n    swap(elem, cssShow, function () {\n      val = getWH.apply(undefined, args);\n    });\n  }\n  return val;\n}\n\neach(['width', 'height'], function (name) {\n  var first = name.charAt(0).toUpperCase() + name.slice(1);\n  domUtils['outer' + first] = function (el, includeMargin) {\n    return el && getWHIgnoreDisplay(el, name, includeMargin ? MARGIN_INDEX : BORDER_INDEX);\n  };\n  var which = name === 'width' ? ['Left', 'Right'] : ['Top', 'Bottom'];\n\n  domUtils[name] = function (elem, v) {\n    var val = v;\n    if (val !== undefined) {\n      if (elem) {\n        var computedStyle = getComputedStyleX(elem);\n        var isBorderBox = isBorderBoxFn(elem);\n        if (isBorderBox) {\n          val += getPBMWidth(elem, ['padding', 'border'], which, computedStyle);\n        }\n        return css(elem, name, val);\n      }\n      return undefined;\n    }\n    return elem && getWHIgnoreDisplay(elem, name, CONTENT_INDEX);\n  };\n});\n\nfunction mix(to, from) {\n  for (var i in from) {\n    if (from.hasOwnProperty(i)) {\n      to[i] = from[i];\n    }\n  }\n  return to;\n}\n\nvar utils = {\n  getWindow: function getWindow(node) {\n    if (node && node.document && node.setTimeout) {\n      return node;\n    }\n    var doc = node.ownerDocument || node;\n    return doc.defaultView || doc.parentWindow;\n  },\n  offset: function offset(el, value, option) {\n    if (typeof value !== 'undefined') {\n      setOffset(el, value, option || {});\n    } else {\n      return getOffset(el);\n    }\n  },\n  isWindow: isWindow,\n  each: each,\n  css: css,\n  clone: function clone(obj) {\n    var i = undefined;\n    var ret = {};\n    for (i in obj) {\n      if (obj.hasOwnProperty(i)) {\n        ret[i] = obj[i];\n      }\n    }\n    var overflow = obj.overflow;\n    if (overflow) {\n      for (i in obj) {\n        if (obj.hasOwnProperty(i)) {\n          ret.overflow[i] = obj.overflow[i];\n        }\n      }\n    }\n    return ret;\n  },\n  mix: mix,\n  getWindowScrollLeft: function getWindowScrollLeft(w) {\n    return getScrollLeft(w);\n  },\n  getWindowScrollTop: function getWindowScrollTop(w) {\n    return getScrollTop(w);\n  },\n  merge: function merge() {\n    var ret = {};\n\n    for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      args[_key2] = arguments[_key2];\n    }\n\n    for (var i = 0; i < args.length; i++) {\n      utils.mix(ret, args[i]);\n    }\n    return ret;\n  },\n  viewportWidth: 0,\n  viewportHeight: 0\n};\n\nmix(utils, domUtils);\n\nexports['default'] = utils;\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/dom-align/lib/utils.js\n ** module id = 200\n ** module chunks = 4\n **/","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('./utils');\n\nvar _utils2 = _interopRequireDefault(_utils);\n\n/**\n * 得到会导致元素显示不全的祖先元素\n */\n\nfunction getOffsetParent(element) {\n  // ie 这个也不是完全可行\n  /*\n   <div style=\"width: 50px;height: 100px;overflow: hidden\">\n   <div style=\"width: 50px;height: 100px;position: relative;\" id=\"d6\">\n   元素 6 高 100px 宽 50px<br/>\n   </div>\n   </div>\n   */\n  // element.offsetParent does the right thing in ie7 and below. Return parent with layout!\n  //  In other browsers it only includes elements with position absolute, relative or\n  // fixed, not elements with overflow set to auto or scroll.\n  //        if (UA.ie && ieMode < 8) {\n  //            return element.offsetParent;\n  //        }\n  // 统一的 offsetParent 方法\n  var doc = element.ownerDocument;\n  var body = doc.body;\n  var parent = undefined;\n  var positionStyle = _utils2['default'].css(element, 'position');\n  var skipStatic = positionStyle === 'fixed' || positionStyle === 'absolute';\n\n  if (!skipStatic) {\n    return element.nodeName.toLowerCase() === 'html' ? null : element.parentNode;\n  }\n\n  for (parent = element.parentNode; parent && parent !== body; parent = parent.parentNode) {\n    positionStyle = _utils2['default'].css(parent, 'position');\n    if (positionStyle !== 'static') {\n      return parent;\n    }\n  }\n  return null;\n}\n\nexports['default'] = getOffsetParent;\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/dom-align/lib/getOffsetParent.js\n ** module id = 201\n ** module chunks = 4\n **/","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('./utils');\n\nvar _utils2 = _interopRequireDefault(_utils);\n\nvar _getOffsetParent = require('./getOffsetParent');\n\nvar _getOffsetParent2 = _interopRequireDefault(_getOffsetParent);\n\n/**\n * 获得元素的显示部分的区域\n */\nfunction getVisibleRectForElement(element) {\n  var visibleRect = {\n    left: 0,\n    right: Infinity,\n    top: 0,\n    bottom: Infinity\n  };\n  var el = (0, _getOffsetParent2['default'])(element);\n  var scrollX = undefined;\n  var scrollY = undefined;\n  var winSize = undefined;\n  var doc = element.ownerDocument;\n  var win = doc.defaultView || doc.parentWindow;\n  var body = doc.body;\n  var documentElement = doc.documentElement;\n\n  // Determine the size of the visible rect by climbing the dom accounting for\n  // all scrollable containers.\n  while (el) {\n    // clientWidth is zero for inline block elements in ie.\n    if ((navigator.userAgent.indexOf('MSIE') === -1 || el.clientWidth !== 0) &&\n    // body may have overflow set on it, yet we still get the entire\n    // viewport. In some browsers, el.offsetParent may be\n    // document.documentElement, so check for that too.\n    el !== body && el !== documentElement && _utils2['default'].css(el, 'overflow') !== 'visible') {\n      var pos = _utils2['default'].offset(el);\n      // add border\n      pos.left += el.clientLeft;\n      pos.top += el.clientTop;\n      visibleRect.top = Math.max(visibleRect.top, pos.top);\n      visibleRect.right = Math.min(visibleRect.right,\n      // consider area without scrollBar\n      pos.left + el.clientWidth);\n      visibleRect.bottom = Math.min(visibleRect.bottom, pos.top + el.clientHeight);\n      visibleRect.left = Math.max(visibleRect.left, pos.left);\n    } else if (el === body || el === documentElement) {\n      break;\n    }\n    el = (0, _getOffsetParent2['default'])(el);\n  }\n\n  // Clip by window's viewport.\n  scrollX = _utils2['default'].getWindowScrollLeft(win);\n  scrollY = _utils2['default'].getWindowScrollTop(win);\n  visibleRect.left = Math.max(visibleRect.left, scrollX);\n  visibleRect.top = Math.max(visibleRect.top, scrollY);\n  winSize = {\n    width: _utils2['default'].viewportWidth(win),\n    height: _utils2['default'].viewportHeight(win)\n  };\n  visibleRect.right = Math.min(visibleRect.right, scrollX + winSize.width);\n  visibleRect.bottom = Math.min(visibleRect.bottom, scrollY + winSize.height);\n  return visibleRect.top >= 0 && visibleRect.left >= 0 && visibleRect.bottom > visibleRect.top && visibleRect.right > visibleRect.left ? visibleRect : null;\n}\n\nexports['default'] = getVisibleRectForElement;\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/dom-align/lib/getVisibleRectForElement.js\n ** module id = 202\n ** module chunks = 4\n **/","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('./utils');\n\nvar _utils2 = _interopRequireDefault(_utils);\n\nfunction adjustForViewport(elFuturePos, elRegion, visibleRect, overflow) {\n  var pos = _utils2['default'].clone(elFuturePos);\n  var size = {\n    width: elRegion.width,\n    height: elRegion.height\n  };\n\n  if (overflow.adjustX && pos.left < visibleRect.left) {\n    pos.left = visibleRect.left;\n  }\n\n  // Left edge inside and right edge outside viewport, try to resize it.\n  if (overflow.resizeWidth && pos.left >= visibleRect.left && pos.left + size.width > visibleRect.right) {\n    size.width -= pos.left + size.width - visibleRect.right;\n  }\n\n  // Right edge outside viewport, try to move it.\n  if (overflow.adjustX && pos.left + size.width > visibleRect.right) {\n    // 保证左边界和可视区域左边界对齐\n    pos.left = Math.max(visibleRect.right - size.width, visibleRect.left);\n  }\n\n  // Top edge outside viewport, try to move it.\n  if (overflow.adjustY && pos.top < visibleRect.top) {\n    pos.top = visibleRect.top;\n  }\n\n  // Top edge inside and bottom edge outside viewport, try to resize it.\n  if (overflow.resizeHeight && pos.top >= visibleRect.top && pos.top + size.height > visibleRect.bottom) {\n    size.height -= pos.top + size.height - visibleRect.bottom;\n  }\n\n  // Bottom edge outside viewport, try to move it.\n  if (overflow.adjustY && pos.top + size.height > visibleRect.bottom) {\n    // 保证上边界和可视区域上边界对齐\n    pos.top = Math.max(visibleRect.bottom - size.height, visibleRect.top);\n  }\n\n  return _utils2['default'].mix(pos, size);\n}\n\nexports['default'] = adjustForViewport;\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/dom-align/lib/adjustForViewport.js\n ** module id = 203\n ** module chunks = 4\n **/","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('./utils');\n\nvar _utils2 = _interopRequireDefault(_utils);\n\nfunction getRegion(node) {\n  var offset = undefined;\n  var w = undefined;\n  var h = undefined;\n  if (!_utils2['default'].isWindow(node) && node.nodeType !== 9) {\n    offset = _utils2['default'].offset(node);\n    w = _utils2['default'].outerWidth(node);\n    h = _utils2['default'].outerHeight(node);\n  } else {\n    var win = _utils2['default'].getWindow(node);\n    offset = {\n      left: _utils2['default'].getWindowScrollLeft(win),\n      top: _utils2['default'].getWindowScrollTop(win)\n    };\n    w = _utils2['default'].viewportWidth(win);\n    h = _utils2['default'].viewportHeight(win);\n  }\n  offset.width = w;\n  offset.height = h;\n  return offset;\n}\n\nexports['default'] = getRegion;\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/dom-align/lib/getRegion.js\n ** module id = 204\n ** module chunks = 4\n **/","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _getAlignOffset = require('./getAlignOffset');\n\nvar _getAlignOffset2 = _interopRequireDefault(_getAlignOffset);\n\nfunction getElFuturePos(elRegion, refNodeRegion, points, offset, targetOffset) {\n  var xy = undefined;\n  var diff = undefined;\n  var p1 = undefined;\n  var p2 = undefined;\n\n  xy = {\n    left: elRegion.left,\n    top: elRegion.top\n  };\n\n  p1 = (0, _getAlignOffset2['default'])(refNodeRegion, points[1]);\n  p2 = (0, _getAlignOffset2['default'])(elRegion, points[0]);\n\n  diff = [p2.left - p1.left, p2.top - p1.top];\n\n  return {\n    left: xy.left - diff[0] + offset[0] - targetOffset[0],\n    top: xy.top - diff[1] + offset[1] - targetOffset[1]\n  };\n}\n\nexports['default'] = getElFuturePos;\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/dom-align/lib/getElFuturePos.js\n ** module id = 205\n ** module chunks = 4\n **/","/**\n * 获取 node 上的 align 对齐点 相对于页面的坐标\n */\n\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true\n});\nfunction getAlignOffset(region, align) {\n  var V = align.charAt(0);\n  var H = align.charAt(1);\n  var w = region.width;\n  var h = region.height;\n  var x = undefined;\n  var y = undefined;\n\n  x = region.left;\n  y = region.top;\n\n  if (V === 'c') {\n    y += h / 2;\n  } else if (V === 'b') {\n    y += h;\n  }\n\n  if (H === 'c') {\n    x += w / 2;\n  } else if (H === 'r') {\n    x += w;\n  }\n\n  return {\n    left: x,\n    top: y\n  };\n}\n\nexports['default'] = getAlignOffset;\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/dom-align/lib/getAlignOffset.js\n ** module id = 206\n ** module chunks = 4\n **/","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports[\"default\"] = isWindow;\n\nfunction isWindow(obj) {\n  /* eslint no-eq-null: 0 */\n  /* eslint eqeqeq: 0 */\n  return obj != null && obj == obj.window;\n}\n\nmodule.exports = exports[\"default\"];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rc-align/lib/isWindow.js\n ** module id = 207\n ** module chunks = 4\n **/","// export this package's api\n'use strict';\n\nmodule.exports = require('./Animate');\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rc-animate/lib/index.js\n ** module id = 208\n ** module chunks = 4\n **/","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _ChildrenUtils = require('./ChildrenUtils');\n\nvar _AnimateChild = require('./AnimateChild');\n\nvar _AnimateChild2 = _interopRequireDefault(_AnimateChild);\n\nvar _util = require('./util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nvar defaultKey = 'rc_animate_' + Date.now();\n\nfunction getChildrenFromProps(props) {\n  var children = props.children;\n  if (_react2['default'].isValidElement(children)) {\n    if (!children.key) {\n      return _react2['default'].cloneElement(children, {\n        key: defaultKey\n      });\n    }\n  }\n  return children;\n}\n\nfunction noop() {}\n\nvar Animate = _react2['default'].createClass({\n  displayName: 'Animate',\n\n  propTypes: {\n    component: _react2['default'].PropTypes.any,\n    animation: _react2['default'].PropTypes.object,\n    transitionName: _react2['default'].PropTypes.string,\n    transitionEnter: _react2['default'].PropTypes.bool,\n    transitionAppear: _react2['default'].PropTypes.bool,\n    exclusive: _react2['default'].PropTypes.bool,\n    transitionLeave: _react2['default'].PropTypes.bool,\n    onEnd: _react2['default'].PropTypes.func,\n    onEnter: _react2['default'].PropTypes.func,\n    onLeave: _react2['default'].PropTypes.func,\n    onAppear: _react2['default'].PropTypes.func,\n    showProp: _react2['default'].PropTypes.string\n  },\n\n  getDefaultProps: function getDefaultProps() {\n    return {\n      animation: {},\n      component: 'span',\n      transitionEnter: true,\n      transitionLeave: true,\n      transitionAppear: false,\n      onEnd: noop,\n      onEnter: noop,\n      onLeave: noop,\n      onAppear: noop\n    };\n  },\n\n  getInitialState: function getInitialState() {\n    this.currentlyAnimatingKeys = {};\n    this.keysToEnter = [];\n    this.keysToLeave = [];\n    return {\n      children: (0, _ChildrenUtils.toArrayChildren)(getChildrenFromProps(this.props))\n    };\n  },\n\n  componentDidMount: function componentDidMount() {\n    var _this = this;\n\n    var showProp = this.props.showProp;\n    var children = this.state.children;\n    if (showProp) {\n      children = children.filter(function (child) {\n        return !!child.props[showProp];\n      });\n    }\n    children.forEach(function (child) {\n      _this.performAppear(child.key);\n    });\n  },\n\n  componentWillReceiveProps: function componentWillReceiveProps(nextProps) {\n    var _this2 = this;\n\n    var nextChildren = (0, _ChildrenUtils.toArrayChildren)(getChildrenFromProps(nextProps));\n    var props = this.props;\n    var showProp = props.showProp;\n    var currentlyAnimatingKeys = this.currentlyAnimatingKeys;\n    // last props children if exclusive\n    // exclusive needs immediate response\n    var currentChildren = this.state.children;\n    // in case destroy in showProp mode\n    var newChildren = [];\n    if (showProp) {\n      currentChildren.forEach(function (currentChild) {\n        var nextChild = (0, _ChildrenUtils.findChildInChildrenByKey)(nextChildren, currentChild.key);\n        var newChild = undefined;\n        if ((!nextChild || !nextChild.props[showProp]) && currentChild.props[showProp]) {\n          newChild = _react2['default'].cloneElement(nextChild || currentChild, _defineProperty({}, showProp, true));\n        } else {\n          newChild = nextChild;\n        }\n        if (newChild) {\n          newChildren.push(newChild);\n        }\n      });\n      nextChildren.forEach(function (nextChild) {\n        if (!(0, _ChildrenUtils.findChildInChildrenByKey)(currentChildren, nextChild.key)) {\n          newChildren.push(nextChild);\n        }\n      });\n    } else {\n      newChildren = (0, _ChildrenUtils.mergeChildren)(currentChildren, nextChildren);\n    }\n\n    // need render to avoid update\n    this.setState({\n      children: newChildren\n    });\n\n    nextChildren.forEach(function (child) {\n      var key = child.key;\n      if (currentlyAnimatingKeys[key]) {\n        return;\n      }\n      var hasPrev = (0, _ChildrenUtils.findChildInChildrenByKey)(currentChildren, key);\n      if (showProp) {\n        var showInNext = child.props[showProp];\n        if (hasPrev) {\n          var showInNow = (0, _ChildrenUtils.findShownChildInChildrenByKey)(currentChildren, key, showProp);\n          if (!showInNow && showInNext) {\n            _this2.keysToEnter.push(key);\n          }\n        } else if (showInNext) {\n          _this2.keysToEnter.push(key);\n        }\n      } else if (!hasPrev) {\n        _this2.keysToEnter.push(key);\n      }\n    });\n\n    currentChildren.forEach(function (child) {\n      var key = child.key;\n      if (currentlyAnimatingKeys[key]) {\n        return;\n      }\n      var hasNext = (0, _ChildrenUtils.findChildInChildrenByKey)(nextChildren, key);\n      if (showProp) {\n        var showInNow = child.props[showProp];\n        if (hasNext) {\n          var showInNext = (0, _ChildrenUtils.findShownChildInChildrenByKey)(nextChildren, key, showProp);\n          if (!showInNext && showInNow) {\n            _this2.keysToLeave.push(key);\n          }\n        } else if (showInNow) {\n          _this2.keysToLeave.push(key);\n        }\n      } else if (!hasNext) {\n        _this2.keysToLeave.push(key);\n      }\n    });\n  },\n\n  componentDidUpdate: function componentDidUpdate(prevProps) {\n    var _this3 = this;\n\n    // exclusive needs immediate response\n    if (this.props.exclusive && this.props !== prevProps) {\n      Object.keys(this.currentlyAnimatingKeys).forEach(function (key) {\n        _this3.stop(key);\n      });\n    }\n    if (this.isMounted()) {\n      var keysToEnter = this.keysToEnter;\n      this.keysToEnter = [];\n      keysToEnter.forEach(this.performEnter);\n      var keysToLeave = this.keysToLeave;\n      this.keysToLeave = [];\n      keysToLeave.forEach(this.performLeave);\n    }\n  },\n\n  performEnter: function performEnter(key) {\n    // may already remove by exclusive\n    if (this.refs[key]) {\n      this.currentlyAnimatingKeys[key] = true;\n      this.refs[key].componentWillEnter(this.handleDoneAdding.bind(this, key, 'enter'));\n    }\n  },\n\n  performAppear: function performAppear(key) {\n    if (this.refs[key]) {\n      this.currentlyAnimatingKeys[key] = true;\n      this.refs[key].componentWillAppear(this.handleDoneAdding.bind(this, key, 'appear'));\n    }\n  },\n\n  handleDoneAdding: function handleDoneAdding(key, type) {\n    var props = this.props;\n    delete this.currentlyAnimatingKeys[key];\n    var currentChildren = (0, _ChildrenUtils.toArrayChildren)(getChildrenFromProps(props));\n    if (!this.isValidChildByKey(currentChildren, key)) {\n      // exclusive will not need this\n      this.performLeave(key);\n    } else {\n      if (type === 'appear') {\n        if (_util2['default'].allowAppearCallback(props)) {\n          props.onAppear(key);\n          props.onEnd(key, true);\n        }\n      } else {\n        if (_util2['default'].allowEnterCallback(props)) {\n          props.onEnter(key);\n          props.onEnd(key, true);\n        }\n      }\n    }\n  },\n\n  performLeave: function performLeave(key) {\n    // may already remove by exclusive\n    if (this.refs[key]) {\n      this.currentlyAnimatingKeys[key] = true;\n      this.refs[key].componentWillLeave(this.handleDoneLeaving.bind(this, key));\n    }\n  },\n\n  handleDoneLeaving: function handleDoneLeaving(key) {\n    var props = this.props;\n    delete this.currentlyAnimatingKeys[key];\n    var currentChildren = (0, _ChildrenUtils.toArrayChildren)(getChildrenFromProps(props));\n    // in case state change is too fast\n    if (this.isValidChildByKey(currentChildren, key)) {\n      this.performEnter(key);\n    } else {\n      if (_util2['default'].allowLeaveCallback(props)) {\n        props.onLeave(key);\n        props.onEnd(key, false);\n      }\n      if (this.isMounted() && !(0, _ChildrenUtils.isSameChildren)(this.state.children, currentChildren, props.showProp)) {\n        this.setState({\n          children: currentChildren\n        });\n      }\n    }\n  },\n\n  isValidChildByKey: function isValidChildByKey(currentChildren, key) {\n    var showProp = this.props.showProp;\n    if (showProp) {\n      return (0, _ChildrenUtils.findShownChildInChildrenByKey)(currentChildren, key, showProp);\n    }\n    return (0, _ChildrenUtils.findChildInChildrenByKey)(currentChildren, key);\n  },\n\n  stop: function stop(key) {\n    delete this.currentlyAnimatingKeys[key];\n    var component = this.refs[key];\n    if (component) {\n      component.stop();\n    }\n  },\n\n  render: function render() {\n    var props = this.props;\n    var stateChildren = this.state.children;\n    var children = null;\n    if (stateChildren) {\n      children = stateChildren.map(function (child) {\n        if (!child.key) {\n          throw new Error('must set key for <rc-animate> children');\n        }\n        return _react2['default'].createElement(\n          _AnimateChild2['default'],\n          {\n            key: child.key,\n            ref: child.key,\n            animation: props.animation,\n            transitionName: props.transitionName,\n            transitionEnter: props.transitionEnter,\n            transitionAppear: props.transitionAppear,\n            transitionLeave: props.transitionLeave },\n          child\n        );\n      });\n    }\n    var Component = props.component;\n    if (Component) {\n      return _react2['default'].createElement(\n        Component,\n        this.props,\n        children\n      );\n    }\n    return children[0] || null;\n  }\n});\n\nexports['default'] = Animate;\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rc-animate/lib/Animate.js\n ** module id = 209\n ** module chunks = 4\n **/","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true\n});\nexports.toArrayChildren = toArrayChildren;\nexports.findChildInChildrenByKey = findChildInChildrenByKey;\nexports.findShownChildInChildrenByKey = findShownChildInChildrenByKey;\nexports.findHiddenChildInChildrenByKey = findHiddenChildInChildrenByKey;\nexports.isSameChildren = isSameChildren;\nexports.mergeChildren = mergeChildren;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction toArrayChildren(children) {\n  var ret = [];\n  _react2['default'].Children.forEach(children, function (child) {\n    ret.push(child);\n  });\n  return ret;\n}\n\nfunction findChildInChildrenByKey(children, key) {\n  var ret = null;\n  if (children) {\n    children.forEach(function (child) {\n      if (ret) {\n        return;\n      }\n      if (child.key === key) {\n        ret = child;\n      }\n    });\n  }\n  return ret;\n}\n\nfunction findShownChildInChildrenByKey(children, key, showProp) {\n  var ret = null;\n  if (children) {\n    children.forEach(function (child) {\n      if (child.key === key && child.props[showProp]) {\n        if (ret) {\n          throw new Error('two child with same key for <rc-animate> children');\n        }\n        ret = child;\n      }\n    });\n  }\n  return ret;\n}\n\nfunction findHiddenChildInChildrenByKey(children, key, showProp) {\n  var found = 0;\n  if (children) {\n    children.forEach(function (child) {\n      if (found) {\n        return;\n      }\n      found = child.key === key && !child.props[showProp];\n    });\n  }\n  return found;\n}\n\nfunction isSameChildren(c1, c2, showProp) {\n  var same = c1.length === c2.length;\n  if (same) {\n    c1.forEach(function (child, index) {\n      var child2 = c2[index];\n      if (child.key !== child2.key) {\n        same = false;\n      } else if (showProp && child.props[showProp] !== child2.props[showProp]) {\n        same = false;\n      }\n    });\n  }\n  return same;\n}\n\nfunction mergeChildren(prev, next) {\n  var ret = [];\n\n  // For each key of `next`, the list of keys to insert before that key in\n  // the combined list\n  var nextChildrenPending = {};\n  var pendingChildren = [];\n  prev.forEach(function (child) {\n    if (findChildInChildrenByKey(next, child.key)) {\n      if (pendingChildren.length) {\n        nextChildrenPending[child.key] = pendingChildren;\n        pendingChildren = [];\n      }\n    } else {\n      pendingChildren.push(child);\n    }\n  });\n\n  next.forEach(function (child) {\n    if (nextChildrenPending.hasOwnProperty(child.key)) {\n      ret = ret.concat(nextChildrenPending[child.key]);\n    }\n    ret.push(child);\n  });\n\n  ret = ret.concat(pendingChildren);\n\n  return ret;\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rc-animate/lib/ChildrenUtils.js\n ** module id = 210\n ** module chunks = 4\n **/","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = require('react-dom');\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _cssAnimation = require('css-animation');\n\nvar _cssAnimation2 = _interopRequireDefault(_cssAnimation);\n\nvar _util = require('./util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nvar transitionMap = {\n  enter: 'transitionEnter',\n  appear: 'transitionAppear',\n  leave: 'transitionLeave'\n};\n\nvar AnimateChild = _react2['default'].createClass({\n  displayName: 'AnimateChild',\n\n  propTypes: {\n    children: _react2['default'].PropTypes.any\n  },\n\n  componentWillUnmount: function componentWillUnmount() {\n    this.stop();\n  },\n\n  componentWillEnter: function componentWillEnter(done) {\n    if (_util2['default'].isEnterSupported(this.props)) {\n      this.transition('enter', done);\n    } else {\n      done();\n    }\n  },\n\n  componentWillAppear: function componentWillAppear(done) {\n    if (_util2['default'].isAppearSupported(this.props)) {\n      this.transition('appear', done);\n    } else {\n      done();\n    }\n  },\n\n  componentWillLeave: function componentWillLeave(done) {\n    if (_util2['default'].isLeaveSupported(this.props)) {\n      this.transition('leave', done);\n    } else {\n      done();\n    }\n  },\n\n  transition: function transition(animationType, finishCallback) {\n    var _this = this;\n\n    var node = _reactDom2['default'].findDOMNode(this);\n    var props = this.props;\n    var transitionName = props.transitionName;\n    this.stop();\n    var end = function end() {\n      _this.stopper = null;\n      finishCallback();\n    };\n    if ((_cssAnimation.isCssAnimationSupported || !props.animation[animationType]) && transitionName && props[transitionMap[animationType]]) {\n      this.stopper = (0, _cssAnimation2['default'])(node, transitionName + '-' + animationType, end);\n    } else {\n      this.stopper = props.animation[animationType](node, end);\n    }\n  },\n\n  stop: function stop() {\n    var stopper = this.stopper;\n    if (stopper) {\n      this.stopper = null;\n      stopper.stop();\n    }\n  },\n\n  render: function render() {\n    return this.props.children;\n  }\n});\n\nexports['default'] = AnimateChild;\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rc-animate/lib/AnimateChild.js\n ** module id = 211\n ** module chunks = 4\n **/","'use strict';\n\nvar Event = require('./Event');\nvar Css = require('./Css');\nvar isCssAnimationSupported = Event.endEvents.length !== 0;\n\nfunction getDuration(node, name) {\n  var style = window.getComputedStyle(node);\n  var prefixes = ['-webkit-', '-moz-', '-o-', 'ms-', ''];\n  var ret = '';\n  for (var i = 0; i < prefixes.length; i++) {\n    ret = style.getPropertyValue(prefixes[i] + name);\n    if (ret) {\n      break;\n    }\n  }\n  return ret;\n}\n\nfunction fixBrowserByTimeout(node) {\n  if (isCssAnimationSupported) {\n    var transitionDuration = parseFloat(getDuration(node, 'transition-duration')) || 0;\n    var animationDuration = parseFloat(getDuration(node, 'animation-duration')) || 0;\n    var time = Math.max(transitionDuration, animationDuration);\n    // sometimes, browser bug\n    node.rcEndAnimTimeout = setTimeout(function () {\n      node.rcEndAnimTimeout = null;\n      if (node.rcEndListener) {\n        node.rcEndListener();\n      }\n    }, time * 1000 + 200);\n  }\n}\n\nfunction clearBrowserBugTimeout(node) {\n  if (node.rcEndAnimTimeout) {\n    clearTimeout(node.rcEndAnimTimeout);\n    node.rcEndAnimTimeout = null;\n  }\n}\n\nvar cssAnimation = function cssAnimation(node, transitionName, callback) {\n  var className = transitionName;\n  var activeClassName = className + '-active';\n\n  if (node.rcEndListener) {\n    node.rcEndListener();\n  }\n\n  node.rcEndListener = function (e) {\n    if (e && e.target !== node) {\n      return;\n    }\n\n    if (node.rcAnimTimeout) {\n      clearTimeout(node.rcAnimTimeout);\n      node.rcAnimTimeout = null;\n    }\n\n    clearBrowserBugTimeout(node);\n\n    Css.removeClass(node, className);\n    Css.removeClass(node, activeClassName);\n\n    Event.removeEndEventListener(node, node.rcEndListener);\n    node.rcEndListener = null;\n\n    // Usually this optional callback is used for informing an owner of\n    // a leave animation and telling it to remove the child.\n    if (callback) {\n      callback();\n    }\n  };\n\n  Event.addEndEventListener(node, node.rcEndListener);\n\n  Css.addClass(node, className);\n\n  node.rcAnimTimeout = setTimeout(function () {\n    node.rcAnimTimeout = null;\n    Css.addClass(node, activeClassName);\n    fixBrowserByTimeout(node);\n  }, 0);\n\n  return {\n    stop: function stop() {\n      if (node.rcEndListener) {\n        node.rcEndListener();\n      }\n    }\n  };\n};\n\ncssAnimation.style = function (node, style, callback) {\n  if (node.rcEndListener) {\n    node.rcEndListener();\n  }\n\n  node.rcEndListener = function (e) {\n    if (e && e.target !== node) {\n      return;\n    }\n\n    if (node.rcAnimTimeout) {\n      clearTimeout(node.rcAnimTimeout);\n      node.rcAnimTimeout = null;\n    }\n\n    clearBrowserBugTimeout(node);\n\n    Event.removeEndEventListener(node, node.rcEndListener);\n    node.rcEndListener = null;\n\n    // Usually this optional callback is used for informing an owner of\n    // a leave animation and telling it to remove the child.\n    if (callback) {\n      callback();\n    }\n  };\n\n  Event.addEndEventListener(node, node.rcEndListener);\n\n  node.rcAnimTimeout = setTimeout(function () {\n    for (var s in style) {\n      if (style.hasOwnProperty(s)) {\n        node.style[s] = style[s];\n      }\n    }\n    node.rcAnimTimeout = null;\n    fixBrowserByTimeout(node);\n  }, 0);\n};\n\ncssAnimation.setTransition = function (node, p, value) {\n  var property = p;\n  var v = value;\n  if (value === undefined) {\n    v = property;\n    property = '';\n  }\n  property = property || '';\n  ['Webkit', 'Moz', 'O',\n  // ms is special .... !\n  'ms'].forEach(function (prefix) {\n    node.style[prefix + 'Transition' + property] = v;\n  });\n};\n\ncssAnimation.addClass = Css.addClass;\ncssAnimation.removeClass = Css.removeClass;\ncssAnimation.isCssAnimationSupported = isCssAnimationSupported;\n\nmodule.exports = cssAnimation;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/css-animation/lib/index.js\n ** module id = 212\n ** module chunks = 4\n **/","'use strict';\n\nvar EVENT_NAME_MAP = {\n  transitionend: {\n    transition: 'transitionend',\n    WebkitTransition: 'webkitTransitionEnd',\n    MozTransition: 'mozTransitionEnd',\n    OTransition: 'oTransitionEnd',\n    msTransition: 'MSTransitionEnd'\n  },\n\n  animationend: {\n    animation: 'animationend',\n    WebkitAnimation: 'webkitAnimationEnd',\n    MozAnimation: 'mozAnimationEnd',\n    OAnimation: 'oAnimationEnd',\n    msAnimation: 'MSAnimationEnd'\n  }\n};\n\nvar endEvents = [];\n\nfunction detectEvents() {\n  var testEl = document.createElement('div');\n  var style = testEl.style;\n\n  if (!('AnimationEvent' in window)) {\n    delete EVENT_NAME_MAP.animationend.animation;\n  }\n\n  if (!('TransitionEvent' in window)) {\n    delete EVENT_NAME_MAP.transitionend.transition;\n  }\n\n  for (var baseEventName in EVENT_NAME_MAP) {\n    if (EVENT_NAME_MAP.hasOwnProperty(baseEventName)) {\n      var baseEvents = EVENT_NAME_MAP[baseEventName];\n      for (var styleName in baseEvents) {\n        if (styleName in style) {\n          endEvents.push(baseEvents[styleName]);\n          break;\n        }\n      }\n    }\n  }\n}\n\nif (typeof window !== 'undefined') {\n  detectEvents();\n}\n\nfunction addEventListener(node, eventName, eventListener) {\n  node.addEventListener(eventName, eventListener, false);\n}\n\nfunction removeEventListener(node, eventName, eventListener) {\n  node.removeEventListener(eventName, eventListener, false);\n}\n\nvar TransitionEvents = {\n  addEndEventListener: function addEndEventListener(node, eventListener) {\n    if (endEvents.length === 0) {\n      window.setTimeout(eventListener, 0);\n      return;\n    }\n    endEvents.forEach(function (endEvent) {\n      addEventListener(node, endEvent, eventListener);\n    });\n  },\n\n  endEvents: endEvents,\n\n  removeEndEventListener: function removeEndEventListener(node, eventListener) {\n    if (endEvents.length === 0) {\n      return;\n    }\n    endEvents.forEach(function (endEvent) {\n      removeEventListener(node, endEvent, eventListener);\n    });\n  }\n};\n\nmodule.exports = TransitionEvents;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/css-animation/lib/Event.js\n ** module id = 213\n ** module chunks = 4\n **/","'use strict';\n\nvar SPACE = ' ';\nvar RE_CLASS = /[\\n\\t\\r]/g;\n\nfunction norm(elemClass) {\n  return (SPACE + elemClass + SPACE).replace(RE_CLASS, SPACE);\n}\n\nmodule.exports = {\n  addClass: function addClass(elem, className) {\n    elem.className += ' ' + className;\n  },\n\n  removeClass: function removeClass(elem, n) {\n    var elemClass = elem.className.trim();\n    var className = norm(elemClass);\n    var needle = n.trim();\n    needle = SPACE + needle + SPACE;\n    // 一个 cls 有可能多次出现:'link link2 link link3 link'\n    while (className.indexOf(needle) >= 0) {\n      className = className.replace(needle, SPACE);\n    }\n    elem.className = className.trim();\n  }\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/css-animation/lib/Css.js\n ** module id = 214\n ** module chunks = 4\n **/","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nvar util = {\n  isAppearSupported: function isAppearSupported(props) {\n    return props.transitionName && props.transitionAppear || props.animation.appear;\n  },\n  isEnterSupported: function isEnterSupported(props) {\n    return props.transitionName && props.transitionEnter || props.animation.enter;\n  },\n  isLeaveSupported: function isLeaveSupported(props) {\n    return props.transitionName && props.transitionLeave || props.animation.leave;\n  },\n\n  allowAppearCallback: function allowAppearCallback(props) {\n    return props.transitionAppear || props.animation.appear;\n  },\n  allowEnterCallback: function allowEnterCallback(props) {\n    return props.transitionEnter || props.animation.enter;\n  },\n  allowLeaveCallback: function allowLeaveCallback(props) {\n    return props.transitionLeave || props.animation.leave;\n  }\n};\nexports[\"default\"] = util;\nmodule.exports = exports[\"default\"];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rc-animate/lib/util.js\n ** module id = 215\n ** module chunks = 4\n **/","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar PopupInner = _react2['default'].createClass({\n  displayName: 'PopupInner',\n\n  propTypes: {\n    hiddenClassName: _react.PropTypes.string,\n    className: _react.PropTypes.string,\n    onMouseEnter: _react.PropTypes.func,\n    onMouseLeave: _react.PropTypes.func,\n    children: _react.PropTypes.any\n  },\n  render: function render() {\n    var props = this.props;\n    var className = props.className;\n    if (!props.visible) {\n      className += ' ' + props.hiddenClassName;\n    }\n    return _react2['default'].createElement(\n      'div',\n      { className: className,\n        onMouseEnter: props.onMouseEnter,\n        onMouseLeave: props.onMouseLeave,\n        style: props.style },\n      props.children\n    );\n  }\n});\n\nexports['default'] = PopupInner;\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rc-trigger/lib/PopupInner.js\n ** module id = 216\n ** module chunks = 4\n **/","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true\n});\nexports.getAlignFromPlacement = getAlignFromPlacement;\nexports.getPopupClassNameFromAlign = getPopupClassNameFromAlign;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _objectAssign = require('object-assign');\n\nvar _objectAssign2 = _interopRequireDefault(_objectAssign);\n\nfunction isPointsEq(a1, a2) {\n  return a1[0] === a2[0] && a1[1] === a2[1];\n}\n\nfunction getAlignFromPlacement(builtinPlacements, placementStr, align) {\n  var baseAlign = builtinPlacements[placementStr] || {};\n  return (0, _objectAssign2['default'])({}, baseAlign, align);\n}\n\nfunction getPopupClassNameFromAlign(builtinPlacements, prefixCls, align) {\n  var points = align.points;\n  for (var placement in builtinPlacements) {\n    if (builtinPlacements.hasOwnProperty(placement)) {\n      if (isPointsEq(builtinPlacements[placement].points, points)) {\n        return prefixCls + '-placement-' + placement;\n      }\n    }\n  }\n  return '';\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rc-trigger/lib/utils.js\n ** module id = 217\n ** module chunks = 4\n **/","import React, {PropTypes} from 'react';\nimport CommonMixin from '../mixin/CommonMixin';\nimport Header from './Header';\nimport Combobox from './Combobox';\n\nfunction noop() {\n}\n\nfunction generateOptions(length, disabledOptions, hideDisabledOptions) {\n  const arr = [];\n  for (let value = 0; value < length; value++) {\n    if (!disabledOptions || disabledOptions.indexOf(value) < 0 || !hideDisabledOptions) {\n      arr.push(value);\n    }\n  }\n  return arr;\n}\n\nconst Panel = React.createClass({\n  propTypes: {\n    prefixCls: PropTypes.string,\n    value: PropTypes.object,\n    locale: PropTypes.object,\n    placeholder: PropTypes.string,\n    gregorianCalendarLocale: PropTypes.object,\n    formatter: PropTypes.object,\n    disabledHours: PropTypes.func,\n    disabledMinutes: PropTypes.func,\n    disabledSeconds: PropTypes.func,\n    hideDisabledOptions: PropTypes.bool,\n    onChange: PropTypes.func,\n    onEsc: PropTypes.func,\n    allowEmpty: PropTypes.bool,\n    showHour: PropTypes.bool,\n    showSecond: PropTypes.bool,\n    onClear: PropTypes.func,\n  },\n\n  mixins: [CommonMixin],\n\n  getDefaultProps() {\n    return {\n      prefixCls: 'rc-time-picker-panel',\n      onChange: noop,\n      onClear: noop,\n    };\n  },\n\n  getInitialState() {\n    return {\n      value: this.props.value,\n      selectionRange: [],\n    };\n  },\n\n  componentWillReceiveProps(nextProps) {\n    const value = nextProps.value;\n    if (value) {\n      this.setState({\n        value,\n      });\n    }\n  },\n\n  onChange(newValue) {\n    this.setState({ value: newValue });\n    this.props.onChange(newValue);\n  },\n\n  onClear() {\n    this.props.onClear();\n  },\n\n  onCurrentSelectPanelChange(currentSelectPanel) {\n    this.setState({ currentSelectPanel });\n  },\n\n  render() {\n    const { locale, prefixCls, placeholder, disabledHours, disabledMinutes, disabledSeconds, hideDisabledOptions, allowEmpty, showHour, showSecond, formatter, gregorianCalendarLocale } = this.props;\n    const value = this.state.value;\n    const disabledHourOptions = disabledHours();\n    const disabledMinuteOptions = disabledMinutes(value ? value.getHourOfDay() : null);\n    const disabledSecondOptions = disabledSeconds(value ? value.getHourOfDay() : null, value ? value.getMinutes() : null);\n    const hourOptions = generateOptions(24, disabledHourOptions, hideDisabledOptions);\n    const minuteOptions = generateOptions(60, disabledMinuteOptions, hideDisabledOptions);\n    const secondOptions = generateOptions(60, disabledSecondOptions, hideDisabledOptions);\n\n    return (\n      <div className={`${prefixCls}-inner`}>\n        <Header\n          prefixCls={prefixCls}\n          gregorianCalendarLocale={gregorianCalendarLocale}\n          locale={locale}\n          value={value}\n          currentSelectPanel={this.state.currentSelectPanel}\n          onEsc={this.props.onEsc}\n          formatter={formatter}\n          placeholder={placeholder}\n          hourOptions={hourOptions}\n          minuteOptions={minuteOptions}\n          secondOptions={secondOptions}\n          disabledHours={disabledHours}\n          disabledMinutes={disabledMinutes}\n          disabledSeconds={disabledSeconds}\n          onChange={this.onChange}\n          onClear={this.onClear}\n          allowEmpty={allowEmpty}\n        />\n        <Combobox\n          prefixCls={prefixCls}\n          value={value}\n          gregorianCalendarLocale={gregorianCalendarLocale}\n          formatter={formatter}\n          onChange={this.onChange}\n          showHour={showHour}\n          showSecond={showSecond}\n          hourOptions={hourOptions}\n          minuteOptions={minuteOptions}\n          secondOptions={secondOptions}\n          disabledHours={disabledHours}\n          disabledMinutes={disabledMinutes}\n          disabledSeconds={disabledSeconds}\n          onCurrentSelectPanelChange={this.onCurrentSelectPanelChange}\n        />\n      </div>\n    );\n  },\n});\n\nexport default Panel;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/module/Panel.jsx\n **/","import {PropTypes} from 'react';\nimport enUs from '../locale/en_US';\n\nexport default {\n  propTypes: {\n    prefixCls: PropTypes.string,\n    locale: PropTypes.object,\n  },\n\n  getDefaultProps() {\n    return {\n      locale: enUs,\n    };\n  },\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/mixin/CommonMixin.js\n **/","import enUs from 'gregorian-calendar-format/lib/locale/en_US';\nimport enUsCalendar from 'gregorian-calendar/lib/locale/en_US';\n\nexport default {\n  clear: 'Clear',\n  format: enUs,\n  calendar: enUsCalendar,\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/locale/en_US.js\n **/","import React, { PropTypes } from 'react';\nimport createSelection from '../util/selection';\n\nconst Header = React.createClass({\n  propTypes: {\n    formatter: PropTypes.object,\n    prefixCls: PropTypes.string,\n    gregorianCalendarLocale: PropTypes.object,\n    locale: PropTypes.object,\n    disabledDate: PropTypes.func,\n    placeholder: PropTypes.string,\n    value: PropTypes.object,\n    hourOptions: PropTypes.array,\n    minuteOptions: PropTypes.array,\n    secondOptions: PropTypes.array,\n    disabledHours: PropTypes.func,\n    disabledMinutes: PropTypes.func,\n    disabledSeconds: PropTypes.func,\n    onChange: PropTypes.func,\n    onClear: PropTypes.func,\n    onEsc: PropTypes.func,\n    allowEmpty: PropTypes.bool,\n    currentSelectPanel: PropTypes.string,\n  },\n\n  getInitialState() {\n    const value = this.props.value;\n    return {\n      str: value && this.props.formatter.format(value) || '',\n      invalid: false,\n    };\n  },\n\n  componentDidMount() {\n    this.timer = setTimeout(this.selectRange, 0);\n  },\n\n  componentWillReceiveProps(nextProps) {\n    const value = nextProps.value;\n    this.setState({\n      str: value && nextProps.formatter.format(value) || '',\n      invalid: false,\n    });\n  },\n\n  componentDidUpdate() {\n    this.timer = setTimeout(this.selectRange, 0);\n  },\n\n  componentWillUnmount() {\n    clearTimeout(this.timer);\n  },\n\n  onInputChange(event) {\n    const str = event.target.value;\n    this.setState({\n      str,\n    });\n    let value = null;\n    const { formatter, gregorianCalendarLocale, hourOptions, minuteOptions, secondOptions, disabledHours, disabledMinutes, disabledSeconds, onChange, allowEmpty } = this.props;\n\n    if (str) {\n      const originalValue = this.props.value;\n      try {\n        value = formatter.parse(str, {\n          locale: gregorianCalendarLocale,\n          obeyCount: true,\n        });\n      } catch (ex) {\n        this.setState({\n          invalid: true,\n        });\n        return;\n      }\n\n      if (value) {\n        // if time value not allowed, response warning.\n        if (\n          hourOptions.indexOf(value.getHourOfDay()) < 0 ||\n          minuteOptions.indexOf(value.getMinutes()) < 0 ||\n          secondOptions.indexOf(value.getSeconds()) < 0\n        ) {\n          this.setState({\n            invalid: true,\n          });\n          return;\n        }\n\n        // if time value is disabled, response warning.\n        const disabledHourOptions = disabledHours();\n        const disabledMinuteOptions = disabledMinutes(value.getHourOfDay());\n        const disabledSecondOptions = disabledSeconds(value.getHourOfDay(), value.getMinutes());\n        if (\n          (disabledHourOptions && disabledHourOptions.indexOf(value.getHourOfDay()) >= 0) ||\n          (disabledMinuteOptions && disabledMinuteOptions.indexOf(value.getMinutes()) >= 0) ||\n          (disabledSecondOptions && disabledSecondOptions.indexOf(value.getSeconds()) >= 0)\n        ) {\n          this.setState({\n            invalid: true,\n          });\n          return;\n        }\n\n        if (originalValue && value) {\n          if (\n            originalValue.getHourOfDay() !== value.getHourOfDay() ||\n            originalValue.getMinutes() !== value.getMinutes() ||\n            originalValue.getSeconds() !== value.getSeconds()\n          ) {\n            // keep other fields for rc-calendar\n            const changedValue = originalValue.clone();\n            changedValue.setHourOfDay(value.getHourOfDay());\n            changedValue.setMinutes(value.getMinutes());\n            changedValue.setSeconds(value.getSeconds());\n            onChange(changedValue);\n          }\n        } else if (originalValue !== value) {\n          onChange(value);\n        }\n      } else {\n        this.setState({\n          invalid: true,\n        });\n        return;\n      }\n    } else if (allowEmpty) {\n      onChange(null);\n    } else {\n      this.setState({\n        invalid: true,\n      });\n      return;\n    }\n\n    this.setState({\n      invalid: false,\n    });\n  },\n\n  onKeyDown(e) {\n    if (e.keyCode === 27) {\n      this.props.onEsc();\n    }\n  },\n\n  onClear() {\n    this.setState({ str: '' });\n    this.props.onClear();\n  },\n\n  getClearButton() {\n    const { locale, prefixCls, allowEmpty } = this.props;\n    if (!allowEmpty) {\n      return null;\n    }\n    return <a className={`${prefixCls}-clear-btn`} role=\"button\" title={locale.clear} onMouseDown={this.onClear}/>;\n  },\n\n  getInput() {\n    const { prefixCls, placeholder } = this.props;\n    const { invalid, str } = this.state;\n    const invalidClass = invalid ? `${prefixCls}-input-invalid` : '';\n    return (<input\n      className={`${prefixCls}-input  ${invalidClass}`}\n      ref=\"input\"\n      onKeyDown={this.onKeyDown}\n      value={str}\n      placeholder={placeholder} onChange={this.onInputChange}\n    />);\n  },\n\n  selectRange() {\n    this.refs.input.select();\n    if (this.props.currentSelectPanel && this.refs.input.value) {\n      let selectionRangeStart = 0;\n      let selectionRangeEnd = 0;\n      if (this.props.currentSelectPanel === 'hour') {\n        selectionRangeStart = 0;\n        selectionRangeEnd = this.refs.input.value.indexOf(':');\n      } else if (this.props.currentSelectPanel === 'minute') {\n        selectionRangeStart = this.refs.input.value.indexOf(':') + 1;\n        selectionRangeEnd = this.refs.input.value.lastIndexOf(':');\n      } else if (this.props.currentSelectPanel === 'second') {\n        selectionRangeStart = this.refs.input.value.lastIndexOf(':') + 1;\n        selectionRangeEnd = this.refs.input.value.length;\n      }\n      if (selectionRangeEnd - selectionRangeStart === 2) {\n        createSelection(this.refs.input, selectionRangeStart, selectionRangeEnd);\n      }\n    }\n  },\n\n  render() {\n    const { prefixCls } = this.props;\n    return (\n      <div className={`${prefixCls}-input-wrap`}>\n        {this.getInput()}\n        {this.getClearButton()}\n      </div>\n    );\n  },\n});\n\nexport default Header;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/module/Header.jsx\n **/","export default function createSelection(field, start, end) {\n  if (field.createTextRange) {\n    const selRange = field.createTextRange();\n    selRange.collapse(true);\n    selRange.moveStart('character', start);\n    selRange.moveEnd('character', end);\n    selRange.select();\n    field.focus();\n  } else if (field.setSelectionRange) {\n    field.focus();\n    field.setSelectionRange(start, end);\n  } else if (typeof field.selectionStart !== 'undefined') {\n    field.selectionStart = start;\n    field.selectionEnd = end;\n    field.focus();\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/util/selection.js\n **/","import React, {PropTypes} from 'react';\nimport Select from './Select';\nimport GregorianCalendar from 'gregorian-calendar';\n\nconst formatOption = (option, disabledOptions) => {\n  let value = `${option}`;\n  if (option < 10) {\n    value = `0${option}`;\n  }\n\n  let disabled = false;\n  if (disabledOptions && disabledOptions.indexOf(option) >= 0) {\n    disabled = true;\n  }\n\n  return {\n    value,\n    disabled,\n  };\n};\n\nconst Combobox = React.createClass({\n  propTypes: {\n    formatter: PropTypes.object,\n    prefixCls: PropTypes.string,\n    value: PropTypes.object,\n    onChange: PropTypes.func,\n    showHour: PropTypes.bool,\n    gregorianCalendarLocale: PropTypes.object,\n    showSecond: PropTypes.bool,\n    hourOptions: PropTypes.array,\n    minuteOptions: PropTypes.array,\n    secondOptions: PropTypes.array,\n    disabledHours: PropTypes.func,\n    disabledMinutes: PropTypes.func,\n    disabledSeconds: PropTypes.func,\n    onCurrentSelectPanelChange: PropTypes.func,\n  },\n\n  onItemChange(type, itemValue) {\n    const { onChange } = this.props;\n    let value = this.props.value;\n    if (value) {\n      value = value.clone();\n    } else {\n      value = this.getNow().clone();\n    }\n    if (type === 'hour') {\n      value.setHourOfDay(itemValue);\n    } else if (type === 'minute') {\n      value.setMinutes(itemValue);\n    } else {\n      value.setSeconds(itemValue);\n    }\n    onChange(value);\n  },\n\n  onEnterSelectPanel(range) {\n    this.props.onCurrentSelectPanelChange(range);\n  },\n\n  getHourSelect(hour) {\n    const { prefixCls, hourOptions, disabledHours, showHour } = this.props;\n    if (!showHour) {\n      return null;\n    }\n    const disabledOptions = disabledHours();\n\n    return (\n      <Select\n        prefixCls={prefixCls}\n        options={hourOptions.map(option => formatOption(option, disabledOptions))}\n        selectedIndex={hourOptions.indexOf(hour)}\n        type=\"hour\"\n        onSelect={this.onItemChange}\n        onMouseEnter={this.onEnterSelectPanel.bind(this, 'hour')}\n      />\n    );\n  },\n\n  getMinuteSelect(minute) {\n    const { prefixCls, minuteOptions, disabledMinutes } = this.props;\n    const value = this.props.value || this.getNow();\n    const disabledOptions = disabledMinutes(value.getHourOfDay());\n\n    return (\n      <Select\n        prefixCls={prefixCls}\n        options={minuteOptions.map(option => formatOption(option, disabledOptions))}\n        selectedIndex={minuteOptions.indexOf(minute)}\n        type=\"minute\"\n        onSelect={this.onItemChange}\n        onMouseEnter={this.onEnterSelectPanel.bind(this, 'minute')}\n      />\n    );\n  },\n\n  getSecondSelect(second) {\n    const { prefixCls, secondOptions, disabledSeconds, showSecond } = this.props;\n    if (!showSecond) {\n      return null;\n    }\n    const value = this.props.value || this.getNow();\n    const disabledOptions = disabledSeconds(value.getHourOfDay(), value.getMinutes());\n\n    return (\n      <Select\n        prefixCls={prefixCls}\n        options={secondOptions.map(option => formatOption(option, disabledOptions))}\n        selectedIndex={secondOptions.indexOf(second)}\n        type=\"second\"\n        onSelect={this.onItemChange}\n        onMouseEnter={this.onEnterSelectPanel.bind(this, 'second')}\n      />\n    );\n  },\n\n  getNow() {\n    if (this.showNow) {\n      return this.showNow;\n    }\n    const value = new GregorianCalendar(this.props.gregorianCalendarLocale);\n    value.setTime(Date.now());\n    this.showNow = value;\n    return value;\n  },\n\n  render() {\n    const { prefixCls } = this.props;\n    const value = this.props.value || this.getNow();\n    return (\n      <div className={`${prefixCls}-combobox`}>\n        {this.getHourSelect(value.getHourOfDay())}\n        {this.getMinuteSelect(value.getMinutes())}\n        {this.getSecondSelect(value.getSeconds())}\n      </div>\n    );\n  },\n});\n\nexport default Combobox;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/module/Combobox.jsx\n **/","import React, {PropTypes} from 'react';\nimport ReactDom from 'react-dom';\nimport classnames from 'classnames';\n\nconst scrollTo = (element, to, duration) => {\n  const requestAnimationFrame = window.requestAnimationFrame ||\n    function requestAnimationFrameTimeout() {\n      return setTimeout(arguments[0], 10);\n    };\n  // jump to target if duration zero\n  if (duration <= 0) {\n    element.scrollTop = to;\n    return;\n  }\n  const difference = to - element.scrollTop;\n  const perTick = difference / duration * 10;\n\n  requestAnimationFrame(() => {\n    element.scrollTop = element.scrollTop + perTick;\n    if (element.scrollTop === to) return;\n    scrollTo(element, to, duration - 10);\n  });\n};\n\nconst Select = React.createClass({\n  propTypes: {\n    prefixCls: PropTypes.string,\n    options: PropTypes.array,\n    gregorianCalendarLocale: PropTypes.object,\n    selectedIndex: PropTypes.number,\n    type: PropTypes.string,\n    onSelect: PropTypes.func,\n    onMouseEnter: PropTypes.func,\n  },\n\n  componentDidMount() {\n    // jump to selected option\n    this.scrollToSelected(0);\n  },\n\n  componentDidUpdate(prevProps) {\n    // smooth scroll to selected option\n    if (prevProps.selectedIndex !== this.props.selectedIndex) {\n      this.scrollToSelected(120);\n    }\n  },\n\n  onSelect(value) {\n    const { onSelect, type } = this.props;\n    onSelect(type, value);\n  },\n\n  getOptions() {\n    const { options, selectedIndex, prefixCls } = this.props;\n    return options.map((item, index) => {\n      const cls = classnames({\n        [`${prefixCls}-select-option-selected`]: selectedIndex === index,\n        [`${prefixCls}-select-option-disabled`]: item.disabled,\n      });\n      let onclick = null;\n      if (!item.disabled) {\n        onclick = this.onSelect.bind(this, +item.value);\n      }\n      return <li className={cls} key={index} onClick={onclick} disabled={item.disabled}>{item.value}</li>;\n    });\n  },\n\n  scrollToSelected(duration) {\n    // move to selected item\n    const select = ReactDom.findDOMNode(this);\n    const list = ReactDom.findDOMNode(this.refs.list);\n    let index = this.props.selectedIndex;\n    if (index < 0) {\n      index = 0;\n    }\n    const topOption = list.children[index];\n    const to = topOption.offsetTop;\n    scrollTo(select, to, duration);\n  },\n\n  render() {\n    if (this.props.options.length === 0) {\n      return null;\n    }\n\n    const { prefixCls } = this.props;\n\n    return (\n      <div className={`${prefixCls}-select`}\n           onMouseEnter={this.props.onMouseEnter}>\n        <ul ref=\"list\">{this.getOptions()}</ul>\n      </div>\n    );\n  },\n});\n\nexport default Select;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/module/Select.jsx\n **/","const autoAdjustOverflow = {\n  adjustX: 1,\n  adjustY: 1,\n};\n\nconst targetOffset = [0, 0];\n\nconst placements = {\n  bottomLeft: {\n    points: ['tl', 'tl'],\n    overflow: autoAdjustOverflow,\n    offset: [0, -3],\n    targetOffset,\n  },\n  bottomRight: {\n    points: ['tr', 'tr'],\n    overflow: autoAdjustOverflow,\n    offset: [0, -3],\n    targetOffset,\n  },\n  topRight: {\n    points: ['br', 'br'],\n    overflow: autoAdjustOverflow,\n    offset: [0, 3],\n    targetOffset,\n  },\n  topLeft: {\n    points: ['bl', 'bl'],\n    overflow: autoAdjustOverflow,\n    offset: [0, 3],\n    targetOffset,\n  },\n};\n\nexport default placements;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/util/placements.js\n **/","import DateTimeFormat from 'gregorian-calendar-format';\n\nexport function getFormatter(format, locale) {\n  if (typeof format === 'string') {\n    return new DateTimeFormat(format, locale.format);\n  }\n  return format;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/util/index.js\n **/","import zhCn from 'gregorian-calendar-format/lib/locale/zh_CN';\nimport zhCnCalendar from 'gregorian-calendar/lib/locale/zh_CN';\n\nexport default {\n  clear: '清除',\n  format: zhCn,\n  calendar: zhCnCalendar,\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/locale/zh_CN.js\n **/","'use strict';\n\nmodule.exports = {\n  eras: ['公元前', '公元'],\n  months: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'],\n  shortMonths: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'],\n  weekdays: ['星期天', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'],\n  shortWeekdays: ['周日', '周一', '周二', '周三', '周四', '周五', '周六'],\n  veryShortWeekdays: ['日', '一', '二', '三', '四', '五', '六'],\n  ampms: ['上午', '下午'],\n  datePatterns: ['yyyy\\'年\\'M\\'月\\'d\\'日\\' EEEE', 'yyyy\\'年\\'M\\'月\\'d\\'日\\'', 'yyyy-M-d', 'yy-M-d'],\n  timePatterns: ['ahh\\'时\\'mm\\'分\\'ss\\'秒\\' \\'GMT\\'Z', 'ahh\\'时\\'mm\\'分\\'ss\\'秒\\'', 'H:mm:ss', 'ah:mm'],\n  dateTimePattern: '{date} {time}'\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/gregorian-calendar-format/lib/locale/zh_CN.js\n ** module id = 228\n ** module chunks = 4\n **/","/*\n * zh-cn locale\n * @ignore\n * @author yiminghe@gmail.com\n */\n\"use strict\";\n\nmodule.exports = {\n  // in minutes\n  timezoneOffset: 8 * 60,\n  firstDayOfWeek: 1,\n  minimalDaysInFirstWeek: 1\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/gregorian-calendar/lib/locale/zh_CN.js\n ** module id = 229\n ** module chunks = 4\n **/"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"sources":["webpack:///webpack/bootstrap e103f9e39ef481194932","webpack:///./assets/index.less?da74","webpack:///./~/react/react.js","webpack:///./~/react/lib/React.js","webpack:///./~/process/browser.js","webpack:///./~/object-assign/index.js","webpack:///./~/react/lib/ReactChildren.js","webpack:///./~/react/lib/PooledClass.js","webpack:///./~/react/lib/reactProdInvariant.js","webpack:///./~/fbjs/lib/invariant.js","webpack:///./~/react/lib/ReactElement.js","webpack:///./~/react/lib/ReactCurrentOwner.js","webpack:///./~/fbjs/lib/warning.js","webpack:///./~/fbjs/lib/emptyFunction.js","webpack:///./~/react/lib/canDefineProperty.js","webpack:///./~/react/lib/traverseAllChildren.js","webpack:///./~/react/lib/getIteratorFn.js","webpack:///./~/react/lib/KeyEscapeUtils.js","webpack:///./~/react/lib/ReactComponent.js","webpack:///./~/react/lib/ReactNoopUpdateQueue.js","webpack:///./~/fbjs/lib/emptyObject.js","webpack:///./~/react/lib/ReactPureComponent.js","webpack:///./~/react/lib/ReactClass.js","webpack:///./~/react/lib/ReactPropTypeLocations.js","webpack:///./~/fbjs/lib/keyMirror.js","webpack:///./~/react/lib/ReactPropTypeLocationNames.js","webpack:///./~/fbjs/lib/keyOf.js","webpack:///./~/react/lib/ReactDOMFactories.js","webpack:///./~/fbjs/lib/mapObject.js","webpack:///./~/react/lib/ReactElementValidator.js","webpack:///./~/react/lib/ReactComponentTreeDevtool.js","webpack:///./~/react/lib/checkReactTypeSpec.js","webpack:///./~/react/lib/ReactPropTypesSecret.js","webpack:///./~/react/lib/ReactPropTypes.js","webpack:///./~/react/lib/ReactVersion.js","webpack:///./~/react/lib/onlyChild.js","webpack:///./~/react-dom/index.js","webpack:///./~/react/lib/ReactDOM.js","webpack:///./~/react/lib/ReactDOMComponentTree.js","webpack:///./~/react/lib/DOMProperty.js","webpack:///./~/react/lib/ReactDOMComponentFlags.js","webpack:///./~/react/lib/ReactDefaultInjection.js","webpack:///./~/react/lib/BeforeInputEventPlugin.js","webpack:///./~/react/lib/EventConstants.js","webpack:///./~/react/lib/EventPropagators.js","webpack:///./~/react/lib/EventPluginHub.js","webpack:///./~/react/lib/EventPluginRegistry.js","webpack:///./~/react/lib/EventPluginUtils.js","webpack:///./~/react/lib/ReactErrorUtils.js","webpack:///./~/react/lib/accumulateInto.js","webpack:///./~/react/lib/forEachAccumulated.js","webpack:///./~/fbjs/lib/ExecutionEnvironment.js","webpack:///./~/react/lib/FallbackCompositionState.js","webpack:///./~/react/lib/getTextContentAccessor.js","webpack:///./~/react/lib/SyntheticCompositionEvent.js","webpack:///./~/react/lib/SyntheticEvent.js","webpack:///./~/react/lib/SyntheticInputEvent.js","webpack:///./~/react/lib/ChangeEventPlugin.js","webpack:///./~/react/lib/ReactUpdates.js","webpack:///./~/react/lib/CallbackQueue.js","webpack:///./~/react/lib/ReactFeatureFlags.js","webpack:///./~/react/lib/ReactReconciler.js","webpack:///./~/react/lib/ReactRef.js","webpack:///./~/react/lib/ReactOwner.js","webpack:///./~/react/lib/ReactInstrumentation.js","webpack:///./~/react/lib/ReactDebugTool.js","webpack:///./~/react/lib/ReactInvalidSetStateWarningDevTool.js","webpack:///./~/react/lib/ReactHostOperationHistoryDevtool.js","webpack:///./~/react/lib/ReactChildrenMutationWarningDevtool.js","webpack:///./~/fbjs/lib/performanceNow.js","webpack:///./~/fbjs/lib/performance.js","webpack:///./~/react/lib/Transaction.js","webpack:///./~/react/lib/getEventTarget.js","webpack:///./~/react/lib/isEventSupported.js","webpack:///./~/react/lib/isTextInputElement.js","webpack:///./~/react/lib/DefaultEventPluginOrder.js","webpack:///./~/react/lib/EnterLeaveEventPlugin.js","webpack:///./~/react/lib/SyntheticMouseEvent.js","webpack:///./~/react/lib/SyntheticUIEvent.js","webpack:///./~/react/lib/ViewportMetrics.js","webpack:///./~/react/lib/getEventModifierState.js","webpack:///./~/react/lib/HTMLDOMPropertyConfig.js","webpack:///./~/react/lib/ReactComponentBrowserEnvironment.js","webpack:///./~/react/lib/DOMChildrenOperations.js","webpack:///./~/react/lib/DOMLazyTree.js","webpack:///./~/react/lib/DOMNamespaces.js","webpack:///./~/react/lib/setInnerHTML.js","webpack:///./~/react/lib/createMicrosoftUnsafeLocalFunction.js","webpack:///./~/react/lib/setTextContent.js","webpack:///./~/react/lib/escapeTextContentForBrowser.js","webpack:///./~/react/lib/Danger.js","webpack:///./~/fbjs/lib/createNodesFromMarkup.js","webpack:///./~/fbjs/lib/createArrayFromMixed.js","webpack:///./~/fbjs/lib/getMarkupWrap.js","webpack:///./~/react/lib/ReactMultiChildUpdateTypes.js","webpack:///./~/react/lib/ReactDOMIDOperations.js","webpack:///./~/react/lib/ReactDOMComponent.js","webpack:///./~/react/lib/AutoFocusUtils.js","webpack:///./~/fbjs/lib/focusNode.js","webpack:///./~/react/lib/CSSPropertyOperations.js","webpack:///./~/react/lib/CSSProperty.js","webpack:///./~/fbjs/lib/camelizeStyleName.js","webpack:///./~/fbjs/lib/camelize.js","webpack:///./~/react/lib/dangerousStyleValue.js","webpack:///./~/fbjs/lib/hyphenateStyleName.js","webpack:///./~/fbjs/lib/hyphenate.js","webpack:///./~/fbjs/lib/memoizeStringOnly.js","webpack:///./~/react/lib/DOMPropertyOperations.js","webpack:///./~/react/lib/ReactDOMInstrumentation.js","webpack:///./~/react/lib/ReactDOMDebugTool.js","webpack:///./~/react/lib/ReactDOMNullInputValuePropDevtool.js","webpack:///./~/react/lib/ReactDOMUnknownPropertyDevtool.js","webpack:///./~/react/lib/quoteAttributeValueForBrowser.js","webpack:///./~/react/lib/ReactBrowserEventEmitter.js","webpack:///./~/react/lib/ReactEventEmitterMixin.js","webpack:///./~/react/lib/getVendorPrefixedEventName.js","webpack:///./~/react/lib/ReactDOMButton.js","webpack:///./~/react/lib/DisabledInputUtils.js","webpack:///./~/react/lib/ReactDOMInput.js","webpack:///./~/react/lib/LinkedValueUtils.js","webpack:///./~/react/lib/ReactDOMOption.js","webpack:///./~/react/lib/ReactDOMSelect.js","webpack:///./~/react/lib/ReactDOMTextarea.js","webpack:///./~/react/lib/ReactMultiChild.js","webpack:///./~/react/lib/ReactComponentEnvironment.js","webpack:///./~/react/lib/ReactInstanceMap.js","webpack:///./~/react/lib/ReactChildReconciler.js","webpack:///./~/react/lib/instantiateReactComponent.js","webpack:///./~/react/lib/ReactCompositeComponent.js","webpack:///./~/react/lib/ReactNodeTypes.js","webpack:///./~/fbjs/lib/shallowEqual.js","webpack:///./~/react/lib/shouldUpdateReactComponent.js","webpack:///./~/react/lib/ReactEmptyComponent.js","webpack:///./~/react/lib/ReactHostComponent.js","webpack:///./~/react/lib/flattenChildren.js","webpack:///./~/react/lib/ReactServerRenderingTransaction.js","webpack:///./~/react/lib/ReactServerUpdateQueue.js","webpack:///./~/react/lib/ReactUpdateQueue.js","webpack:///./~/react/lib/validateDOMNesting.js","webpack:///./~/react/lib/ReactDOMEmptyComponent.js","webpack:///./~/react/lib/ReactDOMTreeTraversal.js","webpack:///./~/react/lib/ReactDOMTextComponent.js","webpack:///./~/react/lib/ReactDefaultBatchingStrategy.js","webpack:///./~/react/lib/ReactEventListener.js","webpack:///./~/fbjs/lib/EventListener.js","webpack:///./~/fbjs/lib/getUnboundedScrollPosition.js","webpack:///./~/react/lib/ReactInjection.js","webpack:///./~/react/lib/ReactReconcileTransaction.js","webpack:///./~/react/lib/ReactInputSelection.js","webpack:///./~/react/lib/ReactDOMSelection.js","webpack:///./~/react/lib/getNodeForCharacterOffset.js","webpack:///./~/fbjs/lib/containsNode.js","webpack:///./~/fbjs/lib/isTextNode.js","webpack:///./~/fbjs/lib/isNode.js","webpack:///./~/fbjs/lib/getActiveElement.js","webpack:///./~/react/lib/SVGDOMPropertyConfig.js","webpack:///./~/react/lib/SelectEventPlugin.js","webpack:///./~/react/lib/SimpleEventPlugin.js","webpack:///./~/react/lib/SyntheticAnimationEvent.js","webpack:///./~/react/lib/SyntheticClipboardEvent.js","webpack:///./~/react/lib/SyntheticFocusEvent.js","webpack:///./~/react/lib/SyntheticKeyboardEvent.js","webpack:///./~/react/lib/getEventCharCode.js","webpack:///./~/react/lib/getEventKey.js","webpack:///./~/react/lib/SyntheticDragEvent.js","webpack:///./~/react/lib/SyntheticTouchEvent.js","webpack:///./~/react/lib/SyntheticTransitionEvent.js","webpack:///./~/react/lib/SyntheticWheelEvent.js","webpack:///./~/react/lib/ReactMount.js","webpack:///./~/react/lib/ReactDOMContainerInfo.js","webpack:///./~/react/lib/ReactDOMFeatureFlags.js","webpack:///./~/react/lib/ReactMarkupChecksum.js","webpack:///./~/react/lib/adler32.js","webpack:///./~/react/lib/findDOMNode.js","webpack:///./~/react/lib/getHostComponentFromComposite.js","webpack:///./~/react/lib/renderSubtreeIntoContainer.js","webpack:///./~/moment/moment.js","webpack:///./index.js","webpack:///./src/index.js","webpack:///./src/TimePicker.jsx","webpack:///./~/rc-trigger/lib/index.js","webpack:///./~/rc-trigger/lib/Trigger.js","webpack:///./~/rc-util/lib/Dom/contains.js","webpack:///./~/rc-util/lib/Dom/addEventListener.js","webpack:///./~/add-dom-event-listener/lib/index.js","webpack:///./~/add-dom-event-listener/lib/EventObject.js","webpack:///./~/add-dom-event-listener/lib/EventBaseObject.js","webpack:///./~/rc-trigger/lib/Popup.js","webpack:///./~/rc-align/lib/index.js","webpack:///./~/rc-align/lib/Align.js","webpack:///./~/dom-align/lib/index.js","webpack:///./~/dom-align/lib/utils.js","webpack:///./~/dom-align/lib/getOffsetParent.js","webpack:///./~/dom-align/lib/getVisibleRectForElement.js","webpack:///./~/dom-align/lib/adjustForViewport.js","webpack:///./~/dom-align/lib/getRegion.js","webpack:///./~/dom-align/lib/getElFuturePos.js","webpack:///./~/dom-align/lib/getAlignOffset.js","webpack:///./~/rc-align/lib/isWindow.js","webpack:///./~/rc-animate/lib/index.js","webpack:///./~/rc-animate/lib/Animate.js","webpack:///./~/rc-animate/lib/ChildrenUtils.js","webpack:///./~/rc-animate/lib/AnimateChild.js","webpack:///./~/css-animation/lib/index.js","webpack:///./~/css-animation/lib/Event.js","webpack:///./~/component-classes/index.js","webpack:///./~/component-indexof/index.js","webpack:///./~/rc-animate/lib/util.js","webpack:///./~/rc-trigger/lib/PopupInner.js","webpack:///./~/rc-trigger/lib/LazyRenderBox.js","webpack:///./~/rc-trigger/lib/utils.js","webpack:///./~/rc-util/lib/getContainerRenderMixin.js","webpack:///./src/Panel.jsx","webpack:///./src/Header.jsx","webpack:///./src/Combobox.jsx","webpack:///./src/Select.jsx","webpack:///./~/babel-runtime/helpers/defineProperty.js","webpack:///./~/babel-runtime/core-js/object/define-property.js","webpack:///./~/core-js/library/fn/object/define-property.js","webpack:///./~/core-js/library/modules/es6.object.define-property.js","webpack:///./~/core-js/library/modules/_export.js","webpack:///./~/core-js/library/modules/_global.js","webpack:///./~/core-js/library/modules/_core.js","webpack:///./~/core-js/library/modules/_ctx.js","webpack:///./~/core-js/library/modules/_a-function.js","webpack:///./~/core-js/library/modules/_hide.js","webpack:///./~/core-js/library/modules/_object-dp.js","webpack:///./~/core-js/library/modules/_an-object.js","webpack:///./~/core-js/library/modules/_is-object.js","webpack:///./~/core-js/library/modules/_ie8-dom-define.js","webpack:///./~/core-js/library/modules/_descriptors.js","webpack:///./~/core-js/library/modules/_fails.js","webpack:///./~/core-js/library/modules/_dom-create.js","webpack:///./~/core-js/library/modules/_to-primitive.js","webpack:///./~/core-js/library/modules/_property-desc.js","webpack:///./~/classnames/index.js","webpack:///./src/placements.js"],"names":[],"mappings":";AAAA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAQ,oBAAoB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uBAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wEAAgE,yEAAyE;AACzI;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;;;ACzFA,0C;;;;;;ACAA;;AAEA;;;;;;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,wB;;;;;;;ACxFA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,wBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAqB;AACrB;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,4BAA2B;AAC3B;AACA;AACA;AACA,6BAA4B,UAAU;;;;;;;ACnItC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,iCAAgC;AAChC;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH,mCAAkC;AAClC;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,iBAAgB,sBAAsB;AACtC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mBAAkB,oBAAoB;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;AClFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,UAAU;AACrB,YAAW,GAAG;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,GAAG;AACd,YAAW,iBAAiB;AAC5B,YAAW,EAAE;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,GAAG;AACd,YAAW,UAAU;AACrB,YAAW,GAAG;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,GAAG;AACd,YAAW,iBAAiB;AAC5B,YAAW,EAAE;AACb,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,GAAG;AACd,aAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gC;;;;;;AC9LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,8B;;;;;;;ACxHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,qDAAoD;;AAEpD,uBAAsB,mBAAmB;AACzC;AACA;;AAEA;;AAEA;AACA;AACA,yBAAwB;;AAExB;AACA;;AAEA,qC;;;;;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,sDAAqD;AACrD,MAAK;AACL;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA,2BAA0B;AAC1B;AACA;AACA;;AAEA,4B;;;;;;;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,YAAW,EAAE;AACb,YAAW,cAAc;AACzB,YAAW,EAAE;AACb;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb;AACA,YAAW,EAAE;AACb,YAAW,EAAE;AACb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,oBAAmB,oBAAoB;AACvC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,oBAAmB,oBAAoB;AACvC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,QAAQ;AACnB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;;AAEA;;AAEA,+B;;;;;;;ACvWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,aAAY;AACZ;AACA;;AAEA;;AAEA,oC;;;;;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,uFAAsF,aAAa;AACnG;AACA;;AAEA;AACA;AACA;;AAEA;AACA,cAAa;AACb;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA,0B;;;;;;;ACvDA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,8CAA6C;AAC7C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gC;;;;;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,6BAA4B,QAAQ,oBAAoB,EAAE;AAC1D;AACA,IAAG;AACH;AACA;AACA;;AAEA,oC;;;;;;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,EAAE;AACb,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,GAAG;AACd,YAAW,QAAQ;AACnB,YAAW,UAAU;AACrB,YAAW,GAAG;AACd;AACA,aAAY,QAAQ;AACpB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,wBAAuB;AACvB;;AAEA;AACA,oBAAmB,qBAAqB;AACxC;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2LAA2L,yCAAyC,+GAA+G,yCAAyC;AAC5X;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,GAAG;AACd,YAAW,UAAU;AACrB,YAAW,GAAG;AACd,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,sC;;;;;;;ACtKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA,yCAAwC;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,QAAQ;AACnB,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gC;;;;;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA,iC;;;;;;AC1DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,gBAAgB;AAC3B;AACA,YAAW,UAAU;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,UAAU;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iC;;;;;;;ACrHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAa,WAAW;AACxB,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,UAAU;AACvB;AACA;AACA,0DAAyD;;AAEzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,WAAW;AACxB;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA,uC;;;;;;;AC/FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA,8B;;;;;;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,qC;;;;;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,yBAAwB,eAAe;;AAEvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAY;AACZ;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;;AAEA;AACA,eAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA6B,KAAK;AAClC;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,WAAW;AACxB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,QAAQ;AACrB,cAAa,QAAQ;AACrB,eAAc,QAAQ;AACtB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,QAAQ;AACrB,cAAa,QAAQ;AACrB,cAAa,0BAA0B;AACvC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,QAAQ;AACrB,cAAa,QAAQ;AACrB,cAAa,WAAW;AACxB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,0BAA0B;AACvC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,sBAAqB,mBAAmB;AACxC;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,+CAA8C;AAC9C,IAAG;AACH;AACA;AACA;AACA;AACA,0CAAyC;AACzC,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,uCAAsC;AACtC,IAAG;AACH;AACA;AACA,IAAG;AACH,2BAA0B;;AAE1B;AACA;AACA;AACA;AACA;AACA;AACA,6HAA4H;AAC5H;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qOAAoO;;AAEpO;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;AACA;;AAEA;AACA;AACA,qNAAoN;AACpN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,SAAS;AACpB,YAAW,SAAS;AACpB,aAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,SAAS;AACpB,YAAW,SAAS;AACpB,aAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,aAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yFAAwF,aAAa;AACrG;AACA;;AAEA,uDAAsD;AACtD;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA,kBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,eAAc,SAAS;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;;AAEA,6B;;;;;;;AC3tBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,EAAC;;AAED,yC;;;;;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,8BAA6B,sBAAsB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd,eAAc;AACd;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,4B;;;;;;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6C;;;;;;;ACvBA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA8C,gBAAgB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wB;;;;;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,EAAC;;AAED,oC;;;;;;;AC/KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,QAAQ;AACnB,YAAW,SAAS;AACpB,YAAW,EAAE;AACb,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,4B;;;;;;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,aAAa;AACxB,YAAW,EAAE;AACb;AACA;AACA;AACA;AACA;AACA;;AAEA,0FAAyF;;AAEzF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,UAAU;AACrB,YAAW,EAAE;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,aAAa;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAqB,sBAAsB;AAC3C;AACA;AACA;;AAEA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,UAAS;AACT;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA,oBAAmB,sBAAsB;AACzC;AACA;AACA;AACA;AACA;;AAEA;;AAEA,wC;;;;;;;ACjOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA,4C;;;;;;;ACzNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,QAAQ;AACnB,YAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kJAAiJ;AACjJ;AACA,QAAO;AACP;AACA;AACA,uIAAsI;AACtI;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,qC;;;;;;;ACtFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,uC;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR,4BAA2B;AAC3B,OAAM;AACN;AACA;AACA;AACA;AACA,8BAA6B,KAAK;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,2BAA0B;AAC1B,MAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,sBAAsB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAmB,2BAA2B;AAC9C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAmB,gCAAgC;AACnD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iC;;;;;;;AChaA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,2B;;;;;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,QAAQ;AACnB,aAAY,aAAa;AACzB;AACA;AACA;AACA;AACA;AACA;;AAEA,4B;;;;;;;ACrCA;;AAEA;;;;;;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,+HAA8H;;AAE9H;AACA;AACA;;AAEA,oBAAmB,6BAA6B;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,2B;;;;;;;ACpGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAkE;AAClE;AACA;AACA;AACA,WAAU,oBAAoB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAQ,4CAA4C;AACpD;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAQ,gBAAgB;AACxB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wC;;;;;;;AC3LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA4C;AAC5C,+BAA8B;AAC9B;AACA,iBAAgB;;AAEhB;AACA;AACA;AACA,aAAY;AACZ;AACA,sEAAqE;;AAErE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAmB,oDAAoD;AACvE;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA,8B;;;;;;;AC7MA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,yC;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;;AAEA;AACA;AACA,G;;;;;;ACnFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,oCAAmC;AACnC;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,uBAAsB,sBAAsB;AAC5C,wBAAuB,6BAA6B;AACpD,MAAK;AACL;AACA,IAAG;AACH;AACA;AACA,uBAAsB,yBAAyB;AAC/C,wBAAuB,gCAAgC;AACvD,MAAK;AACL;AACA,IAAG;AACH;AACA;AACA,uBAAsB,2BAA2B;AACjD,wBAAuB,kCAAkC;AACzD,MAAK;AACL;AACA,IAAG;AACH;AACA;AACA,uBAAsB,4BAA4B;AAClD,wBAAuB,mCAAmC;AAC1D,MAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,aAAY,QAAQ;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAY,QAAQ;AACpB;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA,yC;;;;;;ACnYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,oCAAmC,gCAAgC;;AAEnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA,iC;;;;;;AChGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,eAAe;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,mC;;;;;;;ACxIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,QAAQ;AACnB,YAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,uBAAsB;AACtB;AACA;AACA;AACA,oBAAmB;AACnB;AACA;AACA;AACA;AACA,yBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,gBAAe,MAAM;AACrB;AACA;AACA;;AAEA;AACA,gBAAe,OAAO;AACtB;AACA;;AAEA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,cAAa,SAAS;AACtB;AACA;AACA;;AAEA;AACA,yGAAwG;AACxG;;AAEA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,eAAc,UAAU;AACxB;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,eAAc,EAAE;AAChB;AACA;AACA;AACA;AACA;AACA,oBAAmB,oBAAoB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;;AAEA,iC;;;;;;;ACxPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,+BAA8B;;AAE9B;AACA;AACA;AACA,8BAA6B;;AAE7B;AACA;AACA;AACA,mCAAkC;;AAElC;AACA;AACA;AACA;AACA,aAAY;AACZ;AACA,wEAAuE;;AAEvE;AACA;AACA;AACA;AACA;AACA,cAAa,MAAM;AACnB;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,sC;;;;;;;ACtPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,YAAW,eAAe;AAC1B,YAAW,QAAQ;AACnB,YAAW,SAAS;AACpB,YAAW,EAAE;AACb;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,8BAA8B;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,8BAA8B;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAY,EAAE;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,eAAe;AAC1B,aAAY,QAAQ;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;;AAEH;AACA;;AAEA,mC;;;;;;;ACpOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,QAAQ;AACnB,YAAW,SAAS;AACpB,YAAW,EAAE;AACb,YAAW,EAAE;AACb;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kC;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA6B;AAC7B;AACA;AACA;AACA,aAAY,WAAW;AACvB;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,iC;;;;;;;ACzDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,YAAW,MAAM;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA,qC;;;;;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA,uC;;;;;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,eAAe;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAmB,qBAAqB;AACxC;AACA;AACA;AACA;;AAEA;AACA,kBAAiB,eAAe;AAChC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAC;;AAED;;AAEA,2C;;;;;;AC9FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,yC;;;;;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa;AACb;AACA;AACA;AACA;;AAEA;;AAEA,4C;;;;;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA,YAAW,OAAO;AAClB,YAAW,EAAE;AACb,YAAW,OAAO;AAClB,YAAW,eAAe;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA4B;AAC5B;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,eAAc,QAAQ;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,oBAAmB,uCAAuC;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,EAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB,YAAW,QAAQ;AACnB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,+BAA8B;AAC9B;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,aAAY,OAAO;AACnB,aAAY,OAAO;AACnB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,E;;;;;;;ACnQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa;AACb;AACA;AACA;AACA;;AAEA;;AAEA,sC;;;;;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,uBAAsB,iBAAiB;AACvC,wBAAuB,wBAAwB;AAC/C,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA,oC;;;;;;ACpUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,eAAe;AAC1B,YAAW,eAAe;AAC1B,aAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAiB,SAAS;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,sBAAqB,sBAAsB;AAC3C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iDAAgD;AAChD;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,+B;;;;;;;AC1PA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,cAAa,SAAS;AACtB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAqB,sBAAsB;AAC3C;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA,EAAC;;AAED;;AAEA,gC;;;;;;;ACzGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,oC;;;;;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,cAAa,eAAe;AAC5B,cAAa,0DAA0D;AACvE,cAAa,QAAQ;AACrB,cAAa,QAAQ;AACrB,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,eAAe;AAC5B,cAAa,aAAa;AAC1B,cAAa,0BAA0B;AACvC,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,eAAe;AAC5B,cAAa,0BAA0B;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,kC;;;;;;;AC7KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,2B;;;;;;AC/EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAAyB,iBAAiB;AAC1C;AACA;AACA;AACA,SAAQ;AACR;AACA;AACA,SAAQ;AACR;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAa,QAAQ;AACrB,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,eAAe;AAC5B,cAAa,OAAO;AACpB,cAAa,WAAW;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,eAAe;AAC5B,cAAa,OAAO;AACpB,cAAa,WAAW;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,6B;;;;;;;AC7FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA,mBAAkB,wB;;;;;;;ACpBlB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG,IAAI;AACP;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA,oBAAmB,0BAA0B;AAC7C;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iC;;;;;;;AChUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA,qD;;;;;;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA,mD;;;;;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAqB,oCAAoC;AACzD;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA,iD;;;;;;;AC7DA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;;AAEA,iC;;;;;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA,oC;;;;;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,4BAA4B;AACvC;AACA,aAAY,YAAY;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;AACA,eAAc,0BAA0B;AACxC;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,SAAS;AACtB,cAAa,OAAO;AACpB,cAAa,SAAS;AACtB,cAAa,SAAS;AACtB,cAAa,SAAS;AACtB,cAAa,SAAS;AACtB,cAAa,SAAS;AACtB,cAAa,SAAS;AACtB;AACA,eAAc,EAAE;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,6BAA4B,gCAAgC;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,2DAA0D;AAC1D;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA4B,gCAAgC;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,sDAAqD;AACrD;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA,8B;;;;;;;ACxOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,eAAe;AAC3B;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,iC;;;;;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,6CAA4C;AAC5C;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,mC;;;;;;AC3DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,qC;;;;;;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC,6BAA6B,UAAU,0BAA0B,UAAU,uBAAuB,UAAU,8BAA8B,UAAU,0BAA0B,UAAU,0BAA0B,UAAU,+BAA+B;;AAEjS,0C;;;;;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA,8BAA6B,qBAAqB;AAClD;AACA,IAAG;AACH;AACA,8BAA6B,qBAAqB;AAClD;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA,wC;;;;;;ACxGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa;AACb;AACA;AACA;AACA;;AAEA;;AAEA,sC;;;;;;ACvEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa;AACb;AACA;AACA;AACA;;AAEA;;AAEA,mC;;;;;;AC1DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA,kC;;;;;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,wC;;;;;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA,wC;;;;;;AChNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,mD;;;;;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,WAAW;AACtB,YAAW,WAAW;AACtB,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,yEAAwE;AACxE;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,cAAa,cAAc;AAC3B;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAmB,oBAAoB;AACvC;AACA;AACA;AACA;AACA;AACA,gGAA+F,8DAA8D;AAC7J;AACA;AACA;AACA;AACA;AACA,8FAA6F,uDAAuD;AACpJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gGAA+F,8BAA8B;AAC7H;AACA;AACA;AACA;AACA;;AAEA;;AAEA,wC;;;;;;;ACjMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,qBAAqB;AACxC;AACA;AACA,IAAG;AACH;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,8B;;;;;;ACrHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,gC;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,WAAW;AACtB,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,qBAAqB;AACxC;AACA;AACA,IAAG;AACH;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA,wBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA,+B;;;;;;ACjGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,IAAG;AACH;AACA;AACA;;AAEA,qD;;;;;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,WAAW;AACtB,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iC;;;;;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,aAAY,OAAO;AACnB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,4BAA2B,oBAAoB;AAC/C;AACA;AACA;AACA,yBAAwB;AACxB;AACA;AACA;AACA,wBAAuB;AACvB;AACA;AACA;AACA,yBAAwB,EAAE,8BAA8B;AACxD;AACA;AACA;AACA,uBAAsB;AACtB;AACA;AACA;AACA,uBAAsB;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,EAAE;AACb,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,8C;;;;;;ACzHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;;AAEA,yB;;;;;;;AC/CA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,UAAU;AACrB,aAAY,8BAA8B;AAC1C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,wC;;;;;;;AClFA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,yBAAyB;AACpC,aAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA,oLAAmL;;AAEnL;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA,mBAAkB,aAAa;AAC/B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,aAAY;AACZ;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,IAAG;AACH;AACA;AACA;;AAEA,uC;;;;;;;AC7HA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA,gC;;;;;;;AC7FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED,6C;;;;;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAa,cAAc;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,uC;;;;;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,sBAAqB;;AAErB,oBAAmB,cAAc;AACjC,mBAAkB,eAAe;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,yBAAyB;AACxC;AACA,IAAG;AACH;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,YAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qNAAoN,YAAY;AAChO;AACA;AACA;AACA;AACA;AACA;AACA,gOAA+N,+BAA+B;AAC9P;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,EAAC;;AAED;AACA;AACA;;AAEA,qDAAoD;AACpD;AACA,wBAAuB;;AAEvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa,0DAA0D;AACvE,cAAa,mBAAmB;AAChC,cAAa,QAAQ;AACrB,cAAa,OAAO;AACpB,eAAc,OAAO;AACrB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,0DAA0D;AACvE,cAAa,OAAO;AACpB,eAAc,OAAO;AACrB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,6DAA4D;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,0DAA0D;AACvE,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,eAAc,OAAO;AACrB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,wBAAuB,wBAAwB;AAC/C;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,aAAa;AAC1B,cAAa,0DAA0D;AACvE,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,0BAA0B;AACvC,cAAa,aAAa;AAC1B,cAAa,aAAa;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,cAAa,YAAY;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,uCAAsC,KAAK;AAC3C;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAAyD;AACzD,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,cAAa,0BAA0B;AACvC,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAAyB,sBAAsB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;;AAEA;;AAEA,oC;;;;;;;AChgCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,iC;;;;;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,YAAW,WAAW;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA,4B;;;;;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,6CAA4C;;AAE5C;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAa,OAAO;AACpB,cAAa,EAAE;AACf,cAAa,kBAAkB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iCAAgC,0BAA0B;AAC1D,qBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,kBAAkB;AAC/B,eAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iFAAgF;AAChF;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,OAAO;AACpB,cAAa,kBAAkB;AAC/B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;;AAEA,wC;;;;;;;AC5MA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,8B;;;;;;ACnJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;AACA;AACA;;AAEA,oC;;;;;;ACtCA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA,2B;;;;;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,EAAE;AACb,YAAW,kBAAkB;AAC7B,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,uBAAsB;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,sC;;;;;;;AC9EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;AACA;AACA;;AAEA,qC;;;;;;ACrCA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;AACA;AACA;;AAEA,4B;;;;;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oC;;;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAa,OAAO;AACpB,eAAc,OAAO;AACrB;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,EAAE;AACf,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,EAAE;AACf,eAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,OAAO;AACpB,cAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,UAAS;AACT;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,wC;;;;;;;ACnOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA,mBAAkB,wB;;;;;;;ACpBlB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,oBAAmB,0BAA0B;AAC7C;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;;AAEA,oC;;;;;;;AClEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA,iD;;;;;;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,8CAA6C;AAC7C;;AAEA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA,iD;;;;;;;AC/GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,EAAE;AACb,aAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA,gD;;;;;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAAyC;;AAEzC;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA,eAAc,QAAQ;AACtB;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAmB,yBAAyB;AAC5C;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA,YAAW;AACX;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,EAAC;;AAED,2C;;;;;;AC5TA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,yC;;;;;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa;AACb;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,6C;;;;;;ACpGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iC;;;;;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,qC;;;;;;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,uCAAsC;AACtC;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;;AAEA;AACA,2GAA0G;AAC1G;AACA;AACA;AACA,6GAA4G;AAC5G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAmB,kBAAkB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,+BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,gC;;;;;;;ACtPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA,cAAa,OAAO;AACpB,eAAc,EAAE;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA,cAAa,OAAO;AACpB,eAAc,EAAE;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA,cAAa,OAAO;AACpB,cAAa,eAAe;AAC5B;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA,mC;;;;;;;ACvIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA,wBAAuB,wBAAwB;AAC/C;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA,2BAA0B;AAC1B,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA,8BAA6B,2CAA2C;;AAExE;AACA,iBAAgB;AAChB;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA,iC;;;;;;;AC1HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,wGAAuG;AACvG;AACA;;AAEA,kBAAiB,2BAA2B;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA,YAAW,kBAAkB;AAC7B,YAAW,QAAQ;AACnB,YAAW,EAAE;AACb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAe,sBAAsB;AACrC;AACA;AACA,gBAAe,oBAAoB;AACnC;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,gBAAe,oBAAoB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAqB;AACrB;AACA;AACA,MAAK;AACL,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,iC;;;;;;;ACvMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,uCAAsC;AACtC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,+BAA8B;AAC9B;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,8GAA6G;AAC7G;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA,mCAAkC;AAClC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,mC;;;;;;;AC1JA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA,gBAAe,QAAQ;AACvB,iBAAgB,MAAM;AACtB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,MAAK;;AAEL;AACA;AACA;AACA,gBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,gBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,gBAAe,QAAQ;AACvB,gBAAe,0BAA0B;AACzC;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA,gBAAe,QAAQ;AACvB,gBAAe,0BAA0B;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,gBAAe,eAAe;AAC9B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,gBAAe,eAAe;AAC9B,gBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,gBAAe,eAAe;AAC9B;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,gBAAe,eAAe;AAC9B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,0BAA0B;AACzC;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,gBAAe,eAAe;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,kC;;;;;;;ACpcA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,4C;;;;;;;ACpDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;;AAEA,mC;;;;;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wKAAuK;AACvK;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,QAAQ;AACrB,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP,MAAK;AACL;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,QAAQ;AACrB,cAAa,QAAQ;AACrB,cAAa,0BAA0B;AACvC,cAAa,OAAO;AACpB,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,uC;;;;;;;ACtJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,IAAG;AACH;AACA,IAAG;AACH;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,UAAU;AACrB,YAAW,QAAQ;AACnB,aAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;AACH;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,4C;;;;;;;ACjJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW;AACX;AACA;;AAEA;AACA;AACA;AACA,cAAa,aAAa;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,0DAA0D;AACvE,cAAa,QAAQ;AACrB,cAAa,QAAQ;AACrB,cAAa,QAAQ;AACrB,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,eAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,eAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA,cAAa,OAAO;AACpB,eAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB;AACvB;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,0BAA0B;AACvC;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,0BAA0B;AACvC,cAAa,aAAa;AAC1B,cAAa,aAAa;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,+BAA8B;AAC9B,kCAAiC,kBAAkB;AACnD;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,aAAa;AAC1B,cAAa,OAAO;AACpB,cAAa,QAAQ;AACrB,cAAa,QAAQ;AACrB,cAAa,0BAA0B;AACvC,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,0BAA0B;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,UAAU;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAAyD;AACzD;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,eAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,eAAc,eAAe;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA,0C;;;;;;;AC/6BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA,iC;;;;;;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;;AAEA;AACA;;AAEA,+B;;;;;;ACjEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,QAAQ;AACnB,YAAW,QAAQ;AACnB,aAAY,QAAQ;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA,6C;;;;;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,sC;;;;;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,aAAa;AACxB,aAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,UAAU;AACrB,aAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA,YAAW,eAAe;AAC1B,aAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,qC;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,SAAS;AACpB,YAAW,gBAAgB;AAC3B,YAAW,QAAQ;AACnB,YAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0KAAyK;AACzK;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA;;AAEA,kC;;;;;;;ACzEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA,YAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAc,MAAM;AACpB;AACA;AACA;AACA,IAAG;;AAEH;AACA,eAAc,OAAO;AACrB;AACA;AACA;AACA,IAAG;;AAEH;AACA,eAAc,OAAO;AACrB;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,6BAA4B;;AAE5B,6BAA4B;;AAE5B;AACA;;AAEA;;AAEA;;AAEA,kD;;;;;;;ACzFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,kDAAiD,0CAA0C,0DAA0D,EAAE;;AAEvJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,YAAY;AACvB;;AAEA;AACA,kCAAiC;;AAEjC;AACA;;AAEA;AACA;;AAEA;AACA;AACA,cAAa,WAAW;AACxB,eAAc,QAAQ;AACtB;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,UAAU;AACvB;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,WAAW;AACxB;AACA;;;AAGA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,gBAAgB;AAC7B;AACA;;;AAGA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,gBAAgB;AAC7B;AACA;;;AAGA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA,EAAC;;AAED,yC;;;;;;;AC5IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,yRAAwR;AACxR;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAa,WAAW;AACxB,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,UAAU;AACvB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,WAAW;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA,0IAAyI;AACzI;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;;AAEA,mC;;;;;;;ACjOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,0DAAyD;AACzD;AACA;AACA,wCAAuC;AACvC;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAiC;AACjC,iBAAgB;;AAEhB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,kBAAiB,iBAAiB;AAClC;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,qC;;;;;;;AChXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,mCAAkC;AAClC;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,EAAC;;AAED,yC;;;;;;AC3DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0BAAyB,OAAO;AAChC;AACA;AACA;AACA,0BAAyB,OAAO;AAChC;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,SAAS;AAChC;AACA;AACA,cAAa,iBAAiB;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,qBAAqB;AAClC;AACA;AACA,0BAAyB,SAAS;AAClC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,G;;;;;;;ACvIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,cAAa,0DAA0D;AACvE,eAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,UAAU;AACvB,cAAa,0BAA0B;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA,EAAC;;AAED,wC;;;;;;;AC1KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAC;;AAED;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA,+C;;;;;;ACnEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH,kBAAiB,kCAAkC;AACnD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA,qC;;;;;;AC5JA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,eAAe;AAC5B,cAAa,OAAO;AACpB,cAAa,SAAS;AACtB,eAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,eAAe;AAC5B,cAAa,OAAO;AACpB,cAAa,SAAS;AACtB,eAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA,gC;;;;;;;AClFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,qBAAqB;AAChC,aAAY,OAAO;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6C;;;;;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iC;;;;;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAc,UAAU;AACxB;AACA;AACA;AACA,cAAa,UAAU;AACvB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAc,cAAc;AAC5B;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA,eAAc,OAAO;AACrB;AACA;AACA;AACA,IAAG;;AAEH;AACA,eAAc,OAAO;AACrB;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,4C;;;;;;;ACjLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA,0BAAyB;AACzB,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA,sC;;;;;;AC3HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,WAAW;AACtB,aAAY;AACZ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,WAAW;AACtB,aAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,uBAAuB;AAClC,YAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,uBAAuB;AAClC,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,cAAa,WAAW;AACxB;AACA;;AAEA;AACA,cAAa,uBAAuB;AACpC,cAAa,OAAO;AACpB;AACA;AACA;;AAEA,oC;;;;;;ACnNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,uBAAuB;AAClC,aAAY;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,uBAAuB;AAClC,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,uBAAuB;AAClC,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,4C;;;;;;ACzEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,IAAG;AACH;AACA,IAAG;AACH;AACA,IAAG;AACH;AACA,IAAG;AACH;AACA,IAAG;AACH;AACA;AACA;;AAEA,+B;;;;;;ACtCA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,YAAW,EAAE;AACb,aAAY,QAAQ;AACpB;AACA;AACA;AACA;;AAEA,6B;;;;;;ACvBA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,EAAE;AACb,aAAY,QAAQ;AACpB;AACA;AACA;AACA;;AAEA,yB;;;;;;ACrBA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA,mC;;;;;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED,uC;;;;;;AC7SA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,uBAAsB,iBAAiB;AACvC,wBAAuB,wBAAwB;AAC/C,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,4BAA2B,iBAAiB;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,WAAW;AACtB,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA,oC;;;;;;ACnMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,uBAAsB,gBAAgB;AACtC,wBAAuB,uBAAuB;AAC9C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,uBAAuB;AAC7C,wBAAuB,8BAA8B;AACrD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,6BAA6B;AACnD,wBAAuB,oCAAoC;AAC3D;AACA,IAAG;AACH;AACA;AACA,uBAAsB,yBAAyB;AAC/C,wBAAuB,gCAAgC;AACvD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,eAAe;AACrC,wBAAuB,sBAAsB;AAC7C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,kBAAkB;AACxC,wBAAuB,yBAAyB;AAChD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,yBAAyB;AAC/C,wBAAuB,gCAAgC;AACvD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,gBAAgB;AACtC,wBAAuB,uBAAuB;AAC9C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,sBAAsB;AAC5C,wBAAuB,6BAA6B;AACpD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,eAAe;AACrC,wBAAuB,sBAAsB;AAC7C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,cAAc;AACpC,wBAAuB,qBAAqB;AAC5C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,sBAAsB;AAC5C,wBAAuB,6BAA6B;AACpD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,eAAe;AACrC,wBAAuB,sBAAsB;AAC7C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,kBAAkB;AACxC,wBAAuB,yBAAyB;AAChD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,oBAAoB;AAC1C,wBAAuB,2BAA2B;AAClD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,mBAAmB;AACzC,wBAAuB,0BAA0B;AACjD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,oBAAoB;AAC1C,wBAAuB,2BAA2B;AAClD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,mBAAmB;AACzC,wBAAuB,0BAA0B;AACjD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,oBAAoB;AAC1C,wBAAuB,2BAA2B;AAClD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,eAAe;AACrC,wBAAuB,sBAAsB;AAC7C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,yBAAyB;AAC/C,wBAAuB,gCAAgC;AACvD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,kBAAkB;AACxC,wBAAuB,yBAAyB;AAChD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,oBAAoB;AAC1C,wBAAuB,2BAA2B;AAClD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,gBAAgB;AACtC,wBAAuB,uBAAuB;AAC9C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,gBAAgB;AACtC,wBAAuB,uBAAuB;AAC9C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,gBAAgB;AACtC,wBAAuB,uBAAuB;AAC9C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,gBAAgB;AACtC,wBAAuB,uBAAuB;AAC9C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,kBAAkB;AACxC,wBAAuB,yBAAyB;AAChD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,kBAAkB;AACxC,wBAAuB,yBAAyB;AAChD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,mBAAmB;AACzC,wBAAuB,0BAA0B;AACjD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,gBAAgB;AACtC,wBAAuB,uBAAuB;AAC9C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,eAAe;AACrC,wBAAuB,sBAAsB;AAC7C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,qBAAqB;AAC3C,wBAAuB,4BAA4B;AACnD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,yBAAyB;AAC/C,wBAAuB,gCAAgC;AACvD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,oBAAoB;AAC1C,wBAAuB,2BAA2B;AAClD;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,uBAAsB,oBAAoB;AAC1C,wBAAuB,2BAA2B;AAClD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,oBAAoB;AAC1C,wBAAuB,2BAA2B;AAClD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,mBAAmB;AACzC,wBAAuB,0BAA0B;AACjD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,oBAAoB;AAC1C,wBAAuB,2BAA2B;AAClD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,kBAAkB;AACxC,wBAAuB,yBAAyB;AAChD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,gBAAgB;AACtC,wBAAuB,uBAAuB;AAC9C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,gBAAgB;AACtC,wBAAuB,uBAAuB;AAC9C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,eAAe;AACrC,wBAAuB,sBAAsB;AAC7C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,kBAAkB;AACxC,wBAAuB,yBAAyB;AAChD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,mBAAmB;AACzC,wBAAuB,0BAA0B;AACjD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,qBAAqB;AAC3C,wBAAuB,4BAA4B;AACnD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,gBAAgB;AACtC,wBAAuB,uBAAuB;AAC9C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,iBAAiB;AACvC,wBAAuB,wBAAwB;AAC/C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,iBAAiB;AACvC,wBAAuB,wBAAwB;AAC/C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,kBAAkB;AACxC,wBAAuB,yBAAyB;AAChD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,kBAAkB;AACxC,wBAAuB,yBAAyB;AAChD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,iBAAiB;AACvC,wBAAuB,wBAAwB;AAC/C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,kBAAkB;AACxC,wBAAuB,yBAAyB;AAChD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,qBAAqB;AAC3C,wBAAuB,4BAA4B;AACnD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,sBAAsB;AAC5C,wBAAuB,6BAA6B;AACpD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,mBAAmB;AACzC,wBAAuB,0BAA0B;AACjD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,oBAAoB;AAC1C,wBAAuB,2BAA2B;AAClD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,qBAAqB;AAC3C,wBAAuB,4BAA4B;AACnD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,wBAAwB;AAC9C,wBAAuB,+BAA+B;AACtD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,uBAAuB;AAC7C,wBAAuB,8BAA8B;AACrD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,kBAAkB;AACxC,wBAAuB,yBAAyB;AAChD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,gBAAgB;AACtC,wBAAuB,uBAAuB;AAC9C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,2BAA0B,gBAAgB;AAC1C;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,oC;;;;;;;ACxnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa;AACb;AACA;AACA;AACA;;AAEA;;AAEA,0C;;;;;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa;AACb;AACA;AACA;AACA;;AAEA;;AAEA,0C;;;;;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa;AACb;AACA;AACA;AACA;;AAEA;;AAEA,sC;;;;;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa;AACb;AACA;AACA;AACA;;AAEA;;AAEA,yC;;;;;;ACnFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,mC;;;;;;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,8B;;;;;;ACrGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa;AACb;AACA;AACA;AACA;;AAEA;;AAEA,qC;;;;;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa;AACb;AACA;AACA;AACA;;AAEA;;AAEA,sC;;;;;;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa;AACb;AACA;AACA;AACA;;AAEA;;AAEA,2C;;;;;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa;AACb;AACA;AACA;AACA;;AAEA;;AAEA,sC;;;;;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,aAAY,OAAO;AACnB;AACA;AACA;AACA,kBAAiB,YAAY;AAC7B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,uBAAuB;AAClC;AACA,aAAY,GAAG;AACf;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,eAAe;AAC1B,YAAW,WAAW;AACtB,YAAW,0BAA0B;AACrC,YAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,eAAe;AAC1B,YAAW,WAAW;AACtB,YAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,eAAe;AAC1B,YAAW,WAAW;AACtB;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,YAAY;AACvB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,SAAS;AACtB;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,cAAa,eAAe;AAC5B,cAAa,aAAa;AAC1B,cAAa,WAAW;AACxB,cAAa,UAAU;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,aAAa;AAC1B,cAAa,WAAW;AACxB,cAAa,QAAQ;AACrB,eAAc,eAAe;AAC7B;AACA;AACA;AACA;AACA;AACA,qLAAoL;;AAEpL;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,eAAe;AAC5B,cAAa,aAAa;AAC1B,cAAa,WAAW;AACxB,cAAa,UAAU;AACvB,eAAc,eAAe;AAC7B;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,aAAa;AAC1B,cAAa,WAAW;AACxB,cAAa,UAAU;AACvB,eAAc,eAAe;AAC7B;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,WAAW;AACxB,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oLAAmL;;AAEnL;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6B;;;;;;;AClfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wC;;;;;;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,uC;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,cAAa,OAAO;AACpB,eAAc,OAAO;AACrB;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;;AAEH;AACA,cAAa,OAAO;AACpB,cAAa,WAAW;AACxB,gBAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,sC;;;;;;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU,OAAO;AACjB;AACA;AACA;AACA;AACA;AACA,SAAQ,OAAO;AACf;AACA;AACA;AACA;AACA;AACA;;AAEA,0B;;;;;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,0BAA0B;AACrC,aAAY,YAAY;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA,8B;;;;;;;AC3DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA,gD;;;;;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,wD;;;;;;ACfA;AACA;AACA;AACA;AACA;;AAEA,EAAC;AACD;AACA;AACA;AACA,EAAC,oBAAoB;;AAErB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAmB,gBAAgB;AACnC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA,4BAA2B,SAAS;AACpC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,SAAS;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,uFAAsF,IAAI;AAC1F;;AAEA;AACA,4BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAqC;AACrC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,UAAS;;AAET;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,mCAAkC,IAAI;;AAEtC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,iCAAgC;AAChC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,yBAAwB,iCAAiC;AACzD;AACA;AACA;AACA,UAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA,4BAA2B,wBAAwB;AACnD;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6LAA4L,IAAI;;AAEhM,sEAAqE,IAAI;;AAEzE;;AAEA;;AAEA;AACA;AACA;AACA,+BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,2CAA0C,YAAY;AACtD;AACA;AACA,cAAa;AACb;AACA;AACA;;AAEA;AACA;AACA,wBAAuB,YAAY;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,+BAA8B;AAC9B,iCAAgC;AAChC,8BAA6B,EAAE,EAAE;AACjC,8BAA6B,EAAE,EAAE;AACjC,mCAAkC,EAAE,EAAE;AACtC,kCAAiC;AACjC,sCAAqC;AACrC,0CAAyC;AACzC,8BAA6B,IAAI,EAAE;AACnC,8BAA6B,IAAI,EAAE;AACnC,mCAAkC,IAAI,EAAE;;AAExC,gCAA+B;AAC/B,qCAAoC;;AAEpC,+CAA8C;AAC9C,sDAAqD;;AAErD,yCAAwC,IAAI,IAAI;;AAEhD;AACA;AACA,iIAAgI,IAAI;;;AAGpI;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT;;AAEA;AACA,+CAA8C;AAC9C;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,kBAAkB;AACrC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,wBAAuB,iBAAiB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,MAAK;;AAEL;AACA;AACA,MAAK;;AAEL;AACA;AACA,MAAK;;AAEL;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;;AAEL;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,QAAQ;AAC/B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAmB,QAAQ;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,cAAa;AACb;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAmB,QAAQ;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,QAAQ;AAC3B;AACA;AACA;AACA,oBAAmB,QAAQ;AAC3B;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA,MAAK;;AAEL;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK;;AAEL;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA,MAAK;;AAEL;AACA;AACA,MAAK;;AAEL;AACA;AACA,MAAK;;AAEL;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,MAAK;;AAEL;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,wBAAuB,OAAO;AAC9B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,cAAa;AACb;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAmB,OAAO;AAC1B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,cAAa;AACb;AACA,cAAa;AACb;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAmB,OAAO;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,OAAO;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,UAAS;AACT;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,YAAY;AACzB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,4CAA2C,EAAE,IAAI,EAAE;AACnD,yCAAwC,EAAE,IAAI,EAAE;;AAEhD;;AAEA;AACA,kCAAiC,EAAE;AACnC,4BAA2B,EAAE;AAC7B,8BAA6B,EAAE;AAC/B,4BAA2B,EAAE;AAC7B,0BAAyB,EAAE,IAAI,EAAE;AACjC,yBAAwB,EAAE;AAC1B,gCAA+B,GAAG;AAClC,0BAAyB,EAAE;AAC3B;AACA,4BAA2B,EAAE,IAAI,EAAE;AACnC,2BAA0B,EAAE,IAAI,EAAE;AAClC,yBAAwB,EAAE;AAC1B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,6CAA4C,OAAO;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAmB,+BAA+B;AAClD;AACA;;AAEA;AACA,eAAc,OAAO;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,oBAAmB,mBAAmB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,oBAAmB,sBAAsB;AACzC;AACA,uCAAsC;AACtC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;;AAET;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,0CAAyC,gBAAgB;AACzD;;AAEA;AACA;AACA;;AAEA;AACA;AACA,UAAS;AACT;AACA,UAAS;AACT;AACA,UAAS;AACT;AACA,UAAS;AACT;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,UAAS;AACT;AACA,UAAS;AACT;AACA;AACA,cAAa;AACb;AACA,UAAS;AACT;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,oBAAoB;AACvC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,yEAAwE,EAAE;;AAE1E;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS,6BAA6B;AACtC;AACA,UAAS;AACT;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAmB;;AAEnB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,qBAAoB;AACpB;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA0B,cAAc;AACxC;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,4CAA2C,qBAAqB;AAChE,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,4CAA2C,qBAAqB;AAChE,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,yBAAwB;AACxB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,MAAK;;AAEL;AACA;AACA,MAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK;;AAEL;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA,MAAK;;AAEL;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;;;AAGL;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,yBAAwB,mBAAmB;AAC3C;AACA;;AAEA;AACA;AACA;;AAEA,sBAAqB,mBAAmB;AACxC;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAmB,QAAQ;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAmB,OAAO;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,2BAA0B,IAAI;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;;AAEL;;;AAGA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,EAAC,G;;;;;;;;;;;;AClmID;;;;;;;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;;;;;;;ACAA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;;;AAEA,UAAS,IAAT,GAAgB,CACf;;AAED,UAAS,KAAT,CAAe,KAAf,EAAsB,SAAtB,EAAiC;AAC/B,QAAK,KAAL,IAAc,SAAd;AACD;;AAED,KAAM,SAAS,gBAAM,WAAN,CAAkB;AAAA;;AAC/B,cAAW;AACT,gBAAW,iBAAU,MADZ;AAET,gBAAW,iBAAU,MAFZ;AAGT,YAAO,iBAAU,MAHR;AAIT,uBAAkB,iBAAU,MAJnB;AAKT,eAAU,iBAAU,IALX;AAMT,iBAAY,iBAAU,IANb;AAOT,mBAAc,iBAAU,MAPf;AAQT,WAAM,iBAAU,IARP;AAST,kBAAa,iBAAU,IATd;AAUT,YAAO,iBAAU,MAVR;AAWT,gBAAW,iBAAU,GAXZ;AAYT,qBAAgB,iBAAU,MAZjB;AAaT,wBAAmB,iBAAU,IAbpB;AAcT,kBAAa,iBAAU,MAdd;AAeT,aAAQ,iBAAU,MAfT;AAgBT,eAAU,iBAAU,IAhBX;AAiBT,YAAO,iBAAU,MAjBR;AAkBT,gBAAW,iBAAU,MAlBZ;AAmBT,iBAAY,iBAAU,IAnBb;AAoBT,oBAAe,iBAAU,IApBhB;AAqBT,sBAAiB,iBAAU,IArBlB;AAsBT,sBAAiB,iBAAU,IAtBlB;AAuBT,0BAAqB,iBAAU,IAvBtB;AAwBT,eAAU,iBAAU,IAxBX;AAyBT,aAAQ,iBAAU,IAzBT;AA0BT,cAAS,iBAAU;AA1BV,IADoB;;AA8B/B,kBA9B+B,6BA8Bb;AAChB,YAAO;AACL,kBAAW,OADN;AAEL,kBAAW,gBAFN;AAGL,oBAAa,KAHR;AAIL,cAAO,EAJF;AAKL,kBAAW,EALN;AAML,cAAO,EANF;AAOL,yBAAkB,uBAPb;AAQL,mBAAY,IARP;AASL,iBAAU,IATL;AAUL,mBAAY,IAVP;AAWL,sBAAe,IAXV;AAYL,wBAAiB,IAZZ;AAaL,wBAAiB,IAbZ;AAcL,4BAAqB,KAdhB;AAeL,kBAAW,YAfN;AAgBL,iBAAU,IAhBL;AAiBL,eAAQ,IAjBH;AAkBL,gBAAS;AAlBJ,MAAP;AAoBD,IAnD8B;AAqD/B,kBArD+B,6BAqDb;AAChB,UAAK,YAAL,GAAoB,MAAM,IAAN,CAAW,IAAX,EAAiB,eAAjB,CAApB;AADgB,kBAEgE,KAAK,KAFrE;AAAA,SAER,WAFQ,UAER,WAFQ;AAAA,SAEK,YAFL,UAEK,YAFL;AAAA,8BAEmB,IAFnB;AAAA,SAEmB,IAFnB,+BAE0B,WAF1B;AAAA,+BAEuC,KAFvC;AAAA,SAEuC,KAFvC,gCAE+C,YAF/C;;AAGhB,YAAO;AACL,iBADK;AAEL;AAFK,MAAP;AAID,IA5D8B;AA8D/B,4BA9D+B,qCA8DL,SA9DK,EA8DM;AAAA,SAC3B,KAD2B,GACX,SADW,CAC3B,KAD2B;AAAA,SACpB,IADoB,GACX,SADW,CACpB,IADoB;;AAEnC,SAAI,WAAW,SAAf,EAA0B;AACxB,YAAK,QAAL,CAAc;AACZ;AADY,QAAd;AAGD;AACD,SAAI,SAAS,SAAb,EAAwB;AACtB,YAAK,QAAL,CAAc,EAAE,UAAF,EAAd;AACD;AACF,IAxE8B;AA0E/B,gBA1E+B,yBA0EjB,KA1EiB,EA0EV;AACnB,UAAK,QAAL,CAAc,KAAd;AACD,IA5E8B;AA8E/B,eA9E+B,0BA8EhB;AACb,UAAK,QAAL,CAAc,IAAd;AACA,UAAK,OAAL,CAAa,KAAb;AACD,IAjF8B;AAmF/B,kBAnF+B,2BAmFf,IAnFe,EAmFT;AACpB,UAAK,OAAL,CAAa,IAAb;AACD,IArF8B;AAuF/B,QAvF+B,mBAuFvB;AACN,UAAK,OAAL,CAAa,KAAb;AACA,UAAK,IAAL,CAAU,MAAV,CAAiB,KAAjB;AACD,IA1F8B;AA4F/B,YA5F+B,qBA4FrB,CA5FqB,EA4FlB;AACX,SAAI,EAAE,OAAF,KAAc,EAAlB,EAAsB;AACpB,YAAK,OAAL,CAAa,IAAb;AACD;AACF,IAhG8B;AAkG/B,WAlG+B,oBAkGtB,KAlGsB,EAkGf;AACd,SAAI,EAAE,WAAW,KAAK,KAAlB,CAAJ,EAA8B;AAC5B,YAAK,QAAL,CAAc;AACZ;AADY,QAAd;AAGD;AACD,UAAK,KAAL,CAAW,QAAX,CAAoB,KAApB;AACD,IAzG8B;AA2G/B,YA3G+B,uBA2GnB;AACV,SAAM,SAAS,KAAK,KAAL,CAAW,MAA1B;AACA,SAAI,MAAJ,EAAY;AACV,cAAO,MAAP;AACD;AACD,SAAI,CAAC,KAAK,KAAL,CAAW,UAAhB,EAA4B;AAC1B,cAAO,OAAP;AACD;AACD,SAAI,CAAC,KAAK,KAAL,CAAW,QAAhB,EAA0B;AACxB,cAAO,OAAP;AACD;AACD,YAAO,UAAP;AACD,IAvH8B;AAyH/B,kBAzH+B,6BAyHb;AAAA,mBAKZ,KAAK,KALO;AAAA,SAEd,SAFc,WAEd,SAFc;AAAA,SAEH,WAFG,WAEH,WAFG;AAAA,SAEU,aAFV,WAEU,aAFV;AAAA,SAGd,eAHc,WAGd,eAHc;AAAA,SAGG,eAHH,WAGG,eAHH;AAAA,SAGoB,mBAHpB,WAGoB,mBAHpB;AAAA,SAId,UAJc,WAId,UAJc;AAAA,SAIF,QAJE,WAIF,QAJE;AAAA,SAIQ,UAJR,WAIQ,UAJR;AAAA,SAIoB,gBAJpB,WAIoB,gBAJpB;AAAA,SAIsC,SAJtC,WAIsC,SAJtC;;AAMhB,YACE;AACE,kBAAW,SADb;AAEE,kBAAc,SAAd,WAFF;AAGE,YAAK,KAAK,YAHZ;AAIE,cAAO,KAAK,KAAL,CAAW,KAJpB;AAKE,iBAAU,KAAK,aALjB;AAME,gBAAS,KAAK,YANhB;AAOE,yBAAkB,gBAPpB;AAQE,iBAAU,QARZ;AASE,cAAO,KAAK,KATd;AAUE,mBAAY,UAVd;AAWE,mBAAY,UAXd;AAYE,eAAQ,KAAK,SAAL,EAZV;AAaE,oBAAa,WAbf;AAcE,sBAAe,aAdjB;AAeE,wBAAiB,eAfnB;AAgBE,wBAAiB,eAhBnB;AAiBE,4BAAqB;AAjBvB,OADF;AAqBD,IApJ8B;AAsJ/B,UAtJ+B,mBAsJvB,IAtJuB,EAsJjB,QAtJiB,EAsJP;AAAA,mBACM,KAAK,KADX;AAAA,SACd,MADc,WACd,MADc;AAAA,SACN,OADM,WACN,OADM;;AAEtB,SAAI,KAAK,KAAL,CAAW,IAAX,KAAoB,IAAxB,EAA8B;AAC5B,YAAK,QAAL,CAAc;AACZ;AADY,QAAd,EAEG,QAFH;AAGA,WAAM,QAAQ;AACZ;AADY,QAAd;AAGA,WAAI,IAAJ,EAAU;AACR,gBAAO,KAAP;AACD,QAFD,MAEO;AACL,iBAAQ,KAAR;AACD;AACF;AACF,IArK8B;AAuK/B,SAvK+B,oBAuKtB;AAAA,mBAKH,KAAK,KALF;AAAA,SAEL,SAFK,WAEL,SAFK;AAAA,SAEM,WAFN,WAEM,WAFN;AAAA,SAEmB,SAFnB,WAEmB,SAFnB;AAAA,SAE8B,KAF9B,WAE8B,KAF9B;AAAA,SAGL,QAHK,WAGL,QAHK;AAAA,SAGK,cAHL,WAGK,cAHL;AAAA,SAGqB,KAHrB,WAGqB,KAHrB;AAAA,SAG4B,SAH5B,WAG4B,SAH5B;AAAA,SAGuC,QAHvC,WAGuC,QAHvC;AAAA,SAIL,UAJK,WAIL,UAJK;AAAA,SAIO,iBAJP,WAIO,iBAJP;AAAA,kBAMiB,KAAK,KANtB;AAAA,SAMC,IAND,UAMC,IAND;AAAA,SAMO,KANP,UAMO,KANP;;AAOP,SAAI,uBAAJ;AACA,SAAI,CAAC,QAAD,IAAa,CAAC,UAAlB,EAA8B;AAC5B,wBAAoB,SAApB;AACD;AACD,YACE;AAAA;AAAA;AACE,oBAAc,SAAd,WADF;AAEE,yBAAgB,cAFlB;AAGE,gBAAO,KAAK,eAAL,EAHT;AAIE,qBAAY,KAJd;AAKE,gDALF;AAME,yBAAgB,SANlB;AAOE,iBAAQ,WAAW,EAAX,GAAgB,CAAC,OAAD,CAP1B;AAQE,iCARF;AASE,4BAAmB,iBATrB;AAUE,8BAAqB,cAVvB;AAWE,uBAAc,IAXhB;AAYE,+BAAsB,KAAK;AAZ7B;AAcE;AAAA;AAAA,WAAM,WAAc,SAAd,SAA2B,SAAjC,EAA8C,OAAO,KAArD;AACE;AACE,sBAAc,SAAd,WADF;AAEE,gBAAI,QAFN,EAEe,MAAK,MAFpB,EAE2B,aAAa,WAFxC;AAGE,yBAHF;AAIE,sBAAW,KAAK,SAJlB;AAKE,qBAAU,QALZ,EAKsB,OAAO,SAAS,MAAM,MAAN,CAAa,KAAK,SAAL,EAAb,CAAT,IAA2C;AALxE,WADF;AAQE,iDAAM,WAAc,SAAd,UAAN;AARF;AAdF,MADF;AA2BD;AA7M8B,EAAlB,CAAf;;mBAgNe,M;;;;;;;AC7Nf;;AAEA,2C;;;;;;ACFA;;AAEA;AACA;AACA,EAAC;;AAED,oDAAmD,gBAAgB,sBAAsB,OAAO,2BAA2B,0BAA0B,yDAAyD,2BAA2B,EAAE,EAAE,EAAE,eAAe;;AAE9P;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA,uCAAsC,uCAAuC,kBAAkB;;AAE/F;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAoB;AACpB;AACA,qBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA,+BAA8B;AAC9B;AACA,MAAK;AACL,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;AACL;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA,EAAC;;AAED;AACA,qC;;;;;;AC/cA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,G;;;;;;ACZA;;AAEA;AACA;AACA,EAAC;AACD;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA,uCAAsC,uCAAuC,kBAAkB;;AAE/F;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,qC;;;;;;ACxBA;;AAEA;AACA;AACA,EAAC;AACD;;AAEA,uCAAsC,uCAAuC,kBAAkB;;AAE/F;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,qC;;;;;;ACpCA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,EAAC;;AAED,uCAAsC,uCAAuC,kBAAkB;;AAE/F;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA,EAAC;AACD;AACA;AACA,EAAC;AACD;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oCAAmC,cAAc;AACjD;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,sDAAqD;AACrD;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA,EAAC;;AAED;AACA,qC;;;;;;ACrRA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,EAAC;AACD;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA,qC;;;;;;AC9DA;;AAEA;AACA;AACA,EAAC;;AAED,oDAAmD,gBAAgB,sBAAsB,OAAO,2BAA2B,0BAA0B,yDAAyD,2BAA2B,EAAE,EAAE,EAAE,eAAe;;AAE9P;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA,uCAAsC,uCAAuC,kBAAkB;;AAE/F;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,+BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA0B,sBAAsB;AAChD;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA,qC;;;;;;AC/NA;;AAEA;AACA;AACA,EAAC;;AAED;;AAEA;;AAEA,uCAAsC,uCAAuC,kBAAkB;;AAE/F,yCAAwC;;AAExC,qC;;;;;;ACdA;;AAEA;AACA;AACA,EAAC;;AAED;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA,uCAAsC,uCAAuC,kBAAkB;;AAE/F;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,QAAO;AACP,qCAAoC;;AAEpC;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA,qC;;;;;;ACzJA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,EAAC;;AAED,uCAAsC,uCAAuC,kBAAkB;;AAE/F;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qC;;;;;;ACzNA;;AAEA;AACA;AACA,EAAC;AACD;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA,IAAG;AACH;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kBAAiB,gBAAgB;AACjC;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa,kBAAkB;AAC/B;AACA;AACA,kBAAiB,kBAAkB;AACnC;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA,UAAS,OAAO;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAe;;AAEf;AACA;AACA,kEAAiE,aAAa;AAC9E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,wCAAuC;AACvC,MAAK;AACL;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;;AAEA,uEAAsE,eAAe;AACrF;AACA;;AAEA,oBAAmB,iBAAiB;AACpC;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA,qC;;;;;;AC5eA;;AAEA;AACA;AACA,EAAC;;AAED,uCAAsC,uCAAuC,kBAAkB;;AAE/F;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,4BAA2B,cAAc;AACzC,4BAA2B,cAAc,mBAAmB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oCAAmC,2BAA2B;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qC;;;;;;ACpDA;;AAEA;AACA;AACA,EAAC;;AAED,uCAAsC,uCAAuC,kBAAkB;;AAE/F;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qC;;;;;;AC3EA;;AAEA;AACA;AACA,EAAC;;AAED,uCAAsC,uCAAuC,kBAAkB;;AAE/F;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,qC;;;;;;ACtDA;;AAEA;AACA;AACA,EAAC;;AAED,uCAAsC,uCAAuC,kBAAkB;;AAE/F;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qC;;;;;;ACnCA;;AAEA;AACA;AACA,EAAC;;AAED,uCAAsC,uCAAuC,kBAAkB;;AAE/F;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,qC;;;;;;ACnCA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,qC;;;;;;ACvCA;;AAEA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,qC;;;;;;ACXA;;AAEA;AACA,2C;;;;;;ACHA;;AAEA;AACA;AACA,EAAC;;AAED;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA,uCAAsC,uCAAuC,kBAAkB;;AAE/F,4CAA2C,kBAAkB,kCAAkC,qEAAqE,EAAE,EAAE,OAAO,kBAAkB,EAAE,YAAY;;AAE/M;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,oBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mGAAkG;AAClG,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA,qC;;;;;;ACtUA;;AAEA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,uCAAsC,uCAAuC,kBAAkB;;AAE/F;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,UAAS;AACT;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA,E;;;;;;ACpHA;;AAEA;AACA;AACA,EAAC;;AAED,qGAAoG,mBAAmB,EAAE,mBAAmB,kGAAkG;;AAE9O;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA,uCAAsC,uCAAuC,kBAAkB;;AAE/F;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;AACL;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,EAAC;;AAED;AACA,qC;;;;;;ACzGA;;AAEA;AACA;AACA,EAAC;;AAED,qGAAoG,mBAAmB,EAAE,mBAAmB,kGAAkG;;AAE9O;;AAEA;;AAEA;;AAEA;;AAEA,uCAAsC,uCAAuC,kBAAkB;;AAE/F;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,kBAAiB,qBAAqB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;;AAEA;AACA,qC;;;;;;AC7LA;;AAEA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;;;AAGH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA,qC;;;;;;ACvFA;AACA;AACA;;AAEA;AACA;AACA,EAAC;AACD;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,QAAQ;AACnB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,QAAQ;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,cAAc;AACzB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA,kBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,QAAQ;AACnB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,gCAA+B;AAC/B;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;AACH;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC9LA;AACA;AACA,kBAAiB,gBAAgB;AACjC;AACA;AACA;AACA,G;;;;;;ACNA;;AAEA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA,qC;;;;;;AC1BA;;AAEA;AACA;AACA,EAAC;;AAED;;AAEA;;AAEA;;AAEA;;AAEA,uCAAsC,uCAAuC,kBAAkB;;AAE/F;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,UAAS,kEAAkE;AAC3E;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA,qC;;;;;;ACnDA;;AAEA;AACA;AACA,EAAC;;AAED;;AAEA;;AAEA,uCAAsC,uCAAuC,kBAAkB;;AAE/F,+CAA8C,iBAAiB,qBAAqB,oCAAoC,6DAA6D,oBAAoB,EAAE,eAAe;;AAE1N;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;;AAED;AACA,qC;;;;;;AC7CA;;AAEA;AACA;AACA,EAAC;;AAED,oDAAmD,gBAAgB,sBAAsB,OAAO,2BAA2B,0BAA0B,yDAAyD,2BAA2B,EAAE,EAAE,EAAE,eAAe;;AAE9P;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAoB;AACpB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,E;;;;;;AC7BA;;AAEA;AACA;AACA,EAAC;;AAED,oDAAmD,gBAAgB,sBAAsB,OAAO,2BAA2B,0BAA0B,yDAAyD,2BAA2B,EAAE,EAAE,EAAE,eAAe;;AAE9P;;AAEA;;AAEA;;AAEA,uCAAsC,uCAAuC,kBAAkB;;AAE/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA,wBAAuB;AACvB;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA,wBAAuB;AACvB;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,wBAAuB;AACvB;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH,wBAAuB;AACvB;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA,qC;;;;;;;;;;;;AC7FA;;;;AACA;;;;AACA;;;;AACA;;;;;;AAEA,UAAS,IAAT,GAAgB,CACf;;AAED,UAAS,eAAT,CAAyB,MAAzB,EAAiC,eAAjC,EAAkD,mBAAlD,EAAuE;AACrE,OAAM,MAAM,EAAZ;AACA,QAAK,IAAI,QAAQ,CAAjB,EAAoB,QAAQ,MAA5B,EAAoC,OAApC,EAA6C;AAC3C,SAAI,CAAC,eAAD,IAAoB,gBAAgB,OAAhB,CAAwB,KAAxB,IAAiC,CAArD,IAA0D,CAAC,mBAA/D,EAAoF;AAClF,WAAI,IAAJ,CAAS,KAAT;AACD;AACF;AACD,UAAO,GAAP;AACD;;AAED,KAAM,QAAQ,gBAAM,WAAN,CAAkB;AAAA;;AAC9B,cAAW;AACT,gBAAW,iBAAU,MADZ;AAET,gBAAW,iBAAU,MAFZ;AAGT,uBAAkB,iBAAU,MAHnB;AAIT,YAAO,iBAAU,MAJR;AAKT,kBAAa,iBAAU,MALd;AAMT,aAAQ,iBAAU,MANT;AAOT,oBAAe,iBAAU,IAPhB;AAQT,sBAAiB,iBAAU,IARlB;AAST,sBAAiB,iBAAU,IATlB;AAUT,0BAAqB,iBAAU,IAVtB;AAWT,eAAU,iBAAU,IAXX;AAYT,YAAO,iBAAU,IAZR;AAaT,iBAAY,iBAAU,IAbb;AAcT,eAAU,iBAAU,IAdX;AAeT,iBAAY,iBAAU,IAfb;AAgBT,cAAS,iBAAU;AAhBV,IADmB;;AAoB9B,kBApB8B,6BAoBZ;AAChB,YAAO;AACL,kBAAW,sBADN;AAEL,iBAAU,IAFL;AAGL,gBAAS,IAHJ;AAIL,yBAAkB;AAJb,MAAP;AAMD,IA3B6B;AA6B9B,kBA7B8B,6BA6BZ;AAChB,YAAO;AACL,cAAO,KAAK,KAAL,CAAW,KADb;AAEL,uBAAgB;AAFX,MAAP;AAID,IAlC6B;AAoC9B,4BApC8B,qCAoCJ,SApCI,EAoCO;AACnC,SAAM,QAAQ,UAAU,KAAxB;AACA,SAAI,KAAJ,EAAW;AACT,YAAK,QAAL,CAAc;AACZ;AADY,QAAd;AAGD;AACF,IA3C6B;AA6C9B,WA7C8B,oBA6CrB,QA7CqB,EA6CX;AACjB,UAAK,QAAL,CAAc,EAAE,OAAO,QAAT,EAAd;AACA,UAAK,KAAL,CAAW,QAAX,CAAoB,QAApB;AACD,IAhD6B;AAkD9B,UAlD8B,qBAkDpB;AACR,UAAK,KAAL,CAAW,OAAX;AACD,IApD6B;AAsD9B,6BAtD8B,sCAsDH,kBAtDG,EAsDiB;AAC7C,UAAK,QAAL,CAAc,EAAE,sCAAF,EAAd;AACD,IAxD6B;AA0D9B,SA1D8B,oBA0DrB;AAAA,kBAKH,KAAK,KALF;AAAA,SAEL,SAFK,UAEL,SAFK;AAAA,SAEM,WAFN,UAEM,WAFN;AAAA,SAEmB,aAFnB,UAEmB,aAFnB;AAAA,SAEkC,eAFlC,UAEkC,eAFlC;AAAA,SAGL,eAHK,UAGL,eAHK;AAAA,SAGY,mBAHZ,UAGY,mBAHZ;AAAA,SAGiC,UAHjC,UAGiC,UAHjC;AAAA,SAG6C,QAH7C,UAG6C,QAH7C;AAAA,SAGuD,UAHvD,UAGuD,UAHvD;AAAA,SAIL,MAJK,UAIL,MAJK;AAAA,SAIG,gBAJH,UAIG,gBAJH;AAAA,SAIqB,SAJrB,UAIqB,SAJrB;AAAA,SAIgC,KAJhC,UAIgC,KAJhC;AAAA,kBAQH,KAAK,KARF;AAAA,SAOL,KAPK,UAOL,KAPK;AAAA,SAOE,kBAPF,UAOE,kBAPF;;AASP,SAAM,sBAAsB,eAA5B;AACA,SAAM,wBAAwB,gBAAgB,QAAQ,MAAM,IAAN,EAAR,GAAuB,IAAvC,CAA9B;AACA,SAAM,wBAAwB,gBAAgB,QAAQ,MAAM,IAAN,EAAR,GAAuB,IAAvC,EAC5B,QAAQ,MAAM,MAAN,EAAR,GAAyB,IADG,CAA9B;AAEA,SAAM,cAAc,gBAAgB,EAAhB,EAAoB,mBAApB,EAAyC,mBAAzC,CAApB;AACA,SAAM,gBAAgB,gBAAgB,EAAhB,EAAoB,qBAApB,EAA2C,mBAA3C,CAAtB;AACA,SAAM,gBAAgB,gBAAgB,EAAhB,EAAoB,qBAApB,EAA2C,mBAA3C,CAAtB;;AAEA,YACE;AAAA;AAAA,SAAK,WAAc,SAAd,WAAL;AACE;AACE,oBAAW,SADb;AAEE,oBAAW,SAFb;AAGE,2BAAkB,gBAHpB;AAIE,gBAAO,KAJT;AAKE,6BAAoB,kBALtB;AAME,gBAAO,KANT;AAOE,iBAAQ,MAPV;AAQE,sBAAa,WARf;AASE,sBAAa,WATf;AAUE,wBAAe,aAVjB;AAWE,wBAAe,aAXjB;AAYE,wBAAe,aAZjB;AAaE,0BAAiB,eAbnB;AAcE,0BAAiB,eAdnB;AAeE,mBAAU,KAAK,QAfjB;AAgBE,kBAAS,KAAK,OAhBhB;AAiBE,qBAAY;AAjBd,SADF;AAoBE;AACE,oBAAW,SADb;AAEE,gBAAO,KAFT;AAGE,2BAAkB,gBAHpB;AAIE,iBAAQ,MAJV;AAKE,mBAAU,KAAK,QALjB;AAME,mBAAU,QANZ;AAOE,qBAAY,UAPd;AAQE,sBAAa,WARf;AASE,wBAAe,aATjB;AAUE,wBAAe,aAVjB;AAWE,wBAAe,aAXjB;AAYE,0BAAiB,eAZnB;AAaE,0BAAiB,eAbnB;AAcE,qCAA4B,KAAK;AAdnC;AApBF,MADF;AAuCD;AAlH6B,EAAlB,CAAd;;mBAqHe,K;;;;;;;;;;;;;ACvIf;;;;AACA;;;;;;AAEA,KAAM,SAAS,gBAAM,WAAN,CAAkB;AAAA;;AAC/B,cAAW;AACT,aAAQ,iBAAU,MADT;AAET,gBAAW,iBAAU,MAFZ;AAGT,mBAAc,iBAAU,IAHf;AAIT,kBAAa,iBAAU,MAJd;AAKT,gBAAW,iBAAU,MALZ;AAMT,YAAO,iBAAU,MANR;AAOT,kBAAa,iBAAU,KAPd;AAQT,oBAAe,iBAAU,KARhB;AAST,oBAAe,iBAAU,KAThB;AAUT,oBAAe,iBAAU,IAVhB;AAWT,sBAAiB,iBAAU,IAXlB;AAYT,sBAAiB,iBAAU,IAZlB;AAaT,eAAU,iBAAU,IAbX;AAcT,cAAS,iBAAU,IAdV;AAeT,YAAO,iBAAU,IAfR;AAgBT,iBAAY,iBAAU,IAhBb;AAiBT,uBAAkB,iBAAU,MAjBnB;AAkBT,yBAAoB,iBAAU;AAlBrB,IADoB;;AAsB/B,kBAtB+B,6BAsBb;AAAA,kBACU,KAAK,KADf;AAAA,SACR,KADQ,UACR,KADQ;AAAA,SACD,MADC,UACD,MADC;;AAEhB,YAAO;AACL,YAAK,SAAS,MAAM,MAAN,CAAa,MAAb,CAAT,IAAiC,EADjC;AAEL,gBAAS;AAFJ,MAAP;AAID,IA5B8B;AA8B/B,4BA9B+B,qCA8BL,SA9BK,EA8BM;AAAA,SAC3B,KAD2B,GACT,SADS,CAC3B,KAD2B;AAAA,SACpB,MADoB,GACT,SADS,CACpB,MADoB;;AAEnC,UAAK,QAAL,CAAc;AACZ,YAAK,SAAS,MAAM,MAAN,CAAa,MAAb,CAAT,IAAiC,EAD1B;AAEZ,gBAAS;AAFG,MAAd;AAID,IApC8B;AAsC/B,gBAtC+B,yBAsCjB,KAtCiB,EAsCV;AACnB,SAAM,MAAM,MAAM,MAAN,CAAa,KAAzB;AACA,UAAK,QAAL,CAAc;AACZ;AADY,MAAd;AAFmB,mBASf,KAAK,KATU;AAAA,SAMjB,MANiB,WAMjB,MANiB;AAAA,SAMT,WANS,WAMT,WANS;AAAA,SAMI,aANJ,WAMI,aANJ;AAAA,SAMmB,aANnB,WAMmB,aANnB;AAAA,SAOjB,aAPiB,WAOjB,aAPiB;AAAA,SAOF,eAPE,WAOF,eAPE;AAAA,SAQjB,eARiB,WAQjB,eARiB;AAAA,SAQA,QARA,WAQA,QARA;AAAA,SAQU,UARV,WAQU,UARV;;;AAWnB,SAAI,GAAJ,EAAS;AACP,WAAM,gBAAgB,KAAK,KAAL,CAAW,KAAjC;AACA,WAAM,QAAQ,KAAK,aAAL,GAAqB,KAArB,EAAd;AACA,WAAM,SAAS,sBAAO,GAAP,EAAY,MAAZ,EAAoB,IAApB,CAAf;AACA,WAAI,CAAC,OAAO,OAAP,EAAL,EAAuB;AACrB,cAAK,QAAL,CAAc;AACZ,oBAAS;AADG,UAAd;AAGA;AACD;AACD,aAAM,IAAN,CAAW,OAAO,IAAP,EAAX,EAA0B,MAA1B,CAAiC,OAAO,MAAP,EAAjC,EAAkD,MAAlD,CAAyD,OAAO,MAAP,EAAzD;;AAEA;AACA,WACE,YAAY,OAAZ,CAAoB,MAAM,IAAN,EAApB,IAAoC,CAApC,IACA,cAAc,OAAd,CAAsB,MAAM,MAAN,EAAtB,IAAwC,CADxC,IAEA,cAAc,OAAd,CAAsB,MAAM,MAAN,EAAtB,IAAwC,CAH1C,EAIE;AACA,cAAK,QAAL,CAAc;AACZ,oBAAS;AADG,UAAd;AAGA;AACD;;AAED;AACA,WAAM,sBAAsB,eAA5B;AACA,WAAM,wBAAwB,gBAAgB,MAAM,IAAN,EAAhB,CAA9B;AACA,WAAM,wBAAwB,gBAAgB,MAAM,IAAN,EAAhB,EAA8B,MAAM,MAAN,EAA9B,CAA9B;AACA,WACG,uBAAuB,oBAAoB,OAApB,CAA4B,MAAM,IAAN,EAA5B,KAA6C,CAArE,IACC,yBAAyB,sBAAsB,OAAtB,CAA8B,MAAM,MAAN,EAA9B,KAAiD,CAD3E,IAEC,yBAAyB,sBAAsB,OAAtB,CAA8B,MAAM,MAAN,EAA9B,KAAiD,CAH7E,EAIE;AACA,cAAK,QAAL,CAAc;AACZ,oBAAS;AADG,UAAd;AAGA;AACD;;AAED,WAAI,aAAJ,EAAmB;AACjB,aACE,cAAc,IAAd,OAAyB,MAAM,IAAN,EAAzB,IACA,cAAc,MAAd,OAA2B,MAAM,MAAN,EAD3B,IAEA,cAAc,MAAd,OAA2B,MAAM,MAAN,EAH7B,EAIE;AACA;AACA,eAAM,eAAe,cAAc,KAAd,EAArB;AACA,wBAAa,IAAb,CAAkB,MAAM,IAAN,EAAlB;AACA,wBAAa,MAAb,CAAoB,MAAM,MAAN,EAApB;AACA,wBAAa,MAAb,CAAoB,MAAM,MAAN,EAApB;AACA,oBAAS,YAAT;AACD;AACF,QAbD,MAaO,IAAI,kBAAkB,KAAtB,EAA6B;AAClC,kBAAS,KAAT;AACD;AACF,MAvDD,MAuDO,IAAI,UAAJ,EAAgB;AACrB,gBAAS,IAAT;AACD,MAFM,MAEA;AACL,YAAK,QAAL,CAAc;AACZ,kBAAS;AADG,QAAd;AAGA;AACD;;AAED,UAAK,QAAL,CAAc;AACZ,gBAAS;AADG,MAAd;AAGD,IApH8B;AAsH/B,YAtH+B,qBAsHrB,CAtHqB,EAsHlB;AACX,SAAI,EAAE,OAAF,KAAc,EAAlB,EAAsB;AACpB,YAAK,KAAL,CAAW,KAAX;AACD;AACF,IA1H8B;AA4H/B,UA5H+B,qBA4HrB;AACR,UAAK,QAAL,CAAc,EAAE,KAAK,EAAP,EAAd;AACA,UAAK,KAAL,CAAW,OAAX;AACD,IA/H8B;AAiI/B,iBAjI+B,4BAiId;AAAA,mBACmB,KAAK,KADxB;AAAA,SACP,SADO,WACP,SADO;AAAA,SACI,UADJ,WACI,UADJ;;AAEf,SAAI,CAAC,UAAL,EAAiB;AACf,cAAO,IAAP;AACD;AACD,YAAQ;AACN,kBAAc,SAAd,eADM;AAEN,aAAK,QAFC;AAGN,cAAO,KAAK,KAAL,CAAW,SAHZ;AAIN,oBAAa,KAAK;AAJZ,OAAR;AAMD,IA5I8B;AA8I/B,gBA9I+B,2BA8If;AACd,YAAO,KAAK,KAAL,CAAW,KAAX,IAAoB,KAAK,KAAL,CAAW,gBAAtC;AACD,IAhJ8B;AAkJ/B,WAlJ+B,sBAkJpB;AAAA,mBAC0B,KAAK,KAD/B;AAAA,SACD,SADC,WACD,SADC;AAAA,SACU,WADV,WACU,WADV;AAAA,kBAEgB,KAAK,KAFrB;AAAA,SAED,OAFC,UAED,OAFC;AAAA,SAEQ,GAFR,UAEQ,GAFR;;AAGT,SAAM,eAAe,UAAa,SAAb,sBAAyC,EAA9D;AACA,YAAQ;AACN,kBAAc,SAAd,gBAAkC,YAD5B;AAEN,YAAI,OAFE;AAGN,kBAAW,KAAK,SAHV;AAIN,cAAO,GAJD;AAKN,oBAAa,WALP;AAMN,iBAAU,KAAK;AANT,OAAR;AAQD,IA9J8B;AAgK/B,SAhK+B,oBAgKtB;AAAA,SACC,SADD,GACe,KAAK,KADpB,CACC,SADD;;AAEP,YACE;AAAA;AAAA,SAAK,WAAc,SAAd,gBAAL;AACG,YAAK,QAAL,EADH;AAEG,YAAK,cAAL;AAFH,MADF;AAMD;AAxK8B,EAAlB,CAAf;;mBA2Ke,M;;;;;;;;;;;;;AC9Kf;;;;AACA;;;;;;AAEA,KAAM,eAAe,SAAf,YAAe,CAAC,MAAD,EAAS,eAAT,EAA6B;AAChD,OAAI,aAAW,MAAf;AACA,OAAI,SAAS,EAAb,EAAiB;AACf,mBAAY,MAAZ;AACD;;AAED,OAAI,WAAW,KAAf;AACA,OAAI,mBAAmB,gBAAgB,OAAhB,CAAwB,MAAxB,KAAmC,CAA1D,EAA6D;AAC3D,gBAAW,IAAX;AACD;;AAED,UAAO;AACL,iBADK;AAEL;AAFK,IAAP;AAID,EAfD;;AAiBA,KAAM,WAAW,gBAAM,WAAN,CAAkB;AAAA;;AACjC,cAAW;AACT,aAAQ,iBAAU,MADT;AAET,uBAAkB,iBAAU,MAFnB;AAGT,gBAAW,iBAAU,MAHZ;AAIT,YAAO,iBAAU,MAJR;AAKT,eAAU,iBAAU,IALX;AAMT,eAAU,iBAAU,IANX;AAOT,iBAAY,iBAAU,IAPb;AAQT,kBAAa,iBAAU,KARd;AAST,oBAAe,iBAAU,KAThB;AAUT,oBAAe,iBAAU,KAVhB;AAWT,oBAAe,iBAAU,IAXhB;AAYT,sBAAiB,iBAAU,IAZlB;AAaT,sBAAiB,iBAAU,IAblB;AAcT,iCAA4B,iBAAU;AAd7B,IADsB;;AAkBjC,eAlBiC,wBAkBpB,IAlBoB,EAkBd,SAlBc,EAkBH;AAAA,kBACW,KAAK,KADhB;AAAA,SACpB,QADoB,UACpB,QADoB;AAAA,SACV,gBADU,UACV,gBADU;;AAE5B,SAAM,QAAQ,CAAC,KAAK,KAAL,CAAW,KAAX,IAAoB,gBAArB,EAAuC,KAAvC,EAAd;AACA,SAAI,SAAS,MAAb,EAAqB;AACnB,aAAM,IAAN,CAAW,SAAX;AACD,MAFD,MAEO,IAAI,SAAS,QAAb,EAAuB;AAC5B,aAAM,MAAN,CAAa,SAAb;AACD,MAFM,MAEA;AACL,aAAM,MAAN,CAAa,SAAb;AACD;AACD,cAAS,KAAT;AACD,IA7BgC;AA+BjC,qBA/BiC,8BA+Bd,KA/Bc,EA+BP;AACxB,UAAK,KAAL,CAAW,0BAAX,CAAsC,KAAtC;AACD,IAjCgC;AAmCjC,gBAnCiC,yBAmCnB,IAnCmB,EAmCb;AAAA,mBAC0C,KAAK,KAD/C;AAAA,SACV,SADU,WACV,SADU;AAAA,SACC,WADD,WACC,WADD;AAAA,SACc,aADd,WACc,aADd;AAAA,SAC6B,QAD7B,WAC6B,QAD7B;;AAElB,SAAI,CAAC,QAAL,EAAe;AACb,cAAO,IAAP;AACD;AACD,SAAM,kBAAkB,eAAxB;;AAEA,YACE;AACE,kBAAW,SADb;AAEE,gBAAS,YAAY,GAAZ,CAAgB;AAAA,gBAAU,aAAa,MAAb,EAAqB,eAArB,CAAV;AAAA,QAAhB,CAFX;AAGE,sBAAe,YAAY,OAAZ,CAAoB,IAApB,CAHjB;AAIE,aAAK,MAJP;AAKE,iBAAU,KAAK,YALjB;AAME,qBAAc,KAAK,kBAAL,CAAwB,IAAxB,CAA6B,IAA7B,EAAmC,MAAnC;AANhB,OADF;AAUD,IApDgC;AAsDjC,kBAtDiC,2BAsDjB,MAtDiB,EAsDT;AAAA,mBACkD,KAAK,KADvD;AAAA,SACd,SADc,WACd,SADc;AAAA,SACH,aADG,WACH,aADG;AAAA,SACY,eADZ,WACY,eADZ;AAAA,SAC6B,gBAD7B,WAC6B,gBAD7B;;AAEtB,SAAM,QAAQ,KAAK,KAAL,CAAW,KAAX,IAAoB,gBAAlC;AACA,SAAM,kBAAkB,gBAAgB,MAAM,IAAN,EAAhB,CAAxB;;AAEA,YACE;AACE,kBAAW,SADb;AAEE,gBAAS,cAAc,GAAd,CAAkB;AAAA,gBAAU,aAAa,MAAb,EAAqB,eAArB,CAAV;AAAA,QAAlB,CAFX;AAGE,sBAAe,cAAc,OAAd,CAAsB,MAAtB,CAHjB;AAIE,aAAK,QAJP;AAKE,iBAAU,KAAK,YALjB;AAME,qBAAc,KAAK,kBAAL,CAAwB,IAAxB,CAA6B,IAA7B,EAAmC,QAAnC;AANhB,OADF;AAUD,IArEgC;AAuEjC,kBAvEiC,2BAuEjB,MAvEiB,EAuET;AAAA,mBAC8D,KAAK,KADnE;AAAA,SACd,SADc,WACd,SADc;AAAA,SACH,aADG,WACH,aADG;AAAA,SACY,eADZ,WACY,eADZ;AAAA,SAC6B,UAD7B,WAC6B,UAD7B;AAAA,SACyC,gBADzC,WACyC,gBADzC;;AAEtB,SAAI,CAAC,UAAL,EAAiB;AACf,cAAO,IAAP;AACD;AACD,SAAM,QAAQ,KAAK,KAAL,CAAW,KAAX,IAAoB,gBAAlC;AACA,SAAM,kBAAkB,gBAAgB,MAAM,IAAN,EAAhB,EAA8B,MAAM,MAAN,EAA9B,CAAxB;;AAEA,YACE;AACE,kBAAW,SADb;AAEE,gBAAS,cAAc,GAAd,CAAkB;AAAA,gBAAU,aAAa,MAAb,EAAqB,eAArB,CAAV;AAAA,QAAlB,CAFX;AAGE,sBAAe,cAAc,OAAd,CAAsB,MAAtB,CAHjB;AAIE,aAAK,QAJP;AAKE,iBAAU,KAAK,YALjB;AAME,qBAAc,KAAK,kBAAL,CAAwB,IAAxB,CAA6B,IAA7B,EAAmC,QAAnC;AANhB,OADF;AAUD,IAzFgC;AA2FjC,SA3FiC,oBA2FxB;AAAA,mBACiC,KAAK,KADtC;AAAA,SACC,SADD,WACC,SADD;AAAA,SACY,gBADZ,WACY,gBADZ;;AAEP,SAAM,QAAQ,KAAK,KAAL,CAAW,KAAX,IAAoB,gBAAlC;AACA,YACE;AAAA;AAAA,SAAK,WAAc,SAAd,cAAL;AACG,YAAK,aAAL,CAAmB,MAAM,IAAN,EAAnB,CADH;AAEG,YAAK,eAAL,CAAqB,MAAM,MAAN,EAArB,CAFH;AAGG,YAAK,eAAL,CAAqB,MAAM,MAAN,EAArB;AAHH,MADF;AAOD;AArGgC,EAAlB,CAAjB;;mBAwGe,Q;;;;;;;;;;;;;;;;;AC5Hf;;;;AACA;;;;AACA;;;;;;AAEA,KAAM,WAAW,SAAX,QAAW,CAAC,OAAD,EAAU,EAAV,EAAc,QAAd,EAA2B;AAC1C,OAAM,wBAAwB,OAAO,qBAAP,IAC5B,SAAS,4BAAT,GAAwC;AACtC,YAAO,WAAW,UAAU,CAAV,CAAX,EAAyB,EAAzB,CAAP;AACD,IAHH;AAIA;AACA,OAAI,YAAY,CAAhB,EAAmB;AACjB,aAAQ,SAAR,GAAoB,EAApB;AACA;AACD;AACD,OAAM,aAAa,KAAK,QAAQ,SAAhC;AACA,OAAM,UAAU,aAAa,QAAb,GAAwB,EAAxC;;AAEA,yBAAsB,YAAM;AAC1B,aAAQ,SAAR,GAAoB,QAAQ,SAAR,GAAoB,OAAxC;AACA,SAAI,QAAQ,SAAR,KAAsB,EAA1B,EAA8B;AAC9B,cAAS,OAAT,EAAkB,EAAlB,EAAsB,WAAW,EAAjC;AACD,IAJD;AAKD,EAlBD;;AAoBA,KAAM,SAAS,gBAAM,WAAN,CAAkB;AAAA;;AAC/B,cAAW;AACT,gBAAW,iBAAU,MADZ;AAET,cAAS,iBAAU,KAFV;AAGT,oBAAe,iBAAU,MAHhB;AAIT,WAAM,iBAAU,MAJP;AAKT,eAAU,iBAAU,IALX;AAMT,mBAAc,iBAAU;AANf,IADoB;;AAU/B,oBAV+B,+BAUX;AAClB;AACA,UAAK,gBAAL,CAAsB,CAAtB;AACD,IAb8B;AAe/B,qBAf+B,8BAeZ,SAfY,EAeD;AAC5B;AACA,SAAI,UAAU,aAAV,KAA4B,KAAK,KAAL,CAAW,aAA3C,EAA0D;AACxD,YAAK,gBAAL,CAAsB,GAAtB;AACD;AACF,IApB8B;AAsB/B,WAtB+B,oBAsBtB,KAtBsB,EAsBf;AAAA,kBACa,KAAK,KADlB;AAAA,SACN,QADM,UACN,QADM;AAAA,SACI,IADJ,UACI,IADJ;;AAEd,cAAS,IAAT,EAAe,KAAf;AACD,IAzB8B;AA2B/B,aA3B+B,wBA2BlB;AAAA;;AAAA,mBACmC,KAAK,KADxC;AAAA,SACH,OADG,WACH,OADG;AAAA,SACM,aADN,WACM,aADN;AAAA,SACqB,SADrB,WACqB,SADrB;;AAEX,YAAO,QAAQ,GAAR,CAAY,UAAC,IAAD,EAAO,KAAP,EAAiB;AAAA;;AAClC,WAAM,MAAM,wFACN,SADM,8BAC+B,kBAAkB,KADjD,8CAEN,SAFM,8BAE+B,KAAK,QAFpC,gBAAZ;AAIA,WAAI,UAAU,IAAd;AACA,WAAI,CAAC,KAAK,QAAV,EAAoB;AAClB,mBAAU,MAAK,QAAL,CAAc,IAAd,QAAyB,CAAC,KAAK,KAA/B,CAAV;AACD;AACD,cAAQ;AAAA;AAAA;AACN,sBAAW,GADL;AAEN,gBAAK,KAFC;AAGN,oBAAS,OAHH;AAIN,qBAAU,KAAK;AAJT;AAML,cAAK;AANA,QAAR;AAQD,MAjBM,CAAP;AAkBD,IA/C8B;AAiD/B,mBAjD+B,4BAiDd,QAjDc,EAiDJ;AACzB;AACA,SAAM,SAAS,mBAAS,WAAT,CAAqB,IAArB,CAAf;AACA,SAAM,OAAO,mBAAS,WAAT,CAAqB,KAAK,IAAL,CAAU,IAA/B,CAAb;AACA,SAAI,QAAQ,KAAK,KAAL,CAAW,aAAvB;AACA,SAAI,QAAQ,CAAZ,EAAe;AACb,eAAQ,CAAR;AACD;AACD,SAAM,YAAY,KAAK,QAAL,CAAc,KAAd,CAAlB;AACA,SAAM,KAAK,UAAU,SAArB;AACA,cAAS,MAAT,EAAiB,EAAjB,EAAqB,QAArB;AACD,IA5D8B;AA8D/B,SA9D+B,oBA8DtB;AACP,SAAI,KAAK,KAAL,CAAW,OAAX,CAAmB,MAAnB,KAA8B,CAAlC,EAAqC;AACnC,cAAO,IAAP;AACD;;AAHM,SAKC,SALD,GAKe,KAAK,KALpB,CAKC,SALD;;;AAOP,YACE;AAAA;AAAA;AACE,oBAAc,SAAd,YADF;AAEE,uBAAc,KAAK,KAAL,CAAW;AAF3B;AAIE;AAAA;AAAA,WAAI,KAAI,MAAR;AAAgB,cAAK,UAAL;AAAhB;AAJF,MADF;AAQD;AA7E8B,EAAlB,CAAf;;mBAgFe,M;;;;;;;ACxGf;;AAEA;;AAEA;;AAEA;;AAEA,uCAAsC,uCAAuC,gBAAgB;;AAE7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;;AAEA;AACA,G;;;;;;ACvBA,mBAAkB,yD;;;;;;ACAlB;AACA;AACA;AACA;AACA,G;;;;;;ACJA;AACA;AACA,uEAAuE,2CAA0C,E;;;;;;ACFjH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAmE;AACnE;AACA,sFAAqF;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,gDAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd,eAAc;AACd,eAAc;AACd,eAAc;AACd,gBAAe;AACf,gBAAe;AACf,gBAAe;AACf,iBAAgB;AAChB,0B;;;;;;AC5DA;AACA;AACA;AACA,wCAAuC,gC;;;;;;ACHvC,8BAA6B;AAC7B,sCAAqC,gC;;;;;;ACDrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,G;;;;;;ACnBA;AACA;AACA;AACA,G;;;;;;ACHA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA,G;;;;;;ACPA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG,UAAU;AACb;AACA;AACA;AACA,G;;;;;;ACfA;AACA;AACA;AACA;AACA,G;;;;;;ACJA;AACA;AACA,G;;;;;;ACFA;AACA,uEAAsE,gBAAgB,UAAU,GAAG;AACnG,EAAC,E;;;;;;ACFD;AACA;AACA,kCAAiC,QAAQ,gBAAgB,UAAU,GAAG;AACtE,EAAC,E;;;;;;ACHD;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,G;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA,G;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,G;;;;;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,G;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,iBAAgB;;AAEhB;AACA;;AAEA,kBAAiB,sBAAsB;AACvC;AACA;;AAEA;;AAEA;AACA;AACA,KAAI;AACJ;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;AACA;AACA,EAAC;;;;;;;;;;;;AC/CD,KAAM,qBAAqB;AACzB,YAAS,CADgB;AAEzB,YAAS;AAFgB,EAA3B;;AAKA,KAAM,eAAe,CAAC,CAAD,EAAI,CAAJ,CAArB;;AAEA,KAAM,aAAa;AACjB,eAAY;AACV,aAAQ,CAAC,IAAD,EAAO,IAAP,CADE;AAEV,eAAU,kBAFA;AAGV,aAAQ,CAAC,CAAD,EAAI,CAAC,CAAL,CAHE;AAIV;AAJU,IADK;AAOjB,gBAAa;AACX,aAAQ,CAAC,IAAD,EAAO,IAAP,CADG;AAEX,eAAU,kBAFC;AAGX,aAAQ,CAAC,CAAD,EAAI,CAAC,CAAL,CAHG;AAIX;AAJW,IAPI;AAajB,aAAU;AACR,aAAQ,CAAC,IAAD,EAAO,IAAP,CADA;AAER,eAAU,kBAFF;AAGR,aAAQ,CAAC,CAAD,EAAI,CAAJ,CAHA;AAIR;AAJQ,IAbO;AAmBjB,YAAS;AACP,aAAQ,CAAC,IAAD,EAAO,IAAP,CADD;AAEP,eAAU,kBAFH;AAGP,aAAQ,CAAC,CAAD,EAAI,CAAJ,CAHD;AAIP;AAJO;AAnBQ,EAAnB;;mBA2Be,U","file":"common.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tvar parentJsonpFunction = window[\"webpackJsonp\"];\n \twindow[\"webpackJsonp\"] = function webpackJsonpCallback(chunkIds, moreModules) {\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, callbacks = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(installedChunks[chunkId])\n \t\t\t\tcallbacks.push.apply(callbacks, installedChunks[chunkId]);\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules);\n \t\twhile(callbacks.length)\n \t\t\tcallbacks.shift().call(null, __webpack_require__);\n \t\tif(moreModules[0]) {\n \t\t\tinstalledModules[0] = 0;\n \t\t\treturn __webpack_require__(0);\n \t\t}\n \t};\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// \"0\" means \"already loaded\"\n \t// Array means \"loading\", array contains callbacks\n \tvar installedChunks = {\n \t\t4:0\n \t};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId, callback) {\n \t\t// \"0\" is the signal for \"already loaded\"\n \t\tif(installedChunks[chunkId] === 0)\n \t\t\treturn callback.call(null, __webpack_require__);\n\n \t\t// an array means \"currently loading\".\n \t\tif(installedChunks[chunkId] !== undefined) {\n \t\t\tinstalledChunks[chunkId].push(callback);\n \t\t} else {\n \t\t\t// start chunk loading\n \t\t\tinstalledChunks[chunkId] = [callback];\n \t\t\tvar head = document.getElementsByTagName('head')[0];\n \t\t\tvar script = document.createElement('script');\n \t\t\tscript.type = 'text/javascript';\n \t\t\tscript.charset = 'utf-8';\n \t\t\tscript.async = true;\n\n \t\t\tscript.src = __webpack_require__.p + \"\" + chunkId + \".\" + ({\"0\":\"disabled\",\"1\":\"hidden\",\"2\":\"pick-time\",\"3\":\"value-and-defaultValue\"}[chunkId]||chunkId) + \".js\";\n \t\t\thead.appendChild(script);\n \t\t}\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap e103f9e39ef481194932\n **/","// removed by extract-text-webpack-plugin\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./assets/index.less\n ** module id = 2\n ** module chunks = 4\n **/","'use strict';\n\nmodule.exports = require('./lib/React');\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/react.js\n ** module id = 3\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule React\n */\n\n'use strict';\n\nvar _assign = require('object-assign');\n\nvar ReactChildren = require('./ReactChildren');\nvar ReactComponent = require('./ReactComponent');\nvar ReactPureComponent = require('./ReactPureComponent');\nvar ReactClass = require('./ReactClass');\nvar ReactDOMFactories = require('./ReactDOMFactories');\nvar ReactElement = require('./ReactElement');\nvar ReactPropTypes = require('./ReactPropTypes');\nvar ReactVersion = require('./ReactVersion');\n\nvar onlyChild = require('./onlyChild');\nvar warning = require('fbjs/lib/warning');\n\nvar createElement = ReactElement.createElement;\nvar createFactory = ReactElement.createFactory;\nvar cloneElement = ReactElement.cloneElement;\n\nif (process.env.NODE_ENV !== 'production') {\n  var ReactElementValidator = require('./ReactElementValidator');\n  createElement = ReactElementValidator.createElement;\n  createFactory = ReactElementValidator.createFactory;\n  cloneElement = ReactElementValidator.cloneElement;\n}\n\nvar __spread = _assign;\n\nif (process.env.NODE_ENV !== 'production') {\n  var warned = false;\n  __spread = function () {\n    process.env.NODE_ENV !== 'production' ? warning(warned, 'React.__spread is deprecated and should not be used. Use ' + 'Object.assign directly or another helper function with similar ' + 'semantics. You may be seeing this warning due to your compiler. ' + 'See https://fb.me/react-spread-deprecation for more details.') : void 0;\n    warned = true;\n    return _assign.apply(null, arguments);\n  };\n}\n\nvar React = {\n\n  // Modern\n\n  Children: {\n    map: ReactChildren.map,\n    forEach: ReactChildren.forEach,\n    count: ReactChildren.count,\n    toArray: ReactChildren.toArray,\n    only: onlyChild\n  },\n\n  Component: ReactComponent,\n  PureComponent: ReactPureComponent,\n\n  createElement: createElement,\n  cloneElement: cloneElement,\n  isValidElement: ReactElement.isValidElement,\n\n  // Classic\n\n  PropTypes: ReactPropTypes,\n  createClass: ReactClass.createClass,\n  createFactory: createFactory,\n  createMixin: function (mixin) {\n    // Currently a noop. Will be used to validate and trace mixins.\n    return mixin;\n  },\n\n  // This looks DOM specific but these are actually isomorphic helpers\n  // since they are just generating DOM strings.\n  DOM: ReactDOMFactories,\n\n  version: ReactVersion,\n\n  // Deprecated hook for JSX spread, don't use this for anything.\n  __spread: __spread\n};\n\nmodule.exports = React;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/React.js\n ** module id = 4\n ** module chunks = 4\n **/","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\n(function () {\n    try {\n        cachedSetTimeout = setTimeout;\n    } catch (e) {\n        cachedSetTimeout = function () {\n            throw new Error('setTimeout is not defined');\n        }\n    }\n    try {\n        cachedClearTimeout = clearTimeout;\n    } catch (e) {\n        cachedClearTimeout = function () {\n            throw new Error('clearTimeout is not defined');\n        }\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        return setTimeout(fun, 0);\n    } else {\n        return cachedSetTimeout.call(null, fun, 0);\n    }\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        clearTimeout(marker);\n    } else {\n        cachedClearTimeout.call(null, marker);\n    }\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/process/browser.js\n ** module id = 5\n ** module chunks = 4\n **/","'use strict';\n/* eslint-disable no-unused-vars */\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc');  // eslint-disable-line\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (e) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (Object.getOwnPropertySymbols) {\n\t\t\tsymbols = Object.getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/object-assign/index.js\n ** module id = 6\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactChildren\n */\n\n'use strict';\n\nvar PooledClass = require('./PooledClass');\nvar ReactElement = require('./ReactElement');\n\nvar emptyFunction = require('fbjs/lib/emptyFunction');\nvar traverseAllChildren = require('./traverseAllChildren');\n\nvar twoArgumentPooler = PooledClass.twoArgumentPooler;\nvar fourArgumentPooler = PooledClass.fourArgumentPooler;\n\nvar userProvidedKeyEscapeRegex = /\\/+/g;\nfunction escapeUserProvidedKey(text) {\n  return ('' + text).replace(userProvidedKeyEscapeRegex, '$&/');\n}\n\n/**\n * PooledClass representing the bookkeeping associated with performing a child\n * traversal. Allows avoiding binding callbacks.\n *\n * @constructor ForEachBookKeeping\n * @param {!function} forEachFunction Function to perform traversal with.\n * @param {?*} forEachContext Context to perform context with.\n */\nfunction ForEachBookKeeping(forEachFunction, forEachContext) {\n  this.func = forEachFunction;\n  this.context = forEachContext;\n  this.count = 0;\n}\nForEachBookKeeping.prototype.destructor = function () {\n  this.func = null;\n  this.context = null;\n  this.count = 0;\n};\nPooledClass.addPoolingTo(ForEachBookKeeping, twoArgumentPooler);\n\nfunction forEachSingleChild(bookKeeping, child, name) {\n  var func = bookKeeping.func;\n  var context = bookKeeping.context;\n\n  func.call(context, child, bookKeeping.count++);\n}\n\n/**\n * Iterates through children that are typically specified as `props.children`.\n *\n * See https://facebook.github.io/react/docs/top-level-api.html#react.children.foreach\n *\n * The provided forEachFunc(child, index) will be called for each\n * leaf child.\n *\n * @param {?*} children Children tree container.\n * @param {function(*, int)} forEachFunc\n * @param {*} forEachContext Context for forEachContext.\n */\nfunction forEachChildren(children, forEachFunc, forEachContext) {\n  if (children == null) {\n    return children;\n  }\n  var traverseContext = ForEachBookKeeping.getPooled(forEachFunc, forEachContext);\n  traverseAllChildren(children, forEachSingleChild, traverseContext);\n  ForEachBookKeeping.release(traverseContext);\n}\n\n/**\n * PooledClass representing the bookkeeping associated with performing a child\n * mapping. Allows avoiding binding callbacks.\n *\n * @constructor MapBookKeeping\n * @param {!*} mapResult Object containing the ordered map of results.\n * @param {!function} mapFunction Function to perform mapping with.\n * @param {?*} mapContext Context to perform mapping with.\n */\nfunction MapBookKeeping(mapResult, keyPrefix, mapFunction, mapContext) {\n  this.result = mapResult;\n  this.keyPrefix = keyPrefix;\n  this.func = mapFunction;\n  this.context = mapContext;\n  this.count = 0;\n}\nMapBookKeeping.prototype.destructor = function () {\n  this.result = null;\n  this.keyPrefix = null;\n  this.func = null;\n  this.context = null;\n  this.count = 0;\n};\nPooledClass.addPoolingTo(MapBookKeeping, fourArgumentPooler);\n\nfunction mapSingleChildIntoContext(bookKeeping, child, childKey) {\n  var result = bookKeeping.result;\n  var keyPrefix = bookKeeping.keyPrefix;\n  var func = bookKeeping.func;\n  var context = bookKeeping.context;\n\n\n  var mappedChild = func.call(context, child, bookKeeping.count++);\n  if (Array.isArray(mappedChild)) {\n    mapIntoWithKeyPrefixInternal(mappedChild, result, childKey, emptyFunction.thatReturnsArgument);\n  } else if (mappedChild != null) {\n    if (ReactElement.isValidElement(mappedChild)) {\n      mappedChild = ReactElement.cloneAndReplaceKey(mappedChild,\n      // Keep both the (mapped) and old keys if they differ, just as\n      // traverseAllChildren used to do for objects as children\n      keyPrefix + (mappedChild.key && (!child || child.key !== mappedChild.key) ? escapeUserProvidedKey(mappedChild.key) + '/' : '') + childKey);\n    }\n    result.push(mappedChild);\n  }\n}\n\nfunction mapIntoWithKeyPrefixInternal(children, array, prefix, func, context) {\n  var escapedPrefix = '';\n  if (prefix != null) {\n    escapedPrefix = escapeUserProvidedKey(prefix) + '/';\n  }\n  var traverseContext = MapBookKeeping.getPooled(array, escapedPrefix, func, context);\n  traverseAllChildren(children, mapSingleChildIntoContext, traverseContext);\n  MapBookKeeping.release(traverseContext);\n}\n\n/**\n * Maps children that are typically specified as `props.children`.\n *\n * See https://facebook.github.io/react/docs/top-level-api.html#react.children.map\n *\n * The provided mapFunction(child, key, index) will be called for each\n * leaf child.\n *\n * @param {?*} children Children tree container.\n * @param {function(*, int)} func The map function.\n * @param {*} context Context for mapFunction.\n * @return {object} Object containing the ordered map of results.\n */\nfunction mapChildren(children, func, context) {\n  if (children == null) {\n    return children;\n  }\n  var result = [];\n  mapIntoWithKeyPrefixInternal(children, result, null, func, context);\n  return result;\n}\n\nfunction forEachSingleChildDummy(traverseContext, child, name) {\n  return null;\n}\n\n/**\n * Count the number of children that are typically specified as\n * `props.children`.\n *\n * See https://facebook.github.io/react/docs/top-level-api.html#react.children.count\n *\n * @param {?*} children Children tree container.\n * @return {number} The number of children.\n */\nfunction countChildren(children, context) {\n  return traverseAllChildren(children, forEachSingleChildDummy, null);\n}\n\n/**\n * Flatten a children object (typically specified as `props.children`) and\n * return an array with appropriately re-keyed children.\n *\n * See https://facebook.github.io/react/docs/top-level-api.html#react.children.toarray\n */\nfunction toArray(children) {\n  var result = [];\n  mapIntoWithKeyPrefixInternal(children, result, null, emptyFunction.thatReturnsArgument);\n  return result;\n}\n\nvar ReactChildren = {\n  forEach: forEachChildren,\n  map: mapChildren,\n  mapIntoWithKeyPrefixInternal: mapIntoWithKeyPrefixInternal,\n  count: countChildren,\n  toArray: toArray\n};\n\nmodule.exports = ReactChildren;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactChildren.js\n ** module id = 7\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule PooledClass\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * Static poolers. Several custom versions for each potential number of\n * arguments. A completely generic pooler is easy to implement, but would\n * require accessing the `arguments` object. In each of these, `this` refers to\n * the Class itself, not an instance. If any others are needed, simply add them\n * here, or in their own files.\n */\nvar oneArgumentPooler = function (copyFieldsFrom) {\n  var Klass = this;\n  if (Klass.instancePool.length) {\n    var instance = Klass.instancePool.pop();\n    Klass.call(instance, copyFieldsFrom);\n    return instance;\n  } else {\n    return new Klass(copyFieldsFrom);\n  }\n};\n\nvar twoArgumentPooler = function (a1, a2) {\n  var Klass = this;\n  if (Klass.instancePool.length) {\n    var instance = Klass.instancePool.pop();\n    Klass.call(instance, a1, a2);\n    return instance;\n  } else {\n    return new Klass(a1, a2);\n  }\n};\n\nvar threeArgumentPooler = function (a1, a2, a3) {\n  var Klass = this;\n  if (Klass.instancePool.length) {\n    var instance = Klass.instancePool.pop();\n    Klass.call(instance, a1, a2, a3);\n    return instance;\n  } else {\n    return new Klass(a1, a2, a3);\n  }\n};\n\nvar fourArgumentPooler = function (a1, a2, a3, a4) {\n  var Klass = this;\n  if (Klass.instancePool.length) {\n    var instance = Klass.instancePool.pop();\n    Klass.call(instance, a1, a2, a3, a4);\n    return instance;\n  } else {\n    return new Klass(a1, a2, a3, a4);\n  }\n};\n\nvar fiveArgumentPooler = function (a1, a2, a3, a4, a5) {\n  var Klass = this;\n  if (Klass.instancePool.length) {\n    var instance = Klass.instancePool.pop();\n    Klass.call(instance, a1, a2, a3, a4, a5);\n    return instance;\n  } else {\n    return new Klass(a1, a2, a3, a4, a5);\n  }\n};\n\nvar standardReleaser = function (instance) {\n  var Klass = this;\n  !(instance instanceof Klass) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Trying to release an instance into a pool of a different type.') : _prodInvariant('25') : void 0;\n  instance.destructor();\n  if (Klass.instancePool.length < Klass.poolSize) {\n    Klass.instancePool.push(instance);\n  }\n};\n\nvar DEFAULT_POOL_SIZE = 10;\nvar DEFAULT_POOLER = oneArgumentPooler;\n\n/**\n * Augments `CopyConstructor` to be a poolable class, augmenting only the class\n * itself (statically) not adding any prototypical fields. Any CopyConstructor\n * you give this may have a `poolSize` property, and will look for a\n * prototypical `destructor` on instances.\n *\n * @param {Function} CopyConstructor Constructor that can be used to reset.\n * @param {Function} pooler Customizable pooler.\n */\nvar addPoolingTo = function (CopyConstructor, pooler) {\n  var NewKlass = CopyConstructor;\n  NewKlass.instancePool = [];\n  NewKlass.getPooled = pooler || DEFAULT_POOLER;\n  if (!NewKlass.poolSize) {\n    NewKlass.poolSize = DEFAULT_POOL_SIZE;\n  }\n  NewKlass.release = standardReleaser;\n  return NewKlass;\n};\n\nvar PooledClass = {\n  addPoolingTo: addPoolingTo,\n  oneArgumentPooler: oneArgumentPooler,\n  twoArgumentPooler: twoArgumentPooler,\n  threeArgumentPooler: threeArgumentPooler,\n  fourArgumentPooler: fourArgumentPooler,\n  fiveArgumentPooler: fiveArgumentPooler\n};\n\nmodule.exports = PooledClass;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/PooledClass.js\n ** module id = 8\n ** module chunks = 4\n **/","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule reactProdInvariant\n * \n */\n'use strict';\n\n/**\n * WARNING: DO NOT manually require this module.\n * This is a replacement for `invariant(...)` used by the error code system\n * and will _only_ be required by the corresponding babel pass.\n * It always throws.\n */\n\nfunction reactProdInvariant(code) {\n  var argCount = arguments.length - 1;\n\n  var message = 'Minified React error #' + code + '; visit ' + 'http://facebook.github.io/react/docs/error-decoder.html?invariant=' + code;\n\n  for (var argIdx = 0; argIdx < argCount; argIdx++) {\n    message += '&args[]=' + encodeURIComponent(arguments[argIdx + 1]);\n  }\n\n  message += ' for the full message or use the non-minified dev environment' + ' for full errors and additional helpful warnings.';\n\n  var error = new Error(message);\n  error.name = 'Invariant Violation';\n  error.framesToPop = 1; // we don't care about reactProdInvariant's own frame\n\n  throw error;\n}\n\nmodule.exports = reactProdInvariant;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/reactProdInvariant.js\n ** module id = 9\n ** module chunks = 4\n **/","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nfunction invariant(condition, format, a, b, c, d, e, f) {\n  if (process.env.NODE_ENV !== 'production') {\n    if (format === undefined) {\n      throw new Error('invariant requires an error message argument');\n    }\n  }\n\n  if (!condition) {\n    var error;\n    if (format === undefined) {\n      error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\n    } else {\n      var args = [a, b, c, d, e, f];\n      var argIndex = 0;\n      error = new Error(format.replace(/%s/g, function () {\n        return args[argIndex++];\n      }));\n      error.name = 'Invariant Violation';\n    }\n\n    error.framesToPop = 1; // we don't care about invariant's own frame\n    throw error;\n  }\n}\n\nmodule.exports = invariant;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/fbjs/lib/invariant.js\n ** module id = 10\n ** module chunks = 4\n **/","/**\n * Copyright 2014-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactElement\n */\n\n'use strict';\n\nvar _assign = require('object-assign');\n\nvar ReactCurrentOwner = require('./ReactCurrentOwner');\n\nvar warning = require('fbjs/lib/warning');\nvar canDefineProperty = require('./canDefineProperty');\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\n// The Symbol used to tag the ReactElement type. If there is no native Symbol\n// nor polyfill, then a plain number is used for performance.\nvar REACT_ELEMENT_TYPE = typeof Symbol === 'function' && Symbol['for'] && Symbol['for']('react.element') || 0xeac7;\n\nvar RESERVED_PROPS = {\n  key: true,\n  ref: true,\n  __self: true,\n  __source: true\n};\n\nvar specialPropKeyWarningShown, specialPropRefWarningShown;\n\nfunction hasValidRef(config) {\n  if (process.env.NODE_ENV !== 'production') {\n    if (hasOwnProperty.call(config, 'ref')) {\n      var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\n      if (getter && getter.isReactWarning) {\n        return false;\n      }\n    }\n  }\n  return config.ref !== undefined;\n}\n\nfunction hasValidKey(config) {\n  if (process.env.NODE_ENV !== 'production') {\n    if (hasOwnProperty.call(config, 'key')) {\n      var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\n      if (getter && getter.isReactWarning) {\n        return false;\n      }\n    }\n  }\n  return config.key !== undefined;\n}\n\n/**\n * Factory method to create a new React element. This no longer adheres to\n * the class pattern, so do not use new to call it. Also, no instanceof check\n * will work. Instead test $$typeof field against Symbol.for('react.element') to check\n * if something is a React Element.\n *\n * @param {*} type\n * @param {*} key\n * @param {string|object} ref\n * @param {*} self A *temporary* helper to detect places where `this` is\n * different from the `owner` when React.createElement is called, so that we\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\n * functions, and as long as `this` and owner are the same, there will be no\n * change in behavior.\n * @param {*} source An annotation object (added by a transpiler or otherwise)\n * indicating filename, line number, and/or other information.\n * @param {*} owner\n * @param {*} props\n * @internal\n */\nvar ReactElement = function (type, key, ref, self, source, owner, props) {\n  var element = {\n    // This tag allow us to uniquely identify this as a React Element\n    $$typeof: REACT_ELEMENT_TYPE,\n\n    // Built-in properties that belong on the element\n    type: type,\n    key: key,\n    ref: ref,\n    props: props,\n\n    // Record the component responsible for creating this element.\n    _owner: owner\n  };\n\n  if (process.env.NODE_ENV !== 'production') {\n    // The validation flag is currently mutative. We put it on\n    // an external backing store so that we can freeze the whole object.\n    // This can be replaced with a WeakMap once they are implemented in\n    // commonly used development environments.\n    element._store = {};\n    var shadowChildren = Array.isArray(props.children) ? props.children.slice(0) : props.children;\n\n    // To make comparing ReactElements easier for testing purposes, we make\n    // the validation flag non-enumerable (where possible, which should\n    // include every environment we run tests in), so the test framework\n    // ignores it.\n    if (canDefineProperty) {\n      Object.defineProperty(element._store, 'validated', {\n        configurable: false,\n        enumerable: false,\n        writable: true,\n        value: false\n      });\n      // self and source are DEV only properties.\n      Object.defineProperty(element, '_self', {\n        configurable: false,\n        enumerable: false,\n        writable: false,\n        value: self\n      });\n      Object.defineProperty(element, '_shadowChildren', {\n        configurable: false,\n        enumerable: false,\n        writable: false,\n        value: shadowChildren\n      });\n      // Two elements created in two different places should be considered\n      // equal for testing purposes and therefore we hide it from enumeration.\n      Object.defineProperty(element, '_source', {\n        configurable: false,\n        enumerable: false,\n        writable: false,\n        value: source\n      });\n    } else {\n      element._store.validated = false;\n      element._self = self;\n      element._shadowChildren = shadowChildren;\n      element._source = source;\n    }\n    if (Object.freeze) {\n      Object.freeze(element.props);\n      Object.freeze(element);\n    }\n  }\n\n  return element;\n};\n\n/**\n * Create and return a new ReactElement of the given type.\n * See https://facebook.github.io/react/docs/top-level-api.html#react.createelement\n */\nReactElement.createElement = function (type, config, children) {\n  var propName;\n\n  // Reserved names are extracted\n  var props = {};\n\n  var key = null;\n  var ref = null;\n  var self = null;\n  var source = null;\n\n  if (config != null) {\n    if (process.env.NODE_ENV !== 'production') {\n      process.env.NODE_ENV !== 'production' ? warning(\n      /* eslint-disable no-proto */\n      config.__proto__ == null || config.__proto__ === Object.prototype,\n      /* eslint-enable no-proto */\n      'React.createElement(...): Expected props argument to be a plain object. ' + 'Properties defined in its prototype chain will be ignored.') : void 0;\n    }\n\n    if (hasValidRef(config)) {\n      ref = config.ref;\n    }\n    if (hasValidKey(config)) {\n      key = '' + config.key;\n    }\n\n    self = config.__self === undefined ? null : config.__self;\n    source = config.__source === undefined ? null : config.__source;\n    // Remaining properties are added to a new props object\n    for (propName in config) {\n      if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n        props[propName] = config[propName];\n      }\n    }\n  }\n\n  // Children can be more than one argument, and those are transferred onto\n  // the newly allocated props object.\n  var childrenLength = arguments.length - 2;\n  if (childrenLength === 1) {\n    props.children = children;\n  } else if (childrenLength > 1) {\n    var childArray = Array(childrenLength);\n    for (var i = 0; i < childrenLength; i++) {\n      childArray[i] = arguments[i + 2];\n    }\n    props.children = childArray;\n  }\n\n  // Resolve default props\n  if (type && type.defaultProps) {\n    var defaultProps = type.defaultProps;\n    for (propName in defaultProps) {\n      if (props[propName] === undefined) {\n        props[propName] = defaultProps[propName];\n      }\n    }\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\n\n    // Create dummy `key` and `ref` property to `props` to warn users against its use\n    var warnAboutAccessingKey = function () {\n      if (!specialPropKeyWarningShown) {\n        specialPropKeyWarningShown = true;\n        process.env.NODE_ENV !== 'production' ? warning(false, '%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://fb.me/react-special-props)', displayName) : void 0;\n      }\n      return undefined;\n    };\n    warnAboutAccessingKey.isReactWarning = true;\n\n    var warnAboutAccessingRef = function () {\n      if (!specialPropRefWarningShown) {\n        specialPropRefWarningShown = true;\n        process.env.NODE_ENV !== 'production' ? warning(false, '%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://fb.me/react-special-props)', displayName) : void 0;\n      }\n      return undefined;\n    };\n    warnAboutAccessingRef.isReactWarning = true;\n\n    if (typeof props.$$typeof === 'undefined' || props.$$typeof !== REACT_ELEMENT_TYPE) {\n      if (!props.hasOwnProperty('key')) {\n        Object.defineProperty(props, 'key', {\n          get: warnAboutAccessingKey,\n          configurable: true\n        });\n      }\n      if (!props.hasOwnProperty('ref')) {\n        Object.defineProperty(props, 'ref', {\n          get: warnAboutAccessingRef,\n          configurable: true\n        });\n      }\n    }\n  }\n  return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\n};\n\n/**\n * Return a function that produces ReactElements of a given type.\n * See https://facebook.github.io/react/docs/top-level-api.html#react.createfactory\n */\nReactElement.createFactory = function (type) {\n  var factory = ReactElement.createElement.bind(null, type);\n  // Expose the type on the factory and the prototype so that it can be\n  // easily accessed on elements. E.g. `<Foo />.type === Foo`.\n  // This should not be named `constructor` since this may not be the function\n  // that created the element, and it may not even be a constructor.\n  // Legacy hook TODO: Warn if this is accessed\n  factory.type = type;\n  return factory;\n};\n\nReactElement.cloneAndReplaceKey = function (oldElement, newKey) {\n  var newElement = ReactElement(oldElement.type, newKey, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, oldElement.props);\n\n  return newElement;\n};\n\n/**\n * Clone and return a new ReactElement using element as the starting point.\n * See https://facebook.github.io/react/docs/top-level-api.html#react.cloneelement\n */\nReactElement.cloneElement = function (element, config, children) {\n  var propName;\n\n  // Original props are copied\n  var props = _assign({}, element.props);\n\n  // Reserved names are extracted\n  var key = element.key;\n  var ref = element.ref;\n  // Self is preserved since the owner is preserved.\n  var self = element._self;\n  // Source is preserved since cloneElement is unlikely to be targeted by a\n  // transpiler, and the original source is probably a better indicator of the\n  // true owner.\n  var source = element._source;\n\n  // Owner will be preserved, unless ref is overridden\n  var owner = element._owner;\n\n  if (config != null) {\n    if (process.env.NODE_ENV !== 'production') {\n      process.env.NODE_ENV !== 'production' ? warning(\n      /* eslint-disable no-proto */\n      config.__proto__ == null || config.__proto__ === Object.prototype,\n      /* eslint-enable no-proto */\n      'React.cloneElement(...): Expected props argument to be a plain object. ' + 'Properties defined in its prototype chain will be ignored.') : void 0;\n    }\n\n    if (hasValidRef(config)) {\n      // Silently steal the ref from the parent.\n      ref = config.ref;\n      owner = ReactCurrentOwner.current;\n    }\n    if (hasValidKey(config)) {\n      key = '' + config.key;\n    }\n\n    // Remaining properties override existing props\n    var defaultProps;\n    if (element.type && element.type.defaultProps) {\n      defaultProps = element.type.defaultProps;\n    }\n    for (propName in config) {\n      if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n        if (config[propName] === undefined && defaultProps !== undefined) {\n          // Resolve default props\n          props[propName] = defaultProps[propName];\n        } else {\n          props[propName] = config[propName];\n        }\n      }\n    }\n  }\n\n  // Children can be more than one argument, and those are transferred onto\n  // the newly allocated props object.\n  var childrenLength = arguments.length - 2;\n  if (childrenLength === 1) {\n    props.children = children;\n  } else if (childrenLength > 1) {\n    var childArray = Array(childrenLength);\n    for (var i = 0; i < childrenLength; i++) {\n      childArray[i] = arguments[i + 2];\n    }\n    props.children = childArray;\n  }\n\n  return ReactElement(element.type, key, ref, self, source, owner, props);\n};\n\n/**\n * Verifies the object is a ReactElement.\n * See https://facebook.github.io/react/docs/top-level-api.html#react.isvalidelement\n * @param {?object} object\n * @return {boolean} True if `object` is a valid component.\n * @final\n */\nReactElement.isValidElement = function (object) {\n  return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n};\n\nReactElement.REACT_ELEMENT_TYPE = REACT_ELEMENT_TYPE;\n\nmodule.exports = ReactElement;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactElement.js\n ** module id = 11\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactCurrentOwner\n */\n\n'use strict';\n\n/**\n * Keeps track of the current owner.\n *\n * The current owner is the component who should own any components that are\n * currently being constructed.\n */\n\nvar ReactCurrentOwner = {\n\n  /**\n   * @internal\n   * @type {ReactComponent}\n   */\n  current: null\n\n};\n\nmodule.exports = ReactCurrentOwner;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactCurrentOwner.js\n ** module id = 12\n ** module chunks = 4\n **/","/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar emptyFunction = require('./emptyFunction');\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar warning = emptyFunction;\n\nif (process.env.NODE_ENV !== 'production') {\n  warning = function warning(condition, format) {\n    for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n      args[_key - 2] = arguments[_key];\n    }\n\n    if (format === undefined) {\n      throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument');\n    }\n\n    if (format.indexOf('Failed Composite propType: ') === 0) {\n      return; // Ignore CompositeComponent proptype check.\n    }\n\n    if (!condition) {\n      var argIndex = 0;\n      var message = 'Warning: ' + format.replace(/%s/g, function () {\n        return args[argIndex++];\n      });\n      if (typeof console !== 'undefined') {\n        console.error(message);\n      }\n      try {\n        // --- Welcome to debugging React ---\n        // This error was thrown as a convenience so that you can use this stack\n        // to find the callsite that caused this warning to fire.\n        throw new Error(message);\n      } catch (x) {}\n    }\n  };\n}\n\nmodule.exports = warning;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/fbjs/lib/warning.js\n ** module id = 13\n ** module chunks = 4\n **/","\"use strict\";\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * \n */\n\nfunction makeEmptyFunction(arg) {\n  return function () {\n    return arg;\n  };\n}\n\n/**\n * This function accepts and discards inputs; it has no side effects. This is\n * primarily useful idiomatically for overridable function endpoints which\n * always need to be callable, since JS lacks a null-call idiom ala Cocoa.\n */\nvar emptyFunction = function emptyFunction() {};\n\nemptyFunction.thatReturns = makeEmptyFunction;\nemptyFunction.thatReturnsFalse = makeEmptyFunction(false);\nemptyFunction.thatReturnsTrue = makeEmptyFunction(true);\nemptyFunction.thatReturnsNull = makeEmptyFunction(null);\nemptyFunction.thatReturnsThis = function () {\n  return this;\n};\nemptyFunction.thatReturnsArgument = function (arg) {\n  return arg;\n};\n\nmodule.exports = emptyFunction;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/fbjs/lib/emptyFunction.js\n ** module id = 14\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule canDefineProperty\n */\n\n'use strict';\n\nvar canDefineProperty = false;\nif (process.env.NODE_ENV !== 'production') {\n  try {\n    Object.defineProperty({}, 'x', { get: function () {} });\n    canDefineProperty = true;\n  } catch (x) {\n    // IE will fail on defineProperty\n  }\n}\n\nmodule.exports = canDefineProperty;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/canDefineProperty.js\n ** module id = 15\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule traverseAllChildren\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar ReactCurrentOwner = require('./ReactCurrentOwner');\nvar ReactElement = require('./ReactElement');\n\nvar getIteratorFn = require('./getIteratorFn');\nvar invariant = require('fbjs/lib/invariant');\nvar KeyEscapeUtils = require('./KeyEscapeUtils');\nvar warning = require('fbjs/lib/warning');\n\nvar SEPARATOR = '.';\nvar SUBSEPARATOR = ':';\n\n/**\n * TODO: Test that a single child and an array with one item have the same key\n * pattern.\n */\n\nvar didWarnAboutMaps = false;\n\n/**\n * Generate a key string that identifies a component within a set.\n *\n * @param {*} component A component that could contain a manual key.\n * @param {number} index Index that is used if a manual key is not provided.\n * @return {string}\n */\nfunction getComponentKey(component, index) {\n  // Do some typechecking here since we call this blindly. We want to ensure\n  // that we don't block potential future ES APIs.\n  if (component && typeof component === 'object' && component.key != null) {\n    // Explicit key\n    return KeyEscapeUtils.escape(component.key);\n  }\n  // Implicit key determined by the index in the set\n  return index.toString(36);\n}\n\n/**\n * @param {?*} children Children tree container.\n * @param {!string} nameSoFar Name of the key path so far.\n * @param {!function} callback Callback to invoke with each child found.\n * @param {?*} traverseContext Used to pass information throughout the traversal\n * process.\n * @return {!number} The number of children in this subtree.\n */\nfunction traverseAllChildrenImpl(children, nameSoFar, callback, traverseContext) {\n  var type = typeof children;\n\n  if (type === 'undefined' || type === 'boolean') {\n    // All of the above are perceived as null.\n    children = null;\n  }\n\n  if (children === null || type === 'string' || type === 'number' || ReactElement.isValidElement(children)) {\n    callback(traverseContext, children,\n    // If it's the only child, treat the name as if it was wrapped in an array\n    // so that it's consistent if the number of children grows.\n    nameSoFar === '' ? SEPARATOR + getComponentKey(children, 0) : nameSoFar);\n    return 1;\n  }\n\n  var child;\n  var nextName;\n  var subtreeCount = 0; // Count of children found in the current subtree.\n  var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR;\n\n  if (Array.isArray(children)) {\n    for (var i = 0; i < children.length; i++) {\n      child = children[i];\n      nextName = nextNamePrefix + getComponentKey(child, i);\n      subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\n    }\n  } else {\n    var iteratorFn = getIteratorFn(children);\n    if (iteratorFn) {\n      var iterator = iteratorFn.call(children);\n      var step;\n      if (iteratorFn !== children.entries) {\n        var ii = 0;\n        while (!(step = iterator.next()).done) {\n          child = step.value;\n          nextName = nextNamePrefix + getComponentKey(child, ii++);\n          subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\n        }\n      } else {\n        if (process.env.NODE_ENV !== 'production') {\n          var mapsAsChildrenAddendum = '';\n          if (ReactCurrentOwner.current) {\n            var mapsAsChildrenOwnerName = ReactCurrentOwner.current.getName();\n            if (mapsAsChildrenOwnerName) {\n              mapsAsChildrenAddendum = ' Check the render method of `' + mapsAsChildrenOwnerName + '`.';\n            }\n          }\n          process.env.NODE_ENV !== 'production' ? warning(didWarnAboutMaps, 'Using Maps as children is not yet fully supported. It is an ' + 'experimental feature that might be removed. Convert it to a ' + 'sequence / iterable of keyed ReactElements instead.%s', mapsAsChildrenAddendum) : void 0;\n          didWarnAboutMaps = true;\n        }\n        // Iterator will provide entry [k,v] tuples rather than values.\n        while (!(step = iterator.next()).done) {\n          var entry = step.value;\n          if (entry) {\n            child = entry[1];\n            nextName = nextNamePrefix + KeyEscapeUtils.escape(entry[0]) + SUBSEPARATOR + getComponentKey(child, 0);\n            subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\n          }\n        }\n      }\n    } else if (type === 'object') {\n      var addendum = '';\n      if (process.env.NODE_ENV !== 'production') {\n        addendum = ' If you meant to render a collection of children, use an array ' + 'instead or wrap the object using createFragment(object) from the ' + 'React add-ons.';\n        if (children._isReactElement) {\n          addendum = ' It looks like you\\'re using an element created by a different ' + 'version of React. Make sure to use only one copy of React.';\n        }\n        if (ReactCurrentOwner.current) {\n          var name = ReactCurrentOwner.current.getName();\n          if (name) {\n            addendum += ' Check the render method of `' + name + '`.';\n          }\n        }\n      }\n      var childrenString = String(children);\n      !false ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Objects are not valid as a React child (found: %s).%s', childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString, addendum) : _prodInvariant('31', childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString, addendum) : void 0;\n    }\n  }\n\n  return subtreeCount;\n}\n\n/**\n * Traverses children that are typically specified as `props.children`, but\n * might also be specified through attributes:\n *\n * - `traverseAllChildren(this.props.children, ...)`\n * - `traverseAllChildren(this.props.leftPanelChildren, ...)`\n *\n * The `traverseContext` is an optional argument that is passed through the\n * entire traversal. It can be used to store accumulations or anything else that\n * the callback might find relevant.\n *\n * @param {?*} children Children tree object.\n * @param {!function} callback To invoke upon traversing each child.\n * @param {?*} traverseContext Context for traversal.\n * @return {!number} The number of children in this subtree.\n */\nfunction traverseAllChildren(children, callback, traverseContext) {\n  if (children == null) {\n    return 0;\n  }\n\n  return traverseAllChildrenImpl(children, '', callback, traverseContext);\n}\n\nmodule.exports = traverseAllChildren;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/traverseAllChildren.js\n ** module id = 16\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getIteratorFn\n * \n */\n\n'use strict';\n\n/* global Symbol */\n\nvar ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.\n\n/**\n * Returns the iterator method function contained on the iterable object.\n *\n * Be sure to invoke the function with the iterable as context:\n *\n *     var iteratorFn = getIteratorFn(myIterable);\n *     if (iteratorFn) {\n *       var iterator = iteratorFn.call(myIterable);\n *       ...\n *     }\n *\n * @param {?object} maybeIterable\n * @return {?function}\n */\nfunction getIteratorFn(maybeIterable) {\n  var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);\n  if (typeof iteratorFn === 'function') {\n    return iteratorFn;\n  }\n}\n\nmodule.exports = getIteratorFn;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/getIteratorFn.js\n ** module id = 17\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule KeyEscapeUtils\n * \n */\n\n'use strict';\n\n/**\n * Escape and wrap key so it is safe to use as a reactid\n *\n * @param {string} key to be escaped.\n * @return {string} the escaped key.\n */\n\nfunction escape(key) {\n  var escapeRegex = /[=:]/g;\n  var escaperLookup = {\n    '=': '=0',\n    ':': '=2'\n  };\n  var escapedString = ('' + key).replace(escapeRegex, function (match) {\n    return escaperLookup[match];\n  });\n\n  return '$' + escapedString;\n}\n\n/**\n * Unescape and unwrap key for human-readable display\n *\n * @param {string} key to unescape.\n * @return {string} the unescaped key.\n */\nfunction unescape(key) {\n  var unescapeRegex = /(=0|=2)/g;\n  var unescaperLookup = {\n    '=0': '=',\n    '=2': ':'\n  };\n  var keySubstring = key[0] === '.' && key[1] === '$' ? key.substring(2) : key.substring(1);\n\n  return ('' + keySubstring).replace(unescapeRegex, function (match) {\n    return unescaperLookup[match];\n  });\n}\n\nvar KeyEscapeUtils = {\n  escape: escape,\n  unescape: unescape\n};\n\nmodule.exports = KeyEscapeUtils;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/KeyEscapeUtils.js\n ** module id = 18\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactComponent\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar ReactNoopUpdateQueue = require('./ReactNoopUpdateQueue');\n\nvar canDefineProperty = require('./canDefineProperty');\nvar emptyObject = require('fbjs/lib/emptyObject');\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\n/**\n * Base class helpers for the updating state of a component.\n */\nfunction ReactComponent(props, context, updater) {\n  this.props = props;\n  this.context = context;\n  this.refs = emptyObject;\n  // We initialize the default updater but the real one gets injected by the\n  // renderer.\n  this.updater = updater || ReactNoopUpdateQueue;\n}\n\nReactComponent.prototype.isReactComponent = {};\n\n/**\n * Sets a subset of the state. Always use this to mutate\n * state. You should treat `this.state` as immutable.\n *\n * There is no guarantee that `this.state` will be immediately updated, so\n * accessing `this.state` after calling this method may return the old value.\n *\n * There is no guarantee that calls to `setState` will run synchronously,\n * as they may eventually be batched together.  You can provide an optional\n * callback that will be executed when the call to setState is actually\n * completed.\n *\n * When a function is provided to setState, it will be called at some point in\n * the future (not synchronously). It will be called with the up to date\n * component arguments (state, props, context). These values can be different\n * from this.* because your function may be called after receiveProps but before\n * shouldComponentUpdate, and this new state, props, and context will not yet be\n * assigned to this.\n *\n * @param {object|function} partialState Next partial state or function to\n *        produce next partial state to be merged with current state.\n * @param {?function} callback Called after state is updated.\n * @final\n * @protected\n */\nReactComponent.prototype.setState = function (partialState, callback) {\n  !(typeof partialState === 'object' || typeof partialState === 'function' || partialState == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'setState(...): takes an object of state variables to update or a function which returns an object of state variables.') : _prodInvariant('85') : void 0;\n  this.updater.enqueueSetState(this, partialState);\n  if (callback) {\n    this.updater.enqueueCallback(this, callback, 'setState');\n  }\n};\n\n/**\n * Forces an update. This should only be invoked when it is known with\n * certainty that we are **not** in a DOM transaction.\n *\n * You may want to call this when you know that some deeper aspect of the\n * component's state has changed but `setState` was not called.\n *\n * This will not invoke `shouldComponentUpdate`, but it will invoke\n * `componentWillUpdate` and `componentDidUpdate`.\n *\n * @param {?function} callback Called after update is complete.\n * @final\n * @protected\n */\nReactComponent.prototype.forceUpdate = function (callback) {\n  this.updater.enqueueForceUpdate(this);\n  if (callback) {\n    this.updater.enqueueCallback(this, callback, 'forceUpdate');\n  }\n};\n\n/**\n * Deprecated APIs. These APIs used to exist on classic React classes but since\n * we would like to deprecate them, we're not going to move them over to this\n * modern base class. Instead, we define a getter that warns if it's accessed.\n */\nif (process.env.NODE_ENV !== 'production') {\n  var deprecatedAPIs = {\n    isMounted: ['isMounted', 'Instead, make sure to clean up subscriptions and pending requests in ' + 'componentWillUnmount to prevent memory leaks.'],\n    replaceState: ['replaceState', 'Refactor your code to use setState instead (see ' + 'https://github.com/facebook/react/issues/3236).']\n  };\n  var defineDeprecationWarning = function (methodName, info) {\n    if (canDefineProperty) {\n      Object.defineProperty(ReactComponent.prototype, methodName, {\n        get: function () {\n          process.env.NODE_ENV !== 'production' ? warning(false, '%s(...) is deprecated in plain JavaScript React classes. %s', info[0], info[1]) : void 0;\n          return undefined;\n        }\n      });\n    }\n  };\n  for (var fnName in deprecatedAPIs) {\n    if (deprecatedAPIs.hasOwnProperty(fnName)) {\n      defineDeprecationWarning(fnName, deprecatedAPIs[fnName]);\n    }\n  }\n}\n\nmodule.exports = ReactComponent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactComponent.js\n ** module id = 19\n ** module chunks = 4\n **/","/**\n * Copyright 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactNoopUpdateQueue\n */\n\n'use strict';\n\nvar warning = require('fbjs/lib/warning');\n\nfunction warnNoop(publicInstance, callerName) {\n  if (process.env.NODE_ENV !== 'production') {\n    var constructor = publicInstance.constructor;\n    process.env.NODE_ENV !== 'production' ? warning(false, '%s(...): Can only update a mounted or mounting component. ' + 'This usually means you called %s() on an unmounted component. ' + 'This is a no-op. Please check the code for the %s component.', callerName, callerName, constructor && (constructor.displayName || constructor.name) || 'ReactClass') : void 0;\n  }\n}\n\n/**\n * This is the abstract API for an update queue.\n */\nvar ReactNoopUpdateQueue = {\n\n  /**\n   * Checks whether or not this composite component is mounted.\n   * @param {ReactClass} publicInstance The instance we want to test.\n   * @return {boolean} True if mounted, false otherwise.\n   * @protected\n   * @final\n   */\n  isMounted: function (publicInstance) {\n    return false;\n  },\n\n  /**\n   * Enqueue a callback that will be executed after all the pending updates\n   * have processed.\n   *\n   * @param {ReactClass} publicInstance The instance to use as `this` context.\n   * @param {?function} callback Called after state is updated.\n   * @internal\n   */\n  enqueueCallback: function (publicInstance, callback) {},\n\n  /**\n   * Forces an update. This should only be invoked when it is known with\n   * certainty that we are **not** in a DOM transaction.\n   *\n   * You may want to call this when you know that some deeper aspect of the\n   * component's state has changed but `setState` was not called.\n   *\n   * This will not invoke `shouldComponentUpdate`, but it will invoke\n   * `componentWillUpdate` and `componentDidUpdate`.\n   *\n   * @param {ReactClass} publicInstance The instance that should rerender.\n   * @internal\n   */\n  enqueueForceUpdate: function (publicInstance) {\n    warnNoop(publicInstance, 'forceUpdate');\n  },\n\n  /**\n   * Replaces all of the state. Always use this or `setState` to mutate state.\n   * You should treat `this.state` as immutable.\n   *\n   * There is no guarantee that `this.state` will be immediately updated, so\n   * accessing `this.state` after calling this method may return the old value.\n   *\n   * @param {ReactClass} publicInstance The instance that should rerender.\n   * @param {object} completeState Next state.\n   * @internal\n   */\n  enqueueReplaceState: function (publicInstance, completeState) {\n    warnNoop(publicInstance, 'replaceState');\n  },\n\n  /**\n   * Sets a subset of the state. This only exists because _pendingState is\n   * internal. This provides a merging strategy that is not available to deep\n   * properties which is confusing. TODO: Expose pendingState or don't use it\n   * during the merge.\n   *\n   * @param {ReactClass} publicInstance The instance that should rerender.\n   * @param {object} partialState Next partial state to be merged with state.\n   * @internal\n   */\n  enqueueSetState: function (publicInstance, partialState) {\n    warnNoop(publicInstance, 'setState');\n  }\n};\n\nmodule.exports = ReactNoopUpdateQueue;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactNoopUpdateQueue.js\n ** module id = 20\n ** module chunks = 4\n **/","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar emptyObject = {};\n\nif (process.env.NODE_ENV !== 'production') {\n  Object.freeze(emptyObject);\n}\n\nmodule.exports = emptyObject;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/fbjs/lib/emptyObject.js\n ** module id = 21\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactPureComponent\n */\n\n'use strict';\n\nvar _assign = require('object-assign');\n\nvar ReactComponent = require('./ReactComponent');\nvar ReactNoopUpdateQueue = require('./ReactNoopUpdateQueue');\n\nvar emptyObject = require('fbjs/lib/emptyObject');\n\n/**\n * Base class helpers for the updating state of a component.\n */\nfunction ReactPureComponent(props, context, updater) {\n  // Duplicated from ReactComponent.\n  this.props = props;\n  this.context = context;\n  this.refs = emptyObject;\n  // We initialize the default updater but the real one gets injected by the\n  // renderer.\n  this.updater = updater || ReactNoopUpdateQueue;\n}\n\nfunction ComponentDummy() {}\nComponentDummy.prototype = ReactComponent.prototype;\nReactPureComponent.prototype = new ComponentDummy();\nReactPureComponent.prototype.constructor = ReactPureComponent;\n// Avoid an extra prototype jump for these methods.\n_assign(ReactPureComponent.prototype, ReactComponent.prototype);\nReactPureComponent.prototype.isPureReactComponent = true;\n\nmodule.exports = ReactPureComponent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactPureComponent.js\n ** module id = 22\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactClass\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant'),\n    _assign = require('object-assign');\n\nvar ReactComponent = require('./ReactComponent');\nvar ReactElement = require('./ReactElement');\nvar ReactPropTypeLocations = require('./ReactPropTypeLocations');\nvar ReactPropTypeLocationNames = require('./ReactPropTypeLocationNames');\nvar ReactNoopUpdateQueue = require('./ReactNoopUpdateQueue');\n\nvar emptyObject = require('fbjs/lib/emptyObject');\nvar invariant = require('fbjs/lib/invariant');\nvar keyMirror = require('fbjs/lib/keyMirror');\nvar keyOf = require('fbjs/lib/keyOf');\nvar warning = require('fbjs/lib/warning');\n\nvar MIXINS_KEY = keyOf({ mixins: null });\n\n/**\n * Policies that describe methods in `ReactClassInterface`.\n */\nvar SpecPolicy = keyMirror({\n  /**\n   * These methods may be defined only once by the class specification or mixin.\n   */\n  DEFINE_ONCE: null,\n  /**\n   * These methods may be defined by both the class specification and mixins.\n   * Subsequent definitions will be chained. These methods must return void.\n   */\n  DEFINE_MANY: null,\n  /**\n   * These methods are overriding the base class.\n   */\n  OVERRIDE_BASE: null,\n  /**\n   * These methods are similar to DEFINE_MANY, except we assume they return\n   * objects. We try to merge the keys of the return values of all the mixed in\n   * functions. If there is a key conflict we throw.\n   */\n  DEFINE_MANY_MERGED: null\n});\n\nvar injectedMixins = [];\n\n/**\n * Composite components are higher-level components that compose other composite\n * or host components.\n *\n * To create a new type of `ReactClass`, pass a specification of\n * your new class to `React.createClass`. The only requirement of your class\n * specification is that you implement a `render` method.\n *\n *   var MyComponent = React.createClass({\n *     render: function() {\n *       return <div>Hello World</div>;\n *     }\n *   });\n *\n * The class specification supports a specific protocol of methods that have\n * special meaning (e.g. `render`). See `ReactClassInterface` for\n * more the comprehensive protocol. Any other properties and methods in the\n * class specification will be available on the prototype.\n *\n * @interface ReactClassInterface\n * @internal\n */\nvar ReactClassInterface = {\n\n  /**\n   * An array of Mixin objects to include when defining your component.\n   *\n   * @type {array}\n   * @optional\n   */\n  mixins: SpecPolicy.DEFINE_MANY,\n\n  /**\n   * An object containing properties and methods that should be defined on\n   * the component's constructor instead of its prototype (static methods).\n   *\n   * @type {object}\n   * @optional\n   */\n  statics: SpecPolicy.DEFINE_MANY,\n\n  /**\n   * Definition of prop types for this component.\n   *\n   * @type {object}\n   * @optional\n   */\n  propTypes: SpecPolicy.DEFINE_MANY,\n\n  /**\n   * Definition of context types for this component.\n   *\n   * @type {object}\n   * @optional\n   */\n  contextTypes: SpecPolicy.DEFINE_MANY,\n\n  /**\n   * Definition of context types this component sets for its children.\n   *\n   * @type {object}\n   * @optional\n   */\n  childContextTypes: SpecPolicy.DEFINE_MANY,\n\n  // ==== Definition methods ====\n\n  /**\n   * Invoked when the component is mounted. Values in the mapping will be set on\n   * `this.props` if that prop is not specified (i.e. using an `in` check).\n   *\n   * This method is invoked before `getInitialState` and therefore cannot rely\n   * on `this.state` or use `this.setState`.\n   *\n   * @return {object}\n   * @optional\n   */\n  getDefaultProps: SpecPolicy.DEFINE_MANY_MERGED,\n\n  /**\n   * Invoked once before the component is mounted. The return value will be used\n   * as the initial value of `this.state`.\n   *\n   *   getInitialState: function() {\n   *     return {\n   *       isOn: false,\n   *       fooBaz: new BazFoo()\n   *     }\n   *   }\n   *\n   * @return {object}\n   * @optional\n   */\n  getInitialState: SpecPolicy.DEFINE_MANY_MERGED,\n\n  /**\n   * @return {object}\n   * @optional\n   */\n  getChildContext: SpecPolicy.DEFINE_MANY_MERGED,\n\n  /**\n   * Uses props from `this.props` and state from `this.state` to render the\n   * structure of the component.\n   *\n   * No guarantees are made about when or how often this method is invoked, so\n   * it must not have side effects.\n   *\n   *   render: function() {\n   *     var name = this.props.name;\n   *     return <div>Hello, {name}!</div>;\n   *   }\n   *\n   * @return {ReactComponent}\n   * @nosideeffects\n   * @required\n   */\n  render: SpecPolicy.DEFINE_ONCE,\n\n  // ==== Delegate methods ====\n\n  /**\n   * Invoked when the component is initially created and about to be mounted.\n   * This may have side effects, but any external subscriptions or data created\n   * by this method must be cleaned up in `componentWillUnmount`.\n   *\n   * @optional\n   */\n  componentWillMount: SpecPolicy.DEFINE_MANY,\n\n  /**\n   * Invoked when the component has been mounted and has a DOM representation.\n   * However, there is no guarantee that the DOM node is in the document.\n   *\n   * Use this as an opportunity to operate on the DOM when the component has\n   * been mounted (initialized and rendered) for the first time.\n   *\n   * @param {DOMElement} rootNode DOM element representing the component.\n   * @optional\n   */\n  componentDidMount: SpecPolicy.DEFINE_MANY,\n\n  /**\n   * Invoked before the component receives new props.\n   *\n   * Use this as an opportunity to react to a prop transition by updating the\n   * state using `this.setState`. Current props are accessed via `this.props`.\n   *\n   *   componentWillReceiveProps: function(nextProps, nextContext) {\n   *     this.setState({\n   *       likesIncreasing: nextProps.likeCount > this.props.likeCount\n   *     });\n   *   }\n   *\n   * NOTE: There is no equivalent `componentWillReceiveState`. An incoming prop\n   * transition may cause a state change, but the opposite is not true. If you\n   * need it, you are probably looking for `componentWillUpdate`.\n   *\n   * @param {object} nextProps\n   * @optional\n   */\n  componentWillReceiveProps: SpecPolicy.DEFINE_MANY,\n\n  /**\n   * Invoked while deciding if the component should be updated as a result of\n   * receiving new props, state and/or context.\n   *\n   * Use this as an opportunity to `return false` when you're certain that the\n   * transition to the new props/state/context will not require a component\n   * update.\n   *\n   *   shouldComponentUpdate: function(nextProps, nextState, nextContext) {\n   *     return !equal(nextProps, this.props) ||\n   *       !equal(nextState, this.state) ||\n   *       !equal(nextContext, this.context);\n   *   }\n   *\n   * @param {object} nextProps\n   * @param {?object} nextState\n   * @param {?object} nextContext\n   * @return {boolean} True if the component should update.\n   * @optional\n   */\n  shouldComponentUpdate: SpecPolicy.DEFINE_ONCE,\n\n  /**\n   * Invoked when the component is about to update due to a transition from\n   * `this.props`, `this.state` and `this.context` to `nextProps`, `nextState`\n   * and `nextContext`.\n   *\n   * Use this as an opportunity to perform preparation before an update occurs.\n   *\n   * NOTE: You **cannot** use `this.setState()` in this method.\n   *\n   * @param {object} nextProps\n   * @param {?object} nextState\n   * @param {?object} nextContext\n   * @param {ReactReconcileTransaction} transaction\n   * @optional\n   */\n  componentWillUpdate: SpecPolicy.DEFINE_MANY,\n\n  /**\n   * Invoked when the component's DOM representation has been updated.\n   *\n   * Use this as an opportunity to operate on the DOM when the component has\n   * been updated.\n   *\n   * @param {object} prevProps\n   * @param {?object} prevState\n   * @param {?object} prevContext\n   * @param {DOMElement} rootNode DOM element representing the component.\n   * @optional\n   */\n  componentDidUpdate: SpecPolicy.DEFINE_MANY,\n\n  /**\n   * Invoked when the component is about to be removed from its parent and have\n   * its DOM representation destroyed.\n   *\n   * Use this as an opportunity to deallocate any external resources.\n   *\n   * NOTE: There is no `componentDidUnmount` since your component will have been\n   * destroyed by that point.\n   *\n   * @optional\n   */\n  componentWillUnmount: SpecPolicy.DEFINE_MANY,\n\n  // ==== Advanced methods ====\n\n  /**\n   * Updates the component's currently mounted DOM representation.\n   *\n   * By default, this implements React's rendering and reconciliation algorithm.\n   * Sophisticated clients may wish to override this.\n   *\n   * @param {ReactReconcileTransaction} transaction\n   * @internal\n   * @overridable\n   */\n  updateComponent: SpecPolicy.OVERRIDE_BASE\n\n};\n\n/**\n * Mapping from class specification keys to special processing functions.\n *\n * Although these are declared like instance properties in the specification\n * when defining classes using `React.createClass`, they are actually static\n * and are accessible on the constructor instead of the prototype. Despite\n * being static, they must be defined outside of the \"statics\" key under\n * which all other static methods are defined.\n */\nvar RESERVED_SPEC_KEYS = {\n  displayName: function (Constructor, displayName) {\n    Constructor.displayName = displayName;\n  },\n  mixins: function (Constructor, mixins) {\n    if (mixins) {\n      for (var i = 0; i < mixins.length; i++) {\n        mixSpecIntoComponent(Constructor, mixins[i]);\n      }\n    }\n  },\n  childContextTypes: function (Constructor, childContextTypes) {\n    if (process.env.NODE_ENV !== 'production') {\n      validateTypeDef(Constructor, childContextTypes, ReactPropTypeLocations.childContext);\n    }\n    Constructor.childContextTypes = _assign({}, Constructor.childContextTypes, childContextTypes);\n  },\n  contextTypes: function (Constructor, contextTypes) {\n    if (process.env.NODE_ENV !== 'production') {\n      validateTypeDef(Constructor, contextTypes, ReactPropTypeLocations.context);\n    }\n    Constructor.contextTypes = _assign({}, Constructor.contextTypes, contextTypes);\n  },\n  /**\n   * Special case getDefaultProps which should move into statics but requires\n   * automatic merging.\n   */\n  getDefaultProps: function (Constructor, getDefaultProps) {\n    if (Constructor.getDefaultProps) {\n      Constructor.getDefaultProps = createMergedResultFunction(Constructor.getDefaultProps, getDefaultProps);\n    } else {\n      Constructor.getDefaultProps = getDefaultProps;\n    }\n  },\n  propTypes: function (Constructor, propTypes) {\n    if (process.env.NODE_ENV !== 'production') {\n      validateTypeDef(Constructor, propTypes, ReactPropTypeLocations.prop);\n    }\n    Constructor.propTypes = _assign({}, Constructor.propTypes, propTypes);\n  },\n  statics: function (Constructor, statics) {\n    mixStaticSpecIntoComponent(Constructor, statics);\n  },\n  autobind: function () {} };\n\n// noop\nfunction validateTypeDef(Constructor, typeDef, location) {\n  for (var propName in typeDef) {\n    if (typeDef.hasOwnProperty(propName)) {\n      // use a warning instead of an invariant so components\n      // don't show up in prod but only in __DEV__\n      process.env.NODE_ENV !== 'production' ? warning(typeof typeDef[propName] === 'function', '%s: %s type `%s` is invalid; it must be a function, usually from ' + 'React.PropTypes.', Constructor.displayName || 'ReactClass', ReactPropTypeLocationNames[location], propName) : void 0;\n    }\n  }\n}\n\nfunction validateMethodOverride(isAlreadyDefined, name) {\n  var specPolicy = ReactClassInterface.hasOwnProperty(name) ? ReactClassInterface[name] : null;\n\n  // Disallow overriding of base class methods unless explicitly allowed.\n  if (ReactClassMixin.hasOwnProperty(name)) {\n    !(specPolicy === SpecPolicy.OVERRIDE_BASE) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClassInterface: You are attempting to override `%s` from your class specification. Ensure that your method names do not overlap with React methods.', name) : _prodInvariant('73', name) : void 0;\n  }\n\n  // Disallow defining methods more than once unless explicitly allowed.\n  if (isAlreadyDefined) {\n    !(specPolicy === SpecPolicy.DEFINE_MANY || specPolicy === SpecPolicy.DEFINE_MANY_MERGED) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClassInterface: You are attempting to define `%s` on your component more than once. This conflict may be due to a mixin.', name) : _prodInvariant('74', name) : void 0;\n  }\n}\n\n/**\n * Mixin helper which handles policy validation and reserved\n * specification keys when building React classes.\n */\nfunction mixSpecIntoComponent(Constructor, spec) {\n  if (!spec) {\n    if (process.env.NODE_ENV !== 'production') {\n      var typeofSpec = typeof spec;\n      var isMixinValid = typeofSpec === 'object' && spec !== null;\n\n      process.env.NODE_ENV !== 'production' ? warning(isMixinValid, '%s: You\\'re attempting to include a mixin that is either null ' + 'or not an object. Check the mixins included by the component, ' + 'as well as any mixins they include themselves. ' + 'Expected object but got %s.', Constructor.displayName || 'ReactClass', spec === null ? null : typeofSpec) : void 0;\n    }\n\n    return;\n  }\n\n  !(typeof spec !== 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You\\'re attempting to use a component class or function as a mixin. Instead, just use a regular object.') : _prodInvariant('75') : void 0;\n  !!ReactElement.isValidElement(spec) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You\\'re attempting to use a component as a mixin. Instead, just use a regular object.') : _prodInvariant('76') : void 0;\n\n  var proto = Constructor.prototype;\n  var autoBindPairs = proto.__reactAutoBindPairs;\n\n  // By handling mixins before any other properties, we ensure the same\n  // chaining order is applied to methods with DEFINE_MANY policy, whether\n  // mixins are listed before or after these methods in the spec.\n  if (spec.hasOwnProperty(MIXINS_KEY)) {\n    RESERVED_SPEC_KEYS.mixins(Constructor, spec.mixins);\n  }\n\n  for (var name in spec) {\n    if (!spec.hasOwnProperty(name)) {\n      continue;\n    }\n\n    if (name === MIXINS_KEY) {\n      // We have already handled mixins in a special case above.\n      continue;\n    }\n\n    var property = spec[name];\n    var isAlreadyDefined = proto.hasOwnProperty(name);\n    validateMethodOverride(isAlreadyDefined, name);\n\n    if (RESERVED_SPEC_KEYS.hasOwnProperty(name)) {\n      RESERVED_SPEC_KEYS[name](Constructor, property);\n    } else {\n      // Setup methods on prototype:\n      // The following member methods should not be automatically bound:\n      // 1. Expected ReactClass methods (in the \"interface\").\n      // 2. Overridden methods (that were mixed in).\n      var isReactClassMethod = ReactClassInterface.hasOwnProperty(name);\n      var isFunction = typeof property === 'function';\n      var shouldAutoBind = isFunction && !isReactClassMethod && !isAlreadyDefined && spec.autobind !== false;\n\n      if (shouldAutoBind) {\n        autoBindPairs.push(name, property);\n        proto[name] = property;\n      } else {\n        if (isAlreadyDefined) {\n          var specPolicy = ReactClassInterface[name];\n\n          // These cases should already be caught by validateMethodOverride.\n          !(isReactClassMethod && (specPolicy === SpecPolicy.DEFINE_MANY_MERGED || specPolicy === SpecPolicy.DEFINE_MANY)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: Unexpected spec policy %s for key %s when mixing in component specs.', specPolicy, name) : _prodInvariant('77', specPolicy, name) : void 0;\n\n          // For methods which are defined more than once, call the existing\n          // methods before calling the new property, merging if appropriate.\n          if (specPolicy === SpecPolicy.DEFINE_MANY_MERGED) {\n            proto[name] = createMergedResultFunction(proto[name], property);\n          } else if (specPolicy === SpecPolicy.DEFINE_MANY) {\n            proto[name] = createChainedFunction(proto[name], property);\n          }\n        } else {\n          proto[name] = property;\n          if (process.env.NODE_ENV !== 'production') {\n            // Add verbose displayName to the function, which helps when looking\n            // at profiling tools.\n            if (typeof property === 'function' && spec.displayName) {\n              proto[name].displayName = spec.displayName + '_' + name;\n            }\n          }\n        }\n      }\n    }\n  }\n}\n\nfunction mixStaticSpecIntoComponent(Constructor, statics) {\n  if (!statics) {\n    return;\n  }\n  for (var name in statics) {\n    var property = statics[name];\n    if (!statics.hasOwnProperty(name)) {\n      continue;\n    }\n\n    var isReserved = name in RESERVED_SPEC_KEYS;\n    !!isReserved ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You are attempting to define a reserved property, `%s`, that shouldn\\'t be on the \"statics\" key. Define it as an instance property instead; it will still be accessible on the constructor.', name) : _prodInvariant('78', name) : void 0;\n\n    var isInherited = name in Constructor;\n    !!isInherited ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You are attempting to define `%s` on your component more than once. This conflict may be due to a mixin.', name) : _prodInvariant('79', name) : void 0;\n    Constructor[name] = property;\n  }\n}\n\n/**\n * Merge two objects, but throw if both contain the same key.\n *\n * @param {object} one The first object, which is mutated.\n * @param {object} two The second object\n * @return {object} one after it has been mutated to contain everything in two.\n */\nfunction mergeIntoWithNoDuplicateKeys(one, two) {\n  !(one && two && typeof one === 'object' && typeof two === 'object') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'mergeIntoWithNoDuplicateKeys(): Cannot merge non-objects.') : _prodInvariant('80') : void 0;\n\n  for (var key in two) {\n    if (two.hasOwnProperty(key)) {\n      !(one[key] === undefined) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'mergeIntoWithNoDuplicateKeys(): Tried to merge two objects with the same key: `%s`. This conflict may be due to a mixin; in particular, this may be caused by two getInitialState() or getDefaultProps() methods returning objects with clashing keys.', key) : _prodInvariant('81', key) : void 0;\n      one[key] = two[key];\n    }\n  }\n  return one;\n}\n\n/**\n * Creates a function that invokes two functions and merges their return values.\n *\n * @param {function} one Function to invoke first.\n * @param {function} two Function to invoke second.\n * @return {function} Function that invokes the two argument functions.\n * @private\n */\nfunction createMergedResultFunction(one, two) {\n  return function mergedResult() {\n    var a = one.apply(this, arguments);\n    var b = two.apply(this, arguments);\n    if (a == null) {\n      return b;\n    } else if (b == null) {\n      return a;\n    }\n    var c = {};\n    mergeIntoWithNoDuplicateKeys(c, a);\n    mergeIntoWithNoDuplicateKeys(c, b);\n    return c;\n  };\n}\n\n/**\n * Creates a function that invokes two functions and ignores their return vales.\n *\n * @param {function} one Function to invoke first.\n * @param {function} two Function to invoke second.\n * @return {function} Function that invokes the two argument functions.\n * @private\n */\nfunction createChainedFunction(one, two) {\n  return function chainedFunction() {\n    one.apply(this, arguments);\n    two.apply(this, arguments);\n  };\n}\n\n/**\n * Binds a method to the component.\n *\n * @param {object} component Component whose method is going to be bound.\n * @param {function} method Method to be bound.\n * @return {function} The bound method.\n */\nfunction bindAutoBindMethod(component, method) {\n  var boundMethod = method.bind(component);\n  if (process.env.NODE_ENV !== 'production') {\n    boundMethod.__reactBoundContext = component;\n    boundMethod.__reactBoundMethod = method;\n    boundMethod.__reactBoundArguments = null;\n    var componentName = component.constructor.displayName;\n    var _bind = boundMethod.bind;\n    boundMethod.bind = function (newThis) {\n      for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        args[_key - 1] = arguments[_key];\n      }\n\n      // User is trying to bind() an autobound method; we effectively will\n      // ignore the value of \"this\" that the user is trying to use, so\n      // let's warn.\n      if (newThis !== component && newThis !== null) {\n        process.env.NODE_ENV !== 'production' ? warning(false, 'bind(): React component methods may only be bound to the ' + 'component instance. See %s', componentName) : void 0;\n      } else if (!args.length) {\n        process.env.NODE_ENV !== 'production' ? warning(false, 'bind(): You are binding a component method to the component. ' + 'React does this for you automatically in a high-performance ' + 'way, so you can safely remove this call. See %s', componentName) : void 0;\n        return boundMethod;\n      }\n      var reboundMethod = _bind.apply(boundMethod, arguments);\n      reboundMethod.__reactBoundContext = component;\n      reboundMethod.__reactBoundMethod = method;\n      reboundMethod.__reactBoundArguments = args;\n      return reboundMethod;\n    };\n  }\n  return boundMethod;\n}\n\n/**\n * Binds all auto-bound methods in a component.\n *\n * @param {object} component Component whose method is going to be bound.\n */\nfunction bindAutoBindMethods(component) {\n  var pairs = component.__reactAutoBindPairs;\n  for (var i = 0; i < pairs.length; i += 2) {\n    var autoBindKey = pairs[i];\n    var method = pairs[i + 1];\n    component[autoBindKey] = bindAutoBindMethod(component, method);\n  }\n}\n\n/**\n * Add more to the ReactClass base class. These are all legacy features and\n * therefore not already part of the modern ReactComponent.\n */\nvar ReactClassMixin = {\n\n  /**\n   * TODO: This will be deprecated because state should always keep a consistent\n   * type signature and the only use case for this, is to avoid that.\n   */\n  replaceState: function (newState, callback) {\n    this.updater.enqueueReplaceState(this, newState);\n    if (callback) {\n      this.updater.enqueueCallback(this, callback, 'replaceState');\n    }\n  },\n\n  /**\n   * Checks whether or not this composite component is mounted.\n   * @return {boolean} True if mounted, false otherwise.\n   * @protected\n   * @final\n   */\n  isMounted: function () {\n    return this.updater.isMounted(this);\n  }\n};\n\nvar ReactClassComponent = function () {};\n_assign(ReactClassComponent.prototype, ReactComponent.prototype, ReactClassMixin);\n\n/**\n * Module for creating composite components.\n *\n * @class ReactClass\n */\nvar ReactClass = {\n\n  /**\n   * Creates a composite component class given a class specification.\n   * See https://facebook.github.io/react/docs/top-level-api.html#react.createclass\n   *\n   * @param {object} spec Class specification (which must define `render`).\n   * @return {function} Component constructor function.\n   * @public\n   */\n  createClass: function (spec) {\n    var Constructor = function (props, context, updater) {\n      // This constructor gets overridden by mocks. The argument is used\n      // by mocks to assert on what gets mounted.\n\n      if (process.env.NODE_ENV !== 'production') {\n        process.env.NODE_ENV !== 'production' ? warning(this instanceof Constructor, 'Something is calling a React component directly. Use a factory or ' + 'JSX instead. See: https://fb.me/react-legacyfactory') : void 0;\n      }\n\n      // Wire up auto-binding\n      if (this.__reactAutoBindPairs.length) {\n        bindAutoBindMethods(this);\n      }\n\n      this.props = props;\n      this.context = context;\n      this.refs = emptyObject;\n      this.updater = updater || ReactNoopUpdateQueue;\n\n      this.state = null;\n\n      // ReactClasses doesn't have constructors. Instead, they use the\n      // getInitialState and componentWillMount methods for initialization.\n\n      var initialState = this.getInitialState ? this.getInitialState() : null;\n      if (process.env.NODE_ENV !== 'production') {\n        // We allow auto-mocks to proceed as if they're returning null.\n        if (initialState === undefined && this.getInitialState._isMockFunction) {\n          // This is probably bad practice. Consider warning here and\n          // deprecating this convenience.\n          initialState = null;\n        }\n      }\n      !(typeof initialState === 'object' && !Array.isArray(initialState)) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.getInitialState(): must return an object or null', Constructor.displayName || 'ReactCompositeComponent') : _prodInvariant('82', Constructor.displayName || 'ReactCompositeComponent') : void 0;\n\n      this.state = initialState;\n    };\n    Constructor.prototype = new ReactClassComponent();\n    Constructor.prototype.constructor = Constructor;\n    Constructor.prototype.__reactAutoBindPairs = [];\n\n    injectedMixins.forEach(mixSpecIntoComponent.bind(null, Constructor));\n\n    mixSpecIntoComponent(Constructor, spec);\n\n    // Initialize the defaultProps property after all mixins have been merged.\n    if (Constructor.getDefaultProps) {\n      Constructor.defaultProps = Constructor.getDefaultProps();\n    }\n\n    if (process.env.NODE_ENV !== 'production') {\n      // This is a tag to indicate that the use of these method names is ok,\n      // since it's used with createClass. If it's not, then it's likely a\n      // mistake so we'll warn you to use the static property, property\n      // initializer or constructor respectively.\n      if (Constructor.getDefaultProps) {\n        Constructor.getDefaultProps.isReactClassApproved = {};\n      }\n      if (Constructor.prototype.getInitialState) {\n        Constructor.prototype.getInitialState.isReactClassApproved = {};\n      }\n    }\n\n    !Constructor.prototype.render ? process.env.NODE_ENV !== 'production' ? invariant(false, 'createClass(...): Class specification must implement a `render` method.') : _prodInvariant('83') : void 0;\n\n    if (process.env.NODE_ENV !== 'production') {\n      process.env.NODE_ENV !== 'production' ? warning(!Constructor.prototype.componentShouldUpdate, '%s has a method called ' + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 'The name is phrased as a question because the function is ' + 'expected to return a value.', spec.displayName || 'A component') : void 0;\n      process.env.NODE_ENV !== 'production' ? warning(!Constructor.prototype.componentWillRecieveProps, '%s has a method called ' + 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?', spec.displayName || 'A component') : void 0;\n    }\n\n    // Reduce time spent doing lookups by setting these on the prototype.\n    for (var methodName in ReactClassInterface) {\n      if (!Constructor.prototype[methodName]) {\n        Constructor.prototype[methodName] = null;\n      }\n    }\n\n    return Constructor;\n  },\n\n  injection: {\n    injectMixin: function (mixin) {\n      injectedMixins.push(mixin);\n    }\n  }\n\n};\n\nmodule.exports = ReactClass;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactClass.js\n ** module id = 23\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactPropTypeLocations\n */\n\n'use strict';\n\nvar keyMirror = require('fbjs/lib/keyMirror');\n\nvar ReactPropTypeLocations = keyMirror({\n  prop: null,\n  context: null,\n  childContext: null\n});\n\nmodule.exports = ReactPropTypeLocations;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactPropTypeLocations.js\n ** module id = 24\n ** module chunks = 4\n **/","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @typechecks static-only\n */\n\n'use strict';\n\nvar invariant = require('./invariant');\n\n/**\n * Constructs an enumeration with keys equal to their value.\n *\n * For example:\n *\n *   var COLORS = keyMirror({blue: null, red: null});\n *   var myColor = COLORS.blue;\n *   var isColorValid = !!COLORS[myColor];\n *\n * The last line could not be performed if the values of the generated enum were\n * not equal to their keys.\n *\n *   Input:  {key1: val1, key2: val2}\n *   Output: {key1: key1, key2: key2}\n *\n * @param {object} obj\n * @return {object}\n */\nvar keyMirror = function keyMirror(obj) {\n  var ret = {};\n  var key;\n  !(obj instanceof Object && !Array.isArray(obj)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'keyMirror(...): Argument must be an object.') : invariant(false) : void 0;\n  for (key in obj) {\n    if (!obj.hasOwnProperty(key)) {\n      continue;\n    }\n    ret[key] = key;\n  }\n  return ret;\n};\n\nmodule.exports = keyMirror;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/fbjs/lib/keyMirror.js\n ** module id = 25\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactPropTypeLocationNames\n */\n\n'use strict';\n\nvar ReactPropTypeLocationNames = {};\n\nif (process.env.NODE_ENV !== 'production') {\n  ReactPropTypeLocationNames = {\n    prop: 'prop',\n    context: 'context',\n    childContext: 'child context'\n  };\n}\n\nmodule.exports = ReactPropTypeLocationNames;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactPropTypeLocationNames.js\n ** module id = 26\n ** module chunks = 4\n **/","\"use strict\";\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n/**\n * Allows extraction of a minified key. Let's the build system minify keys\n * without losing the ability to dynamically use key strings as values\n * themselves. Pass in an object with a single key/val pair and it will return\n * you the string key of that single record. Suppose you want to grab the\n * value for a key 'className' inside of an object. Key/val minification may\n * have aliased that key to be 'xa12'. keyOf({className: null}) will return\n * 'xa12' in that case. Resolve keys you want to use once at startup time, then\n * reuse those resolutions.\n */\nvar keyOf = function keyOf(oneKeyObj) {\n  var key;\n  for (key in oneKeyObj) {\n    if (!oneKeyObj.hasOwnProperty(key)) {\n      continue;\n    }\n    return key;\n  }\n  return null;\n};\n\nmodule.exports = keyOf;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/fbjs/lib/keyOf.js\n ** module id = 27\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMFactories\n */\n\n'use strict';\n\nvar ReactElement = require('./ReactElement');\n\nvar mapObject = require('fbjs/lib/mapObject');\n\n/**\n * Create a factory that creates HTML tag elements.\n *\n * @param {string} tag Tag name (e.g. `div`).\n * @private\n */\nfunction createDOMFactory(tag) {\n  if (process.env.NODE_ENV !== 'production') {\n    var ReactElementValidator = require('./ReactElementValidator');\n    return ReactElementValidator.createFactory(tag);\n  }\n  return ReactElement.createFactory(tag);\n}\n\n/**\n * Creates a mapping from supported HTML tags to `ReactDOMComponent` classes.\n * This is also accessible via `React.DOM`.\n *\n * @public\n */\nvar ReactDOMFactories = mapObject({\n  a: 'a',\n  abbr: 'abbr',\n  address: 'address',\n  area: 'area',\n  article: 'article',\n  aside: 'aside',\n  audio: 'audio',\n  b: 'b',\n  base: 'base',\n  bdi: 'bdi',\n  bdo: 'bdo',\n  big: 'big',\n  blockquote: 'blockquote',\n  body: 'body',\n  br: 'br',\n  button: 'button',\n  canvas: 'canvas',\n  caption: 'caption',\n  cite: 'cite',\n  code: 'code',\n  col: 'col',\n  colgroup: 'colgroup',\n  data: 'data',\n  datalist: 'datalist',\n  dd: 'dd',\n  del: 'del',\n  details: 'details',\n  dfn: 'dfn',\n  dialog: 'dialog',\n  div: 'div',\n  dl: 'dl',\n  dt: 'dt',\n  em: 'em',\n  embed: 'embed',\n  fieldset: 'fieldset',\n  figcaption: 'figcaption',\n  figure: 'figure',\n  footer: 'footer',\n  form: 'form',\n  h1: 'h1',\n  h2: 'h2',\n  h3: 'h3',\n  h4: 'h4',\n  h5: 'h5',\n  h6: 'h6',\n  head: 'head',\n  header: 'header',\n  hgroup: 'hgroup',\n  hr: 'hr',\n  html: 'html',\n  i: 'i',\n  iframe: 'iframe',\n  img: 'img',\n  input: 'input',\n  ins: 'ins',\n  kbd: 'kbd',\n  keygen: 'keygen',\n  label: 'label',\n  legend: 'legend',\n  li: 'li',\n  link: 'link',\n  main: 'main',\n  map: 'map',\n  mark: 'mark',\n  menu: 'menu',\n  menuitem: 'menuitem',\n  meta: 'meta',\n  meter: 'meter',\n  nav: 'nav',\n  noscript: 'noscript',\n  object: 'object',\n  ol: 'ol',\n  optgroup: 'optgroup',\n  option: 'option',\n  output: 'output',\n  p: 'p',\n  param: 'param',\n  picture: 'picture',\n  pre: 'pre',\n  progress: 'progress',\n  q: 'q',\n  rp: 'rp',\n  rt: 'rt',\n  ruby: 'ruby',\n  s: 's',\n  samp: 'samp',\n  script: 'script',\n  section: 'section',\n  select: 'select',\n  small: 'small',\n  source: 'source',\n  span: 'span',\n  strong: 'strong',\n  style: 'style',\n  sub: 'sub',\n  summary: 'summary',\n  sup: 'sup',\n  table: 'table',\n  tbody: 'tbody',\n  td: 'td',\n  textarea: 'textarea',\n  tfoot: 'tfoot',\n  th: 'th',\n  thead: 'thead',\n  time: 'time',\n  title: 'title',\n  tr: 'tr',\n  track: 'track',\n  u: 'u',\n  ul: 'ul',\n  'var': 'var',\n  video: 'video',\n  wbr: 'wbr',\n\n  // SVG\n  circle: 'circle',\n  clipPath: 'clipPath',\n  defs: 'defs',\n  ellipse: 'ellipse',\n  g: 'g',\n  image: 'image',\n  line: 'line',\n  linearGradient: 'linearGradient',\n  mask: 'mask',\n  path: 'path',\n  pattern: 'pattern',\n  polygon: 'polygon',\n  polyline: 'polyline',\n  radialGradient: 'radialGradient',\n  rect: 'rect',\n  stop: 'stop',\n  svg: 'svg',\n  text: 'text',\n  tspan: 'tspan'\n\n}, createDOMFactory);\n\nmodule.exports = ReactDOMFactories;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMFactories.js\n ** module id = 28\n ** module chunks = 4\n **/","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\n/**\n * Executes the provided `callback` once for each enumerable own property in the\n * object and constructs a new object from the results. The `callback` is\n * invoked with three arguments:\n *\n *  - the property value\n *  - the property name\n *  - the object being traversed\n *\n * Properties that are added after the call to `mapObject` will not be visited\n * by `callback`. If the values of existing properties are changed, the value\n * passed to `callback` will be the value at the time `mapObject` visits them.\n * Properties that are deleted before being visited are not visited.\n *\n * @grep function objectMap()\n * @grep function objMap()\n *\n * @param {?object} object\n * @param {function} callback\n * @param {*} context\n * @return {?object}\n */\nfunction mapObject(object, callback, context) {\n  if (!object) {\n    return null;\n  }\n  var result = {};\n  for (var name in object) {\n    if (hasOwnProperty.call(object, name)) {\n      result[name] = callback.call(context, object[name], name, object);\n    }\n  }\n  return result;\n}\n\nmodule.exports = mapObject;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/fbjs/lib/mapObject.js\n ** module id = 29\n ** module chunks = 4\n **/","/**\n * Copyright 2014-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactElementValidator\n */\n\n/**\n * ReactElementValidator provides a wrapper around a element factory\n * which validates the props passed to the element. This is intended to be\n * used only in DEV and could be replaced by a static type checker for languages\n * that support it.\n */\n\n'use strict';\n\nvar ReactCurrentOwner = require('./ReactCurrentOwner');\nvar ReactComponentTreeDevtool = require('./ReactComponentTreeDevtool');\nvar ReactElement = require('./ReactElement');\nvar ReactPropTypeLocations = require('./ReactPropTypeLocations');\n\nvar checkReactTypeSpec = require('./checkReactTypeSpec');\n\nvar canDefineProperty = require('./canDefineProperty');\nvar getIteratorFn = require('./getIteratorFn');\nvar warning = require('fbjs/lib/warning');\n\nfunction getDeclarationErrorAddendum() {\n  if (ReactCurrentOwner.current) {\n    var name = ReactCurrentOwner.current.getName();\n    if (name) {\n      return ' Check the render method of `' + name + '`.';\n    }\n  }\n  return '';\n}\n\n/**\n * Warn if there's no key explicitly set on dynamic arrays of children or\n * object keys are not valid. This allows us to keep track of children between\n * updates.\n */\nvar ownerHasKeyUseWarning = {};\n\nfunction getCurrentComponentErrorInfo(parentType) {\n  var info = getDeclarationErrorAddendum();\n\n  if (!info) {\n    var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;\n    if (parentName) {\n      info = ' Check the top-level render call using <' + parentName + '>.';\n    }\n  }\n  return info;\n}\n\n/**\n * Warn if the element doesn't have an explicit key assigned to it.\n * This element is in an array. The array could grow and shrink or be\n * reordered. All children that haven't already been validated are required to\n * have a \"key\" property assigned to it. Error statuses are cached so a warning\n * will only be shown once.\n *\n * @internal\n * @param {ReactElement} element Element that requires a key.\n * @param {*} parentType element's parent's type.\n */\nfunction validateExplicitKey(element, parentType) {\n  if (!element._store || element._store.validated || element.key != null) {\n    return;\n  }\n  element._store.validated = true;\n\n  var memoizer = ownerHasKeyUseWarning.uniqueKey || (ownerHasKeyUseWarning.uniqueKey = {});\n\n  var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\n  if (memoizer[currentComponentErrorInfo]) {\n    return;\n  }\n  memoizer[currentComponentErrorInfo] = true;\n\n  // Usually the current owner is the offender, but if it accepts children as a\n  // property, it may be the creator of the child that's responsible for\n  // assigning it a key.\n  var childOwner = '';\n  if (element && element._owner && element._owner !== ReactCurrentOwner.current) {\n    // Give the component that originally created this child.\n    childOwner = ' It was passed a child from ' + element._owner.getName() + '.';\n  }\n\n  process.env.NODE_ENV !== 'production' ? warning(false, 'Each child in an array or iterator should have a unique \"key\" prop.' + '%s%s See https://fb.me/react-warning-keys for more information.%s', currentComponentErrorInfo, childOwner, ReactComponentTreeDevtool.getCurrentStackAddendum(element)) : void 0;\n}\n\n/**\n * Ensure that every element either is passed in a static location, in an\n * array with an explicit keys property defined, or in an object literal\n * with valid key property.\n *\n * @internal\n * @param {ReactNode} node Statically passed child of any type.\n * @param {*} parentType node's parent's type.\n */\nfunction validateChildKeys(node, parentType) {\n  if (typeof node !== 'object') {\n    return;\n  }\n  if (Array.isArray(node)) {\n    for (var i = 0; i < node.length; i++) {\n      var child = node[i];\n      if (ReactElement.isValidElement(child)) {\n        validateExplicitKey(child, parentType);\n      }\n    }\n  } else if (ReactElement.isValidElement(node)) {\n    // This element was passed in a valid location.\n    if (node._store) {\n      node._store.validated = true;\n    }\n  } else if (node) {\n    var iteratorFn = getIteratorFn(node);\n    // Entry iterators provide implicit keys.\n    if (iteratorFn) {\n      if (iteratorFn !== node.entries) {\n        var iterator = iteratorFn.call(node);\n        var step;\n        while (!(step = iterator.next()).done) {\n          if (ReactElement.isValidElement(step.value)) {\n            validateExplicitKey(step.value, parentType);\n          }\n        }\n      }\n    }\n  }\n}\n\n/**\n * Given an element, validate that its props follow the propTypes definition,\n * provided by the type.\n *\n * @param {ReactElement} element\n */\nfunction validatePropTypes(element) {\n  var componentClass = element.type;\n  if (typeof componentClass !== 'function') {\n    return;\n  }\n  var name = componentClass.displayName || componentClass.name;\n  if (componentClass.propTypes) {\n    checkReactTypeSpec(componentClass.propTypes, element.props, ReactPropTypeLocations.prop, name, element, null);\n  }\n  if (typeof componentClass.getDefaultProps === 'function') {\n    process.env.NODE_ENV !== 'production' ? warning(componentClass.getDefaultProps.isReactClassApproved, 'getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.') : void 0;\n  }\n}\n\nvar ReactElementValidator = {\n\n  createElement: function (type, props, children) {\n    var validType = typeof type === 'string' || typeof type === 'function';\n    // We warn in this case but don't throw. We expect the element creation to\n    // succeed and there will likely be errors in render.\n    process.env.NODE_ENV !== 'production' ? warning(validType, 'React.createElement: type should not be null, undefined, boolean, or ' + 'number. It should be a string (for DOM elements) or a ReactClass ' + '(for composite components).%s', getDeclarationErrorAddendum()) : void 0;\n\n    var element = ReactElement.createElement.apply(this, arguments);\n\n    // The result can be nullish if a mock or a custom function is used.\n    // TODO: Drop this when these are no longer allowed as the type argument.\n    if (element == null) {\n      return element;\n    }\n\n    // Skip key warning if the type isn't valid since our key validation logic\n    // doesn't expect a non-string/function type and can throw confusing errors.\n    // We don't want exception behavior to differ between dev and prod.\n    // (Rendering will throw with a helpful message and as soon as the type is\n    // fixed, the key warnings will appear.)\n    if (validType) {\n      for (var i = 2; i < arguments.length; i++) {\n        validateChildKeys(arguments[i], type);\n      }\n    }\n\n    validatePropTypes(element);\n\n    return element;\n  },\n\n  createFactory: function (type) {\n    var validatedFactory = ReactElementValidator.createElement.bind(null, type);\n    // Legacy hook TODO: Warn if this is accessed\n    validatedFactory.type = type;\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (canDefineProperty) {\n        Object.defineProperty(validatedFactory, 'type', {\n          enumerable: false,\n          get: function () {\n            process.env.NODE_ENV !== 'production' ? warning(false, 'Factory.type is deprecated. Access the class directly ' + 'before passing it to createFactory.') : void 0;\n            Object.defineProperty(this, 'type', {\n              value: type\n            });\n            return type;\n          }\n        });\n      }\n    }\n\n    return validatedFactory;\n  },\n\n  cloneElement: function (element, props, children) {\n    var newElement = ReactElement.cloneElement.apply(this, arguments);\n    for (var i = 2; i < arguments.length; i++) {\n      validateChildKeys(arguments[i], newElement.type);\n    }\n    validatePropTypes(newElement);\n    return newElement;\n  }\n\n};\n\nmodule.exports = ReactElementValidator;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactElementValidator.js\n ** module id = 30\n ** module chunks = 4\n **/","/**\n * Copyright 2016-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactComponentTreeDevtool\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar ReactCurrentOwner = require('./ReactCurrentOwner');\n\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\nvar tree = {};\nvar unmountedIDs = {};\nvar rootIDs = {};\n\nfunction updateTree(id, update) {\n  if (!tree[id]) {\n    tree[id] = {\n      element: null,\n      parentID: null,\n      ownerID: null,\n      text: null,\n      childIDs: [],\n      displayName: 'Unknown',\n      isMounted: false,\n      updateCount: 0\n    };\n  }\n  update(tree[id]);\n}\n\nfunction purgeDeep(id) {\n  var item = tree[id];\n  if (item) {\n    var childIDs = item.childIDs;\n\n    delete tree[id];\n    childIDs.forEach(purgeDeep);\n  }\n}\n\nfunction describeComponentFrame(name, source, ownerName) {\n  return '\\n    in ' + name + (source ? ' (at ' + source.fileName.replace(/^.*[\\\\\\/]/, '') + ':' + source.lineNumber + ')' : ownerName ? ' (created by ' + ownerName + ')' : '');\n}\n\nfunction describeID(id) {\n  var name = ReactComponentTreeDevtool.getDisplayName(id);\n  var element = ReactComponentTreeDevtool.getElement(id);\n  var ownerID = ReactComponentTreeDevtool.getOwnerID(id);\n  var ownerName;\n  if (ownerID) {\n    ownerName = ReactComponentTreeDevtool.getDisplayName(ownerID);\n  }\n  process.env.NODE_ENV !== 'production' ? warning(element, 'ReactComponentTreeDevtool: Missing React element for debugID %s when ' + 'building stack', id) : void 0;\n  return describeComponentFrame(name, element && element._source, ownerName);\n}\n\nvar ReactComponentTreeDevtool = {\n  onSetDisplayName: function (id, displayName) {\n    updateTree(id, function (item) {\n      return item.displayName = displayName;\n    });\n  },\n  onSetChildren: function (id, nextChildIDs) {\n    updateTree(id, function (item) {\n      item.childIDs = nextChildIDs;\n\n      nextChildIDs.forEach(function (nextChildID) {\n        var nextChild = tree[nextChildID];\n        !nextChild ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected devtool events to fire for the child before its parent includes it in onSetChildren().') : _prodInvariant('68') : void 0;\n        !(nextChild.displayName != null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected onSetDisplayName() to fire for the child before its parent includes it in onSetChildren().') : _prodInvariant('69') : void 0;\n        !(nextChild.childIDs != null || nextChild.text != null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected onSetChildren() or onSetText() to fire for the child before its parent includes it in onSetChildren().') : _prodInvariant('70') : void 0;\n        !nextChild.isMounted ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected onMountComponent() to fire for the child before its parent includes it in onSetChildren().') : _prodInvariant('71') : void 0;\n        if (nextChild.parentID == null) {\n          nextChild.parentID = id;\n          // TODO: This shouldn't be necessary but mounting a new root during in\n          // componentWillMount currently causes not-yet-mounted components to\n          // be purged from our tree data so their parent ID is missing.\n        }\n        !(nextChild.parentID === id) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected onSetParent() and onSetChildren() to be consistent (%s has parents %s and %s).', nextChildID, nextChild.parentID, id) : _prodInvariant('72', nextChildID, nextChild.parentID, id) : void 0;\n      });\n    });\n  },\n  onSetOwner: function (id, ownerID) {\n    updateTree(id, function (item) {\n      return item.ownerID = ownerID;\n    });\n  },\n  onSetParent: function (id, parentID) {\n    updateTree(id, function (item) {\n      return item.parentID = parentID;\n    });\n  },\n  onSetText: function (id, text) {\n    updateTree(id, function (item) {\n      return item.text = text;\n    });\n  },\n  onBeforeMountComponent: function (id, element) {\n    updateTree(id, function (item) {\n      return item.element = element;\n    });\n  },\n  onBeforeUpdateComponent: function (id, element) {\n    updateTree(id, function (item) {\n      return item.element = element;\n    });\n  },\n  onMountComponent: function (id) {\n    updateTree(id, function (item) {\n      return item.isMounted = true;\n    });\n  },\n  onMountRootComponent: function (id) {\n    rootIDs[id] = true;\n  },\n  onUpdateComponent: function (id) {\n    updateTree(id, function (item) {\n      return item.updateCount++;\n    });\n  },\n  onUnmountComponent: function (id) {\n    updateTree(id, function (item) {\n      return item.isMounted = false;\n    });\n    unmountedIDs[id] = true;\n    delete rootIDs[id];\n  },\n  purgeUnmountedComponents: function () {\n    if (ReactComponentTreeDevtool._preventPurging) {\n      // Should only be used for testing.\n      return;\n    }\n\n    for (var id in unmountedIDs) {\n      purgeDeep(id);\n    }\n    unmountedIDs = {};\n  },\n  isMounted: function (id) {\n    var item = tree[id];\n    return item ? item.isMounted : false;\n  },\n  getCurrentStackAddendum: function (topElement) {\n    var info = '';\n    if (topElement) {\n      var type = topElement.type;\n      var name = typeof type === 'function' ? type.displayName || type.name : type;\n      var owner = topElement._owner;\n      info += describeComponentFrame(name || 'Unknown', topElement._source, owner && owner.getName());\n    }\n\n    var currentOwner = ReactCurrentOwner.current;\n    var id = currentOwner && currentOwner._debugID;\n\n    info += ReactComponentTreeDevtool.getStackAddendumByID(id);\n    return info;\n  },\n  getStackAddendumByID: function (id) {\n    var info = '';\n    while (id) {\n      info += describeID(id);\n      id = ReactComponentTreeDevtool.getParentID(id);\n    }\n    return info;\n  },\n  getChildIDs: function (id) {\n    var item = tree[id];\n    return item ? item.childIDs : [];\n  },\n  getDisplayName: function (id) {\n    var item = tree[id];\n    return item ? item.displayName : 'Unknown';\n  },\n  getElement: function (id) {\n    var item = tree[id];\n    return item ? item.element : null;\n  },\n  getOwnerID: function (id) {\n    var item = tree[id];\n    return item ? item.ownerID : null;\n  },\n  getParentID: function (id) {\n    var item = tree[id];\n    return item ? item.parentID : null;\n  },\n  getSource: function (id) {\n    var item = tree[id];\n    var element = item ? item.element : null;\n    var source = element != null ? element._source : null;\n    return source;\n  },\n  getText: function (id) {\n    var item = tree[id];\n    return item ? item.text : null;\n  },\n  getUpdateCount: function (id) {\n    var item = tree[id];\n    return item ? item.updateCount : 0;\n  },\n  getRootIDs: function () {\n    return Object.keys(rootIDs);\n  },\n  getRegisteredIDs: function () {\n    return Object.keys(tree);\n  }\n};\n\nmodule.exports = ReactComponentTreeDevtool;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactComponentTreeDevtool.js\n ** module id = 31\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule checkReactTypeSpec\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar ReactPropTypeLocationNames = require('./ReactPropTypeLocationNames');\nvar ReactPropTypesSecret = require('./ReactPropTypesSecret');\n\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\nvar ReactComponentTreeDevtool;\n\nif (typeof process !== 'undefined' && process.env && process.env.NODE_ENV === 'test') {\n  // Temporary hack.\n  // Inline requires don't work well with Jest:\n  // https://github.com/facebook/react/issues/7240\n  // Remove the inline requires when we don't need them anymore:\n  // https://github.com/facebook/react/pull/7178\n  ReactComponentTreeDevtool = require('./ReactComponentTreeDevtool');\n}\n\nvar loggedTypeFailures = {};\n\n/**\n * Assert that the values match with the type specs.\n * Error messages are memorized and will only be shown once.\n *\n * @param {object} typeSpecs Map of name to a ReactPropType\n * @param {object} values Runtime values that need to be type-checked\n * @param {string} location e.g. \"prop\", \"context\", \"child context\"\n * @param {string} componentName Name of the component for error messages.\n * @param {?object} element The React element that is being type-checked\n * @param {?number} debugID The React component instance that is being type-checked\n * @private\n */\nfunction checkReactTypeSpec(typeSpecs, values, location, componentName, element, debugID) {\n  for (var typeSpecName in typeSpecs) {\n    if (typeSpecs.hasOwnProperty(typeSpecName)) {\n      var error;\n      // Prop type validation may throw. In case they do, we don't want to\n      // fail the render phase where it didn't fail before. So we log it.\n      // After these have been cleaned up, we'll let them throw.\n      try {\n        // This is intentionally an invariant that gets caught. It's the same\n        // behavior as without this statement except with a better message.\n        !(typeof typeSpecs[typeSpecName] === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s: %s type `%s` is invalid; it must be a function, usually from React.PropTypes.', componentName || 'React class', ReactPropTypeLocationNames[location], typeSpecName) : _prodInvariant('84', componentName || 'React class', ReactPropTypeLocationNames[location], typeSpecName) : void 0;\n        error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret);\n      } catch (ex) {\n        error = ex;\n      }\n      process.env.NODE_ENV !== 'production' ? warning(!error || error instanceof Error, '%s: type specification of %s `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', ReactPropTypeLocationNames[location], typeSpecName, typeof error) : void 0;\n      if (error instanceof Error && !(error.message in loggedTypeFailures)) {\n        // Only monitor this failure once because there tends to be a lot of the\n        // same error.\n        loggedTypeFailures[error.message] = true;\n\n        var componentStackInfo = '';\n\n        if (process.env.NODE_ENV !== 'production') {\n          if (!ReactComponentTreeDevtool) {\n            ReactComponentTreeDevtool = require('./ReactComponentTreeDevtool');\n          }\n          if (debugID !== null) {\n            componentStackInfo = ReactComponentTreeDevtool.getStackAddendumByID(debugID);\n          } else if (element !== null) {\n            componentStackInfo = ReactComponentTreeDevtool.getCurrentStackAddendum(element);\n          }\n        }\n\n        process.env.NODE_ENV !== 'production' ? warning(false, 'Failed %s type: %s%s', location, error.message, componentStackInfo) : void 0;\n      }\n    }\n  }\n}\n\nmodule.exports = checkReactTypeSpec;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/checkReactTypeSpec.js\n ** module id = 32\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactPropTypesSecret\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactPropTypesSecret.js\n ** module id = 33\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactPropTypes\n */\n\n'use strict';\n\nvar ReactElement = require('./ReactElement');\nvar ReactPropTypeLocationNames = require('./ReactPropTypeLocationNames');\nvar ReactPropTypesSecret = require('./ReactPropTypesSecret');\n\nvar emptyFunction = require('fbjs/lib/emptyFunction');\nvar getIteratorFn = require('./getIteratorFn');\nvar warning = require('fbjs/lib/warning');\n\n/**\n * Collection of methods that allow declaration and validation of props that are\n * supplied to React components. Example usage:\n *\n *   var Props = require('ReactPropTypes');\n *   var MyArticle = React.createClass({\n *     propTypes: {\n *       // An optional string prop named \"description\".\n *       description: Props.string,\n *\n *       // A required enum prop named \"category\".\n *       category: Props.oneOf(['News','Photos']).isRequired,\n *\n *       // A prop named \"dialog\" that requires an instance of Dialog.\n *       dialog: Props.instanceOf(Dialog).isRequired\n *     },\n *     render: function() { ... }\n *   });\n *\n * A more formal specification of how these methods are used:\n *\n *   type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)\n *   decl := ReactPropTypes.{type}(.isRequired)?\n *\n * Each and every declaration produces a function with the same signature. This\n * allows the creation of custom validation functions. For example:\n *\n *  var MyLink = React.createClass({\n *    propTypes: {\n *      // An optional string or URI prop named \"href\".\n *      href: function(props, propName, componentName) {\n *        var propValue = props[propName];\n *        if (propValue != null && typeof propValue !== 'string' &&\n *            !(propValue instanceof URI)) {\n *          return new Error(\n *            'Expected a string or an URI for ' + propName + ' in ' +\n *            componentName\n *          );\n *        }\n *      }\n *    },\n *    render: function() {...}\n *  });\n *\n * @internal\n */\n\nvar ANONYMOUS = '<<anonymous>>';\n\nvar ReactPropTypes = {\n  array: createPrimitiveTypeChecker('array'),\n  bool: createPrimitiveTypeChecker('boolean'),\n  func: createPrimitiveTypeChecker('function'),\n  number: createPrimitiveTypeChecker('number'),\n  object: createPrimitiveTypeChecker('object'),\n  string: createPrimitiveTypeChecker('string'),\n  symbol: createPrimitiveTypeChecker('symbol'),\n\n  any: createAnyTypeChecker(),\n  arrayOf: createArrayOfTypeChecker,\n  element: createElementTypeChecker(),\n  instanceOf: createInstanceTypeChecker,\n  node: createNodeChecker(),\n  objectOf: createObjectOfTypeChecker,\n  oneOf: createEnumTypeChecker,\n  oneOfType: createUnionTypeChecker,\n  shape: createShapeTypeChecker\n};\n\n/**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\n/*eslint-disable no-self-compare*/\nfunction is(x, y) {\n  // SameValue algorithm\n  if (x === y) {\n    // Steps 1-5, 7-10\n    // Steps 6.b-6.e: +0 != -0\n    return x !== 0 || 1 / x === 1 / y;\n  } else {\n    // Step 6.a: NaN == NaN\n    return x !== x && y !== y;\n  }\n}\n/*eslint-enable no-self-compare*/\n\nfunction createChainableTypeChecker(validate) {\n  if (process.env.NODE_ENV !== 'production') {\n    var manualPropTypeCallCache = {};\n  }\n  function checkType(isRequired, props, propName, componentName, location, propFullName, secret) {\n    componentName = componentName || ANONYMOUS;\n    propFullName = propFullName || propName;\n    if (process.env.NODE_ENV !== 'production') {\n      if (secret !== ReactPropTypesSecret && typeof console !== 'undefined') {\n        var cacheKey = componentName + ':' + propName;\n        if (!manualPropTypeCallCache[cacheKey]) {\n          process.env.NODE_ENV !== 'production' ? warning(false, 'You are manually calling a React.PropTypes validation ' + 'function for the `%s` prop on `%s`. This is deprecated ' + 'and will not work in the next major version. You may be ' + 'seeing this warning due to a third-party PropTypes library. ' + 'See https://fb.me/react-warning-dont-call-proptypes for details.', propFullName, componentName) : void 0;\n          manualPropTypeCallCache[cacheKey] = true;\n        }\n      }\n    }\n    if (props[propName] == null) {\n      var locationName = ReactPropTypeLocationNames[location];\n      if (isRequired) {\n        return new Error('Required ' + locationName + ' `' + propFullName + '` was not specified in ' + ('`' + componentName + '`.'));\n      }\n      return null;\n    } else {\n      return validate(props, propName, componentName, location, propFullName);\n    }\n  }\n\n  var chainedCheckType = checkType.bind(null, false);\n  chainedCheckType.isRequired = checkType.bind(null, true);\n\n  return chainedCheckType;\n}\n\nfunction createPrimitiveTypeChecker(expectedType) {\n  function validate(props, propName, componentName, location, propFullName, secret) {\n    var propValue = props[propName];\n    var propType = getPropType(propValue);\n    if (propType !== expectedType) {\n      var locationName = ReactPropTypeLocationNames[location];\n      // `propValue` being instance of, say, date/regexp, pass the 'object'\n      // check, but we can offer a more precise error message here rather than\n      // 'of type `object`'.\n      var preciseType = getPreciseType(propValue);\n\n      return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'));\n    }\n    return null;\n  }\n  return createChainableTypeChecker(validate);\n}\n\nfunction createAnyTypeChecker() {\n  return createChainableTypeChecker(emptyFunction.thatReturns(null));\n}\n\nfunction createArrayOfTypeChecker(typeChecker) {\n  function validate(props, propName, componentName, location, propFullName) {\n    if (typeof typeChecker !== 'function') {\n      return new Error('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.');\n    }\n    var propValue = props[propName];\n    if (!Array.isArray(propValue)) {\n      var locationName = ReactPropTypeLocationNames[location];\n      var propType = getPropType(propValue);\n      return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));\n    }\n    for (var i = 0; i < propValue.length; i++) {\n      var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret);\n      if (error instanceof Error) {\n        return error;\n      }\n    }\n    return null;\n  }\n  return createChainableTypeChecker(validate);\n}\n\nfunction createElementTypeChecker() {\n  function validate(props, propName, componentName, location, propFullName) {\n    var propValue = props[propName];\n    if (!ReactElement.isValidElement(propValue)) {\n      var locationName = ReactPropTypeLocationNames[location];\n      var propType = getPropType(propValue);\n      return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.'));\n    }\n    return null;\n  }\n  return createChainableTypeChecker(validate);\n}\n\nfunction createInstanceTypeChecker(expectedClass) {\n  function validate(props, propName, componentName, location, propFullName) {\n    if (!(props[propName] instanceof expectedClass)) {\n      var locationName = ReactPropTypeLocationNames[location];\n      var expectedClassName = expectedClass.name || ANONYMOUS;\n      var actualClassName = getClassName(props[propName]);\n      return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));\n    }\n    return null;\n  }\n  return createChainableTypeChecker(validate);\n}\n\nfunction createEnumTypeChecker(expectedValues) {\n  if (!Array.isArray(expectedValues)) {\n    process.env.NODE_ENV !== 'production' ? warning(false, 'Invalid argument supplied to oneOf, expected an instance of array.') : void 0;\n    return emptyFunction.thatReturnsNull;\n  }\n\n  function validate(props, propName, componentName, location, propFullName) {\n    var propValue = props[propName];\n    for (var i = 0; i < expectedValues.length; i++) {\n      if (is(propValue, expectedValues[i])) {\n        return null;\n      }\n    }\n\n    var locationName = ReactPropTypeLocationNames[location];\n    var valuesString = JSON.stringify(expectedValues);\n    return new Error('Invalid ' + locationName + ' `' + propFullName + '` of value `' + propValue + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));\n  }\n  return createChainableTypeChecker(validate);\n}\n\nfunction createObjectOfTypeChecker(typeChecker) {\n  function validate(props, propName, componentName, location, propFullName) {\n    if (typeof typeChecker !== 'function') {\n      return new Error('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.');\n    }\n    var propValue = props[propName];\n    var propType = getPropType(propValue);\n    if (propType !== 'object') {\n      var locationName = ReactPropTypeLocationNames[location];\n      return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));\n    }\n    for (var key in propValue) {\n      if (propValue.hasOwnProperty(key)) {\n        var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n        if (error instanceof Error) {\n          return error;\n        }\n      }\n    }\n    return null;\n  }\n  return createChainableTypeChecker(validate);\n}\n\nfunction createUnionTypeChecker(arrayOfTypeCheckers) {\n  if (!Array.isArray(arrayOfTypeCheckers)) {\n    process.env.NODE_ENV !== 'production' ? warning(false, 'Invalid argument supplied to oneOfType, expected an instance of array.') : void 0;\n    return emptyFunction.thatReturnsNull;\n  }\n\n  function validate(props, propName, componentName, location, propFullName) {\n    for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n      var checker = arrayOfTypeCheckers[i];\n      if (checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret) == null) {\n        return null;\n      }\n    }\n\n    var locationName = ReactPropTypeLocationNames[location];\n    return new Error('Invalid ' + locationName + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`.'));\n  }\n  return createChainableTypeChecker(validate);\n}\n\nfunction createNodeChecker() {\n  function validate(props, propName, componentName, location, propFullName) {\n    if (!isNode(props[propName])) {\n      var locationName = ReactPropTypeLocationNames[location];\n      return new Error('Invalid ' + locationName + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));\n    }\n    return null;\n  }\n  return createChainableTypeChecker(validate);\n}\n\nfunction createShapeTypeChecker(shapeTypes) {\n  function validate(props, propName, componentName, location, propFullName) {\n    var propValue = props[propName];\n    var propType = getPropType(propValue);\n    if (propType !== 'object') {\n      var locationName = ReactPropTypeLocationNames[location];\n      return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n    }\n    for (var key in shapeTypes) {\n      var checker = shapeTypes[key];\n      if (!checker) {\n        continue;\n      }\n      var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n      if (error) {\n        return error;\n      }\n    }\n    return null;\n  }\n  return createChainableTypeChecker(validate);\n}\n\nfunction isNode(propValue) {\n  switch (typeof propValue) {\n    case 'number':\n    case 'string':\n    case 'undefined':\n      return true;\n    case 'boolean':\n      return !propValue;\n    case 'object':\n      if (Array.isArray(propValue)) {\n        return propValue.every(isNode);\n      }\n      if (propValue === null || ReactElement.isValidElement(propValue)) {\n        return true;\n      }\n\n      var iteratorFn = getIteratorFn(propValue);\n      if (iteratorFn) {\n        var iterator = iteratorFn.call(propValue);\n        var step;\n        if (iteratorFn !== propValue.entries) {\n          while (!(step = iterator.next()).done) {\n            if (!isNode(step.value)) {\n              return false;\n            }\n          }\n        } else {\n          // Iterator will provide entry [k,v] tuples rather than values.\n          while (!(step = iterator.next()).done) {\n            var entry = step.value;\n            if (entry) {\n              if (!isNode(entry[1])) {\n                return false;\n              }\n            }\n          }\n        }\n      } else {\n        return false;\n      }\n\n      return true;\n    default:\n      return false;\n  }\n}\n\nfunction isSymbol(propType, propValue) {\n  // Native Symbol.\n  if (propType === 'symbol') {\n    return true;\n  }\n\n  // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'\n  if (propValue['@@toStringTag'] === 'Symbol') {\n    return true;\n  }\n\n  // Fallback for non-spec compliant Symbols which are polyfilled.\n  if (typeof Symbol === 'function' && propValue instanceof Symbol) {\n    return true;\n  }\n\n  return false;\n}\n\n// Equivalent of `typeof` but with special handling for array and regexp.\nfunction getPropType(propValue) {\n  var propType = typeof propValue;\n  if (Array.isArray(propValue)) {\n    return 'array';\n  }\n  if (propValue instanceof RegExp) {\n    // Old webkits (at least until Android 4.0) return 'function' rather than\n    // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\n    // passes PropTypes.object.\n    return 'object';\n  }\n  if (isSymbol(propType, propValue)) {\n    return 'symbol';\n  }\n  return propType;\n}\n\n// This handles more types than `getPropType`. Only used for error messages.\n// See `createPrimitiveTypeChecker`.\nfunction getPreciseType(propValue) {\n  var propType = getPropType(propValue);\n  if (propType === 'object') {\n    if (propValue instanceof Date) {\n      return 'date';\n    } else if (propValue instanceof RegExp) {\n      return 'regexp';\n    }\n  }\n  return propType;\n}\n\n// Returns class name of the object, if any.\nfunction getClassName(propValue) {\n  if (!propValue.constructor || !propValue.constructor.name) {\n    return ANONYMOUS;\n  }\n  return propValue.constructor.name;\n}\n\nmodule.exports = ReactPropTypes;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactPropTypes.js\n ** module id = 34\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactVersion\n */\n\n'use strict';\n\nmodule.exports = '15.3.0';\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactVersion.js\n ** module id = 35\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule onlyChild\n */\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar ReactElement = require('./ReactElement');\n\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * Returns the first child in a collection of children and verifies that there\n * is only one child in the collection.\n *\n * See https://facebook.github.io/react/docs/top-level-api.html#react.children.only\n *\n * The current implementation of this function assumes that a single child gets\n * passed without a wrapper, but the purpose of this helper function is to\n * abstract away the particular structure of children.\n *\n * @param {?object} children Child collection structure.\n * @return {ReactElement} The first and only `ReactElement` contained in the\n * structure.\n */\nfunction onlyChild(children) {\n  !ReactElement.isValidElement(children) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'onlyChild must be passed a children with exactly one child.') : _prodInvariant('23') : void 0;\n  return children;\n}\n\nmodule.exports = onlyChild;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/onlyChild.js\n ** module id = 36\n ** module chunks = 4\n **/","'use strict';\n\nmodule.exports = require('react/lib/ReactDOM');\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react-dom/index.js\n ** module id = 37\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOM\n */\n\n/* globals __REACT_DEVTOOLS_GLOBAL_HOOK__*/\n\n'use strict';\n\nvar ReactDOMComponentTree = require('./ReactDOMComponentTree');\nvar ReactDefaultInjection = require('./ReactDefaultInjection');\nvar ReactMount = require('./ReactMount');\nvar ReactReconciler = require('./ReactReconciler');\nvar ReactUpdates = require('./ReactUpdates');\nvar ReactVersion = require('./ReactVersion');\n\nvar findDOMNode = require('./findDOMNode');\nvar getHostComponentFromComposite = require('./getHostComponentFromComposite');\nvar renderSubtreeIntoContainer = require('./renderSubtreeIntoContainer');\nvar warning = require('fbjs/lib/warning');\n\nReactDefaultInjection.inject();\n\nvar ReactDOM = {\n  findDOMNode: findDOMNode,\n  render: ReactMount.render,\n  unmountComponentAtNode: ReactMount.unmountComponentAtNode,\n  version: ReactVersion,\n\n  /* eslint-disable camelcase */\n  unstable_batchedUpdates: ReactUpdates.batchedUpdates,\n  unstable_renderSubtreeIntoContainer: renderSubtreeIntoContainer\n};\n\n// Inject the runtime into a devtools global hook regardless of browser.\n// Allows for debugging when the hook is injected on the page.\n/* eslint-enable camelcase */\nif (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' && typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.inject === 'function') {\n  __REACT_DEVTOOLS_GLOBAL_HOOK__.inject({\n    ComponentTree: {\n      getClosestInstanceFromNode: ReactDOMComponentTree.getClosestInstanceFromNode,\n      getNodeFromInstance: function (inst) {\n        // inst is an internal instance (but could be a composite)\n        if (inst._renderedComponent) {\n          inst = getHostComponentFromComposite(inst);\n        }\n        if (inst) {\n          return ReactDOMComponentTree.getNodeFromInstance(inst);\n        } else {\n          return null;\n        }\n      }\n    },\n    Mount: ReactMount,\n    Reconciler: ReactReconciler\n  });\n}\n\nif (process.env.NODE_ENV !== 'production') {\n  var ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\n  if (ExecutionEnvironment.canUseDOM && window.top === window.self) {\n\n    // First check if devtools is not installed\n    if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined') {\n      // If we're in Chrome or Firefox, provide a download link if not installed.\n      if (navigator.userAgent.indexOf('Chrome') > -1 && navigator.userAgent.indexOf('Edge') === -1 || navigator.userAgent.indexOf('Firefox') > -1) {\n        // Firefox does not have the issue with devtools loaded over file://\n        var showFileUrlMessage = window.location.protocol.indexOf('http') === -1 && navigator.userAgent.indexOf('Firefox') === -1;\n        console.debug('Download the React DevTools ' + (showFileUrlMessage ? 'and use an HTTP server (instead of a file: URL) ' : '') + 'for a better development experience: ' + 'https://fb.me/react-devtools');\n      }\n    }\n\n    var testFunc = function testFn() {};\n    process.env.NODE_ENV !== 'production' ? warning((testFunc.name || testFunc.toString()).indexOf('testFn') !== -1, 'It looks like you\\'re using a minified copy of the development build ' + 'of React. When deploying React apps to production, make sure to use ' + 'the production build which skips development warnings and is faster. ' + 'See https://fb.me/react-minification for more details.') : void 0;\n\n    // If we're in IE8, check to see if we are in compatibility mode and provide\n    // information on preventing compatibility mode\n    var ieCompatibilityMode = document.documentMode && document.documentMode < 8;\n\n    process.env.NODE_ENV !== 'production' ? warning(!ieCompatibilityMode, 'Internet Explorer is running in compatibility mode; please add the ' + 'following tag to your HTML to prevent this from happening: ' + '<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" />') : void 0;\n\n    var expectedFeatures = [\n    // shims\n    Array.isArray, Array.prototype.every, Array.prototype.forEach, Array.prototype.indexOf, Array.prototype.map, Date.now, Function.prototype.bind, Object.keys, String.prototype.split, String.prototype.trim];\n\n    for (var i = 0; i < expectedFeatures.length; i++) {\n      if (!expectedFeatures[i]) {\n        process.env.NODE_ENV !== 'production' ? warning(false, 'One or more ES5 shims expected by React are not available: ' + 'https://fb.me/react-warning-polyfills') : void 0;\n        break;\n      }\n    }\n  }\n}\n\nmodule.exports = ReactDOM;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOM.js\n ** module id = 38\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMComponentTree\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar DOMProperty = require('./DOMProperty');\nvar ReactDOMComponentFlags = require('./ReactDOMComponentFlags');\n\nvar invariant = require('fbjs/lib/invariant');\n\nvar ATTR_NAME = DOMProperty.ID_ATTRIBUTE_NAME;\nvar Flags = ReactDOMComponentFlags;\n\nvar internalInstanceKey = '__reactInternalInstance$' + Math.random().toString(36).slice(2);\n\n/**\n * Drill down (through composites and empty components) until we get a host or\n * host text component.\n *\n * This is pretty polymorphic but unavoidable with the current structure we have\n * for `_renderedChildren`.\n */\nfunction getRenderedHostOrTextFromComponent(component) {\n  var rendered;\n  while (rendered = component._renderedComponent) {\n    component = rendered;\n  }\n  return component;\n}\n\n/**\n * Populate `_hostNode` on the rendered host/text component with the given\n * DOM node. The passed `inst` can be a composite.\n */\nfunction precacheNode(inst, node) {\n  var hostInst = getRenderedHostOrTextFromComponent(inst);\n  hostInst._hostNode = node;\n  node[internalInstanceKey] = hostInst;\n}\n\nfunction uncacheNode(inst) {\n  var node = inst._hostNode;\n  if (node) {\n    delete node[internalInstanceKey];\n    inst._hostNode = null;\n  }\n}\n\n/**\n * Populate `_hostNode` on each child of `inst`, assuming that the children\n * match up with the DOM (element) children of `node`.\n *\n * We cache entire levels at once to avoid an n^2 problem where we access the\n * children of a node sequentially and have to walk from the start to our target\n * node every time.\n *\n * Since we update `_renderedChildren` and the actual DOM at (slightly)\n * different times, we could race here and see a newer `_renderedChildren` than\n * the DOM nodes we see. To avoid this, ReactMultiChild calls\n * `prepareToManageChildren` before we change `_renderedChildren`, at which\n * time the container's child nodes are always cached (until it unmounts).\n */\nfunction precacheChildNodes(inst, node) {\n  if (inst._flags & Flags.hasCachedChildNodes) {\n    return;\n  }\n  var children = inst._renderedChildren;\n  var childNode = node.firstChild;\n  outer: for (var name in children) {\n    if (!children.hasOwnProperty(name)) {\n      continue;\n    }\n    var childInst = children[name];\n    var childID = getRenderedHostOrTextFromComponent(childInst)._domID;\n    if (childID == null) {\n      // We're currently unmounting this child in ReactMultiChild; skip it.\n      continue;\n    }\n    // We assume the child nodes are in the same order as the child instances.\n    for (; childNode !== null; childNode = childNode.nextSibling) {\n      if (childNode.nodeType === 1 && childNode.getAttribute(ATTR_NAME) === String(childID) || childNode.nodeType === 8 && childNode.nodeValue === ' react-text: ' + childID + ' ' || childNode.nodeType === 8 && childNode.nodeValue === ' react-empty: ' + childID + ' ') {\n        precacheNode(childInst, childNode);\n        continue outer;\n      }\n    }\n    // We reached the end of the DOM children without finding an ID match.\n    !false ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Unable to find element with ID %s.', childID) : _prodInvariant('32', childID) : void 0;\n  }\n  inst._flags |= Flags.hasCachedChildNodes;\n}\n\n/**\n * Given a DOM node, return the closest ReactDOMComponent or\n * ReactDOMTextComponent instance ancestor.\n */\nfunction getClosestInstanceFromNode(node) {\n  if (node[internalInstanceKey]) {\n    return node[internalInstanceKey];\n  }\n\n  // Walk up the tree until we find an ancestor whose instance we have cached.\n  var parents = [];\n  while (!node[internalInstanceKey]) {\n    parents.push(node);\n    if (node.parentNode) {\n      node = node.parentNode;\n    } else {\n      // Top of the tree. This node must not be part of a React tree (or is\n      // unmounted, potentially).\n      return null;\n    }\n  }\n\n  var closest;\n  var inst;\n  for (; node && (inst = node[internalInstanceKey]); node = parents.pop()) {\n    closest = inst;\n    if (parents.length) {\n      precacheChildNodes(inst, node);\n    }\n  }\n\n  return closest;\n}\n\n/**\n * Given a DOM node, return the ReactDOMComponent or ReactDOMTextComponent\n * instance, or null if the node was not rendered by this React.\n */\nfunction getInstanceFromNode(node) {\n  var inst = getClosestInstanceFromNode(node);\n  if (inst != null && inst._hostNode === node) {\n    return inst;\n  } else {\n    return null;\n  }\n}\n\n/**\n * Given a ReactDOMComponent or ReactDOMTextComponent, return the corresponding\n * DOM node.\n */\nfunction getNodeFromInstance(inst) {\n  // Without this first invariant, passing a non-DOM-component triggers the next\n  // invariant for a missing parent, which is super confusing.\n  !(inst._hostNode !== undefined) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'getNodeFromInstance: Invalid argument.') : _prodInvariant('33') : void 0;\n\n  if (inst._hostNode) {\n    return inst._hostNode;\n  }\n\n  // Walk up the tree until we find an ancestor whose DOM node we have cached.\n  var parents = [];\n  while (!inst._hostNode) {\n    parents.push(inst);\n    !inst._hostParent ? process.env.NODE_ENV !== 'production' ? invariant(false, 'React DOM tree root should always have a node reference.') : _prodInvariant('34') : void 0;\n    inst = inst._hostParent;\n  }\n\n  // Now parents contains each ancestor that does *not* have a cached native\n  // node, and `inst` is the deepest ancestor that does.\n  for (; parents.length; inst = parents.pop()) {\n    precacheChildNodes(inst, inst._hostNode);\n  }\n\n  return inst._hostNode;\n}\n\nvar ReactDOMComponentTree = {\n  getClosestInstanceFromNode: getClosestInstanceFromNode,\n  getInstanceFromNode: getInstanceFromNode,\n  getNodeFromInstance: getNodeFromInstance,\n  precacheChildNodes: precacheChildNodes,\n  precacheNode: precacheNode,\n  uncacheNode: uncacheNode\n};\n\nmodule.exports = ReactDOMComponentTree;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMComponentTree.js\n ** module id = 39\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule DOMProperty\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar invariant = require('fbjs/lib/invariant');\n\nfunction checkMask(value, bitmask) {\n  return (value & bitmask) === bitmask;\n}\n\nvar DOMPropertyInjection = {\n  /**\n   * Mapping from normalized, camelcased property names to a configuration that\n   * specifies how the associated DOM property should be accessed or rendered.\n   */\n  MUST_USE_PROPERTY: 0x1,\n  HAS_BOOLEAN_VALUE: 0x4,\n  HAS_NUMERIC_VALUE: 0x8,\n  HAS_POSITIVE_NUMERIC_VALUE: 0x10 | 0x8,\n  HAS_OVERLOADED_BOOLEAN_VALUE: 0x20,\n\n  /**\n   * Inject some specialized knowledge about the DOM. This takes a config object\n   * with the following properties:\n   *\n   * isCustomAttribute: function that given an attribute name will return true\n   * if it can be inserted into the DOM verbatim. Useful for data-* or aria-*\n   * attributes where it's impossible to enumerate all of the possible\n   * attribute names,\n   *\n   * Properties: object mapping DOM property name to one of the\n   * DOMPropertyInjection constants or null. If your attribute isn't in here,\n   * it won't get written to the DOM.\n   *\n   * DOMAttributeNames: object mapping React attribute name to the DOM\n   * attribute name. Attribute names not specified use the **lowercase**\n   * normalized name.\n   *\n   * DOMAttributeNamespaces: object mapping React attribute name to the DOM\n   * attribute namespace URL. (Attribute names not specified use no namespace.)\n   *\n   * DOMPropertyNames: similar to DOMAttributeNames but for DOM properties.\n   * Property names not specified use the normalized name.\n   *\n   * DOMMutationMethods: Properties that require special mutation methods. If\n   * `value` is undefined, the mutation method should unset the property.\n   *\n   * @param {object} domPropertyConfig the config as described above.\n   */\n  injectDOMPropertyConfig: function (domPropertyConfig) {\n    var Injection = DOMPropertyInjection;\n    var Properties = domPropertyConfig.Properties || {};\n    var DOMAttributeNamespaces = domPropertyConfig.DOMAttributeNamespaces || {};\n    var DOMAttributeNames = domPropertyConfig.DOMAttributeNames || {};\n    var DOMPropertyNames = domPropertyConfig.DOMPropertyNames || {};\n    var DOMMutationMethods = domPropertyConfig.DOMMutationMethods || {};\n\n    if (domPropertyConfig.isCustomAttribute) {\n      DOMProperty._isCustomAttributeFunctions.push(domPropertyConfig.isCustomAttribute);\n    }\n\n    for (var propName in Properties) {\n      !!DOMProperty.properties.hasOwnProperty(propName) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'injectDOMPropertyConfig(...): You\\'re trying to inject DOM property \\'%s\\' which has already been injected. You may be accidentally injecting the same DOM property config twice, or you may be injecting two configs that have conflicting property names.', propName) : _prodInvariant('48', propName) : void 0;\n\n      var lowerCased = propName.toLowerCase();\n      var propConfig = Properties[propName];\n\n      var propertyInfo = {\n        attributeName: lowerCased,\n        attributeNamespace: null,\n        propertyName: propName,\n        mutationMethod: null,\n\n        mustUseProperty: checkMask(propConfig, Injection.MUST_USE_PROPERTY),\n        hasBooleanValue: checkMask(propConfig, Injection.HAS_BOOLEAN_VALUE),\n        hasNumericValue: checkMask(propConfig, Injection.HAS_NUMERIC_VALUE),\n        hasPositiveNumericValue: checkMask(propConfig, Injection.HAS_POSITIVE_NUMERIC_VALUE),\n        hasOverloadedBooleanValue: checkMask(propConfig, Injection.HAS_OVERLOADED_BOOLEAN_VALUE)\n      };\n      !(propertyInfo.hasBooleanValue + propertyInfo.hasNumericValue + propertyInfo.hasOverloadedBooleanValue <= 1) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'DOMProperty: Value can be one of boolean, overloaded boolean, or numeric value, but not a combination: %s', propName) : _prodInvariant('50', propName) : void 0;\n\n      if (process.env.NODE_ENV !== 'production') {\n        DOMProperty.getPossibleStandardName[lowerCased] = propName;\n      }\n\n      if (DOMAttributeNames.hasOwnProperty(propName)) {\n        var attributeName = DOMAttributeNames[propName];\n        propertyInfo.attributeName = attributeName;\n        if (process.env.NODE_ENV !== 'production') {\n          DOMProperty.getPossibleStandardName[attributeName] = propName;\n        }\n      }\n\n      if (DOMAttributeNamespaces.hasOwnProperty(propName)) {\n        propertyInfo.attributeNamespace = DOMAttributeNamespaces[propName];\n      }\n\n      if (DOMPropertyNames.hasOwnProperty(propName)) {\n        propertyInfo.propertyName = DOMPropertyNames[propName];\n      }\n\n      if (DOMMutationMethods.hasOwnProperty(propName)) {\n        propertyInfo.mutationMethod = DOMMutationMethods[propName];\n      }\n\n      DOMProperty.properties[propName] = propertyInfo;\n    }\n  }\n};\n\n/* eslint-disable max-len */\nvar ATTRIBUTE_NAME_START_CHAR = ':A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD';\n/* eslint-enable max-len */\n\n/**\n * DOMProperty exports lookup objects that can be used like functions:\n *\n *   > DOMProperty.isValid['id']\n *   true\n *   > DOMProperty.isValid['foobar']\n *   undefined\n *\n * Although this may be confusing, it performs better in general.\n *\n * @see http://jsperf.com/key-exists\n * @see http://jsperf.com/key-missing\n */\nvar DOMProperty = {\n\n  ID_ATTRIBUTE_NAME: 'data-reactid',\n  ROOT_ATTRIBUTE_NAME: 'data-reactroot',\n\n  ATTRIBUTE_NAME_START_CHAR: ATTRIBUTE_NAME_START_CHAR,\n  ATTRIBUTE_NAME_CHAR: ATTRIBUTE_NAME_START_CHAR + '\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040',\n\n  /**\n   * Map from property \"standard name\" to an object with info about how to set\n   * the property in the DOM. Each object contains:\n   *\n   * attributeName:\n   *   Used when rendering markup or with `*Attribute()`.\n   * attributeNamespace\n   * propertyName:\n   *   Used on DOM node instances. (This includes properties that mutate due to\n   *   external factors.)\n   * mutationMethod:\n   *   If non-null, used instead of the property or `setAttribute()` after\n   *   initial render.\n   * mustUseProperty:\n   *   Whether the property must be accessed and mutated as an object property.\n   * hasBooleanValue:\n   *   Whether the property should be removed when set to a falsey value.\n   * hasNumericValue:\n   *   Whether the property must be numeric or parse as a numeric and should be\n   *   removed when set to a falsey value.\n   * hasPositiveNumericValue:\n   *   Whether the property must be positive numeric or parse as a positive\n   *   numeric and should be removed when set to a falsey value.\n   * hasOverloadedBooleanValue:\n   *   Whether the property can be used as a flag as well as with a value.\n   *   Removed when strictly equal to false; present without a value when\n   *   strictly equal to true; present with a value otherwise.\n   */\n  properties: {},\n\n  /**\n   * Mapping from lowercase property names to the properly cased version, used\n   * to warn in the case of missing properties. Available only in __DEV__.\n   * @type {Object}\n   */\n  getPossibleStandardName: process.env.NODE_ENV !== 'production' ? {} : null,\n\n  /**\n   * All of the isCustomAttribute() functions that have been injected.\n   */\n  _isCustomAttributeFunctions: [],\n\n  /**\n   * Checks whether a property name is a custom attribute.\n   * @method\n   */\n  isCustomAttribute: function (attributeName) {\n    for (var i = 0; i < DOMProperty._isCustomAttributeFunctions.length; i++) {\n      var isCustomAttributeFn = DOMProperty._isCustomAttributeFunctions[i];\n      if (isCustomAttributeFn(attributeName)) {\n        return true;\n      }\n    }\n    return false;\n  },\n\n  injection: DOMPropertyInjection\n};\n\nmodule.exports = DOMProperty;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/DOMProperty.js\n ** module id = 40\n ** module chunks = 4\n **/","/**\n * Copyright 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMComponentFlags\n */\n\n'use strict';\n\nvar ReactDOMComponentFlags = {\n  hasCachedChildNodes: 1 << 0\n};\n\nmodule.exports = ReactDOMComponentFlags;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMComponentFlags.js\n ** module id = 41\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDefaultInjection\n */\n\n'use strict';\n\nvar BeforeInputEventPlugin = require('./BeforeInputEventPlugin');\nvar ChangeEventPlugin = require('./ChangeEventPlugin');\nvar DefaultEventPluginOrder = require('./DefaultEventPluginOrder');\nvar EnterLeaveEventPlugin = require('./EnterLeaveEventPlugin');\nvar HTMLDOMPropertyConfig = require('./HTMLDOMPropertyConfig');\nvar ReactComponentBrowserEnvironment = require('./ReactComponentBrowserEnvironment');\nvar ReactDOMComponent = require('./ReactDOMComponent');\nvar ReactDOMComponentTree = require('./ReactDOMComponentTree');\nvar ReactDOMEmptyComponent = require('./ReactDOMEmptyComponent');\nvar ReactDOMTreeTraversal = require('./ReactDOMTreeTraversal');\nvar ReactDOMTextComponent = require('./ReactDOMTextComponent');\nvar ReactDefaultBatchingStrategy = require('./ReactDefaultBatchingStrategy');\nvar ReactEventListener = require('./ReactEventListener');\nvar ReactInjection = require('./ReactInjection');\nvar ReactReconcileTransaction = require('./ReactReconcileTransaction');\nvar SVGDOMPropertyConfig = require('./SVGDOMPropertyConfig');\nvar SelectEventPlugin = require('./SelectEventPlugin');\nvar SimpleEventPlugin = require('./SimpleEventPlugin');\n\nvar alreadyInjected = false;\n\nfunction inject() {\n  if (alreadyInjected) {\n    // TODO: This is currently true because these injections are shared between\n    // the client and the server package. They should be built independently\n    // and not share any injection state. Then this problem will be solved.\n    return;\n  }\n  alreadyInjected = true;\n\n  ReactInjection.EventEmitter.injectReactEventListener(ReactEventListener);\n\n  /**\n   * Inject modules for resolving DOM hierarchy and plugin ordering.\n   */\n  ReactInjection.EventPluginHub.injectEventPluginOrder(DefaultEventPluginOrder);\n  ReactInjection.EventPluginUtils.injectComponentTree(ReactDOMComponentTree);\n  ReactInjection.EventPluginUtils.injectTreeTraversal(ReactDOMTreeTraversal);\n\n  /**\n   * Some important event plugins included by default (without having to require\n   * them).\n   */\n  ReactInjection.EventPluginHub.injectEventPluginsByName({\n    SimpleEventPlugin: SimpleEventPlugin,\n    EnterLeaveEventPlugin: EnterLeaveEventPlugin,\n    ChangeEventPlugin: ChangeEventPlugin,\n    SelectEventPlugin: SelectEventPlugin,\n    BeforeInputEventPlugin: BeforeInputEventPlugin\n  });\n\n  ReactInjection.HostComponent.injectGenericComponentClass(ReactDOMComponent);\n\n  ReactInjection.HostComponent.injectTextComponentClass(ReactDOMTextComponent);\n\n  ReactInjection.DOMProperty.injectDOMPropertyConfig(HTMLDOMPropertyConfig);\n  ReactInjection.DOMProperty.injectDOMPropertyConfig(SVGDOMPropertyConfig);\n\n  ReactInjection.EmptyComponent.injectEmptyComponentFactory(function (instantiate) {\n    return new ReactDOMEmptyComponent(instantiate);\n  });\n\n  ReactInjection.Updates.injectReconcileTransaction(ReactReconcileTransaction);\n  ReactInjection.Updates.injectBatchingStrategy(ReactDefaultBatchingStrategy);\n\n  ReactInjection.Component.injectEnvironment(ReactComponentBrowserEnvironment);\n}\n\nmodule.exports = {\n  inject: inject\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDefaultInjection.js\n ** module id = 42\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule BeforeInputEventPlugin\n */\n\n'use strict';\n\nvar EventConstants = require('./EventConstants');\nvar EventPropagators = require('./EventPropagators');\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\nvar FallbackCompositionState = require('./FallbackCompositionState');\nvar SyntheticCompositionEvent = require('./SyntheticCompositionEvent');\nvar SyntheticInputEvent = require('./SyntheticInputEvent');\n\nvar keyOf = require('fbjs/lib/keyOf');\n\nvar END_KEYCODES = [9, 13, 27, 32]; // Tab, Return, Esc, Space\nvar START_KEYCODE = 229;\n\nvar canUseCompositionEvent = ExecutionEnvironment.canUseDOM && 'CompositionEvent' in window;\n\nvar documentMode = null;\nif (ExecutionEnvironment.canUseDOM && 'documentMode' in document) {\n  documentMode = document.documentMode;\n}\n\n// Webkit offers a very useful `textInput` event that can be used to\n// directly represent `beforeInput`. The IE `textinput` event is not as\n// useful, so we don't use it.\nvar canUseTextInputEvent = ExecutionEnvironment.canUseDOM && 'TextEvent' in window && !documentMode && !isPresto();\n\n// In IE9+, we have access to composition events, but the data supplied\n// by the native compositionend event may be incorrect. Japanese ideographic\n// spaces, for instance (\\u3000) are not recorded correctly.\nvar useFallbackCompositionData = ExecutionEnvironment.canUseDOM && (!canUseCompositionEvent || documentMode && documentMode > 8 && documentMode <= 11);\n\n/**\n * Opera <= 12 includes TextEvent in window, but does not fire\n * text input events. Rely on keypress instead.\n */\nfunction isPresto() {\n  var opera = window.opera;\n  return typeof opera === 'object' && typeof opera.version === 'function' && parseInt(opera.version(), 10) <= 12;\n}\n\nvar SPACEBAR_CODE = 32;\nvar SPACEBAR_CHAR = String.fromCharCode(SPACEBAR_CODE);\n\nvar topLevelTypes = EventConstants.topLevelTypes;\n\n// Events and their corresponding property names.\nvar eventTypes = {\n  beforeInput: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onBeforeInput: null }),\n      captured: keyOf({ onBeforeInputCapture: null })\n    },\n    dependencies: [topLevelTypes.topCompositionEnd, topLevelTypes.topKeyPress, topLevelTypes.topTextInput, topLevelTypes.topPaste]\n  },\n  compositionEnd: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onCompositionEnd: null }),\n      captured: keyOf({ onCompositionEndCapture: null })\n    },\n    dependencies: [topLevelTypes.topBlur, topLevelTypes.topCompositionEnd, topLevelTypes.topKeyDown, topLevelTypes.topKeyPress, topLevelTypes.topKeyUp, topLevelTypes.topMouseDown]\n  },\n  compositionStart: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onCompositionStart: null }),\n      captured: keyOf({ onCompositionStartCapture: null })\n    },\n    dependencies: [topLevelTypes.topBlur, topLevelTypes.topCompositionStart, topLevelTypes.topKeyDown, topLevelTypes.topKeyPress, topLevelTypes.topKeyUp, topLevelTypes.topMouseDown]\n  },\n  compositionUpdate: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onCompositionUpdate: null }),\n      captured: keyOf({ onCompositionUpdateCapture: null })\n    },\n    dependencies: [topLevelTypes.topBlur, topLevelTypes.topCompositionUpdate, topLevelTypes.topKeyDown, topLevelTypes.topKeyPress, topLevelTypes.topKeyUp, topLevelTypes.topMouseDown]\n  }\n};\n\n// Track whether we've ever handled a keypress on the space key.\nvar hasSpaceKeypress = false;\n\n/**\n * Return whether a native keypress event is assumed to be a command.\n * This is required because Firefox fires `keypress` events for key commands\n * (cut, copy, select-all, etc.) even though no character is inserted.\n */\nfunction isKeypressCommand(nativeEvent) {\n  return (nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) &&\n  // ctrlKey && altKey is equivalent to AltGr, and is not a command.\n  !(nativeEvent.ctrlKey && nativeEvent.altKey);\n}\n\n/**\n * Translate native top level events into event types.\n *\n * @param {string} topLevelType\n * @return {object}\n */\nfunction getCompositionEventType(topLevelType) {\n  switch (topLevelType) {\n    case topLevelTypes.topCompositionStart:\n      return eventTypes.compositionStart;\n    case topLevelTypes.topCompositionEnd:\n      return eventTypes.compositionEnd;\n    case topLevelTypes.topCompositionUpdate:\n      return eventTypes.compositionUpdate;\n  }\n}\n\n/**\n * Does our fallback best-guess model think this event signifies that\n * composition has begun?\n *\n * @param {string} topLevelType\n * @param {object} nativeEvent\n * @return {boolean}\n */\nfunction isFallbackCompositionStart(topLevelType, nativeEvent) {\n  return topLevelType === topLevelTypes.topKeyDown && nativeEvent.keyCode === START_KEYCODE;\n}\n\n/**\n * Does our fallback mode think that this event is the end of composition?\n *\n * @param {string} topLevelType\n * @param {object} nativeEvent\n * @return {boolean}\n */\nfunction isFallbackCompositionEnd(topLevelType, nativeEvent) {\n  switch (topLevelType) {\n    case topLevelTypes.topKeyUp:\n      // Command keys insert or clear IME input.\n      return END_KEYCODES.indexOf(nativeEvent.keyCode) !== -1;\n    case topLevelTypes.topKeyDown:\n      // Expect IME keyCode on each keydown. If we get any other\n      // code we must have exited earlier.\n      return nativeEvent.keyCode !== START_KEYCODE;\n    case topLevelTypes.topKeyPress:\n    case topLevelTypes.topMouseDown:\n    case topLevelTypes.topBlur:\n      // Events are not possible without cancelling IME.\n      return true;\n    default:\n      return false;\n  }\n}\n\n/**\n * Google Input Tools provides composition data via a CustomEvent,\n * with the `data` property populated in the `detail` object. If this\n * is available on the event object, use it. If not, this is a plain\n * composition event and we have nothing special to extract.\n *\n * @param {object} nativeEvent\n * @return {?string}\n */\nfunction getDataFromCustomEvent(nativeEvent) {\n  var detail = nativeEvent.detail;\n  if (typeof detail === 'object' && 'data' in detail) {\n    return detail.data;\n  }\n  return null;\n}\n\n// Track the current IME composition fallback object, if any.\nvar currentComposition = null;\n\n/**\n * @return {?object} A SyntheticCompositionEvent.\n */\nfunction extractCompositionEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n  var eventType;\n  var fallbackData;\n\n  if (canUseCompositionEvent) {\n    eventType = getCompositionEventType(topLevelType);\n  } else if (!currentComposition) {\n    if (isFallbackCompositionStart(topLevelType, nativeEvent)) {\n      eventType = eventTypes.compositionStart;\n    }\n  } else if (isFallbackCompositionEnd(topLevelType, nativeEvent)) {\n    eventType = eventTypes.compositionEnd;\n  }\n\n  if (!eventType) {\n    return null;\n  }\n\n  if (useFallbackCompositionData) {\n    // The current composition is stored statically and must not be\n    // overwritten while composition continues.\n    if (!currentComposition && eventType === eventTypes.compositionStart) {\n      currentComposition = FallbackCompositionState.getPooled(nativeEventTarget);\n    } else if (eventType === eventTypes.compositionEnd) {\n      if (currentComposition) {\n        fallbackData = currentComposition.getData();\n      }\n    }\n  }\n\n  var event = SyntheticCompositionEvent.getPooled(eventType, targetInst, nativeEvent, nativeEventTarget);\n\n  if (fallbackData) {\n    // Inject data generated from fallback path into the synthetic event.\n    // This matches the property of native CompositionEventInterface.\n    event.data = fallbackData;\n  } else {\n    var customData = getDataFromCustomEvent(nativeEvent);\n    if (customData !== null) {\n      event.data = customData;\n    }\n  }\n\n  EventPropagators.accumulateTwoPhaseDispatches(event);\n  return event;\n}\n\n/**\n * @param {string} topLevelType Record from `EventConstants`.\n * @param {object} nativeEvent Native browser event.\n * @return {?string} The string corresponding to this `beforeInput` event.\n */\nfunction getNativeBeforeInputChars(topLevelType, nativeEvent) {\n  switch (topLevelType) {\n    case topLevelTypes.topCompositionEnd:\n      return getDataFromCustomEvent(nativeEvent);\n    case topLevelTypes.topKeyPress:\n      /**\n       * If native `textInput` events are available, our goal is to make\n       * use of them. However, there is a special case: the spacebar key.\n       * In Webkit, preventing default on a spacebar `textInput` event\n       * cancels character insertion, but it *also* causes the browser\n       * to fall back to its default spacebar behavior of scrolling the\n       * page.\n       *\n       * Tracking at:\n       * https://code.google.com/p/chromium/issues/detail?id=355103\n       *\n       * To avoid this issue, use the keypress event as if no `textInput`\n       * event is available.\n       */\n      var which = nativeEvent.which;\n      if (which !== SPACEBAR_CODE) {\n        return null;\n      }\n\n      hasSpaceKeypress = true;\n      return SPACEBAR_CHAR;\n\n    case topLevelTypes.topTextInput:\n      // Record the characters to be added to the DOM.\n      var chars = nativeEvent.data;\n\n      // If it's a spacebar character, assume that we have already handled\n      // it at the keypress level and bail immediately. Android Chrome\n      // doesn't give us keycodes, so we need to blacklist it.\n      if (chars === SPACEBAR_CHAR && hasSpaceKeypress) {\n        return null;\n      }\n\n      return chars;\n\n    default:\n      // For other native event types, do nothing.\n      return null;\n  }\n}\n\n/**\n * For browsers that do not provide the `textInput` event, extract the\n * appropriate string to use for SyntheticInputEvent.\n *\n * @param {string} topLevelType Record from `EventConstants`.\n * @param {object} nativeEvent Native browser event.\n * @return {?string} The fallback string for this `beforeInput` event.\n */\nfunction getFallbackBeforeInputChars(topLevelType, nativeEvent) {\n  // If we are currently composing (IME) and using a fallback to do so,\n  // try to extract the composed characters from the fallback object.\n  if (currentComposition) {\n    if (topLevelType === topLevelTypes.topCompositionEnd || isFallbackCompositionEnd(topLevelType, nativeEvent)) {\n      var chars = currentComposition.getData();\n      FallbackCompositionState.release(currentComposition);\n      currentComposition = null;\n      return chars;\n    }\n    return null;\n  }\n\n  switch (topLevelType) {\n    case topLevelTypes.topPaste:\n      // If a paste event occurs after a keypress, throw out the input\n      // chars. Paste events should not lead to BeforeInput events.\n      return null;\n    case topLevelTypes.topKeyPress:\n      /**\n       * As of v27, Firefox may fire keypress events even when no character\n       * will be inserted. A few possibilities:\n       *\n       * - `which` is `0`. Arrow keys, Esc key, etc.\n       *\n       * - `which` is the pressed key code, but no char is available.\n       *   Ex: 'AltGr + d` in Polish. There is no modified character for\n       *   this key combination and no character is inserted into the\n       *   document, but FF fires the keypress for char code `100` anyway.\n       *   No `input` event will occur.\n       *\n       * - `which` is the pressed key code, but a command combination is\n       *   being used. Ex: `Cmd+C`. No character is inserted, and no\n       *   `input` event will occur.\n       */\n      if (nativeEvent.which && !isKeypressCommand(nativeEvent)) {\n        return String.fromCharCode(nativeEvent.which);\n      }\n      return null;\n    case topLevelTypes.topCompositionEnd:\n      return useFallbackCompositionData ? null : nativeEvent.data;\n    default:\n      return null;\n  }\n}\n\n/**\n * Extract a SyntheticInputEvent for `beforeInput`, based on either native\n * `textInput` or fallback behavior.\n *\n * @return {?object} A SyntheticInputEvent.\n */\nfunction extractBeforeInputEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n  var chars;\n\n  if (canUseTextInputEvent) {\n    chars = getNativeBeforeInputChars(topLevelType, nativeEvent);\n  } else {\n    chars = getFallbackBeforeInputChars(topLevelType, nativeEvent);\n  }\n\n  // If no characters are being inserted, no BeforeInput event should\n  // be fired.\n  if (!chars) {\n    return null;\n  }\n\n  var event = SyntheticInputEvent.getPooled(eventTypes.beforeInput, targetInst, nativeEvent, nativeEventTarget);\n\n  event.data = chars;\n  EventPropagators.accumulateTwoPhaseDispatches(event);\n  return event;\n}\n\n/**\n * Create an `onBeforeInput` event to match\n * http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105/#events-inputevents.\n *\n * This event plugin is based on the native `textInput` event\n * available in Chrome, Safari, Opera, and IE. This event fires after\n * `onKeyPress` and `onCompositionEnd`, but before `onInput`.\n *\n * `beforeInput` is spec'd but not implemented in any browsers, and\n * the `input` event does not provide any useful information about what has\n * actually been added, contrary to the spec. Thus, `textInput` is the best\n * available event to identify the characters that have actually been inserted\n * into the target node.\n *\n * This plugin is also responsible for emitting `composition` events, thus\n * allowing us to share composition fallback code for both `beforeInput` and\n * `composition` event types.\n */\nvar BeforeInputEventPlugin = {\n\n  eventTypes: eventTypes,\n\n  extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n    return [extractCompositionEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget), extractBeforeInputEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget)];\n  }\n};\n\nmodule.exports = BeforeInputEventPlugin;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/BeforeInputEventPlugin.js\n ** module id = 43\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule EventConstants\n */\n\n'use strict';\n\nvar keyMirror = require('fbjs/lib/keyMirror');\n\nvar PropagationPhases = keyMirror({ bubbled: null, captured: null });\n\n/**\n * Types of raw signals from the browser caught at the top level.\n */\nvar topLevelTypes = keyMirror({\n  topAbort: null,\n  topAnimationEnd: null,\n  topAnimationIteration: null,\n  topAnimationStart: null,\n  topBlur: null,\n  topCanPlay: null,\n  topCanPlayThrough: null,\n  topChange: null,\n  topClick: null,\n  topCompositionEnd: null,\n  topCompositionStart: null,\n  topCompositionUpdate: null,\n  topContextMenu: null,\n  topCopy: null,\n  topCut: null,\n  topDoubleClick: null,\n  topDrag: null,\n  topDragEnd: null,\n  topDragEnter: null,\n  topDragExit: null,\n  topDragLeave: null,\n  topDragOver: null,\n  topDragStart: null,\n  topDrop: null,\n  topDurationChange: null,\n  topEmptied: null,\n  topEncrypted: null,\n  topEnded: null,\n  topError: null,\n  topFocus: null,\n  topInput: null,\n  topInvalid: null,\n  topKeyDown: null,\n  topKeyPress: null,\n  topKeyUp: null,\n  topLoad: null,\n  topLoadedData: null,\n  topLoadedMetadata: null,\n  topLoadStart: null,\n  topMouseDown: null,\n  topMouseMove: null,\n  topMouseOut: null,\n  topMouseOver: null,\n  topMouseUp: null,\n  topPaste: null,\n  topPause: null,\n  topPlay: null,\n  topPlaying: null,\n  topProgress: null,\n  topRateChange: null,\n  topReset: null,\n  topScroll: null,\n  topSeeked: null,\n  topSeeking: null,\n  topSelectionChange: null,\n  topStalled: null,\n  topSubmit: null,\n  topSuspend: null,\n  topTextInput: null,\n  topTimeUpdate: null,\n  topTouchCancel: null,\n  topTouchEnd: null,\n  topTouchMove: null,\n  topTouchStart: null,\n  topTransitionEnd: null,\n  topVolumeChange: null,\n  topWaiting: null,\n  topWheel: null\n});\n\nvar EventConstants = {\n  topLevelTypes: topLevelTypes,\n  PropagationPhases: PropagationPhases\n};\n\nmodule.exports = EventConstants;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/EventConstants.js\n ** module id = 44\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule EventPropagators\n */\n\n'use strict';\n\nvar EventConstants = require('./EventConstants');\nvar EventPluginHub = require('./EventPluginHub');\nvar EventPluginUtils = require('./EventPluginUtils');\n\nvar accumulateInto = require('./accumulateInto');\nvar forEachAccumulated = require('./forEachAccumulated');\nvar warning = require('fbjs/lib/warning');\n\nvar PropagationPhases = EventConstants.PropagationPhases;\nvar getListener = EventPluginHub.getListener;\n\n/**\n * Some event types have a notion of different registration names for different\n * \"phases\" of propagation. This finds listeners by a given phase.\n */\nfunction listenerAtPhase(inst, event, propagationPhase) {\n  var registrationName = event.dispatchConfig.phasedRegistrationNames[propagationPhase];\n  return getListener(inst, registrationName);\n}\n\n/**\n * Tags a `SyntheticEvent` with dispatched listeners. Creating this function\n * here, allows us to not have to bind or create functions for each event.\n * Mutating the event's members allows us to not have to create a wrapping\n * \"dispatch\" object that pairs the event with the listener.\n */\nfunction accumulateDirectionalDispatches(inst, upwards, event) {\n  if (process.env.NODE_ENV !== 'production') {\n    process.env.NODE_ENV !== 'production' ? warning(inst, 'Dispatching inst must not be null') : void 0;\n  }\n  var phase = upwards ? PropagationPhases.bubbled : PropagationPhases.captured;\n  var listener = listenerAtPhase(inst, event, phase);\n  if (listener) {\n    event._dispatchListeners = accumulateInto(event._dispatchListeners, listener);\n    event._dispatchInstances = accumulateInto(event._dispatchInstances, inst);\n  }\n}\n\n/**\n * Collect dispatches (must be entirely collected before dispatching - see unit\n * tests). Lazily allocate the array to conserve memory.  We must loop through\n * each event and perform the traversal for each one. We cannot perform a\n * single traversal for the entire collection of events because each event may\n * have a different target.\n */\nfunction accumulateTwoPhaseDispatchesSingle(event) {\n  if (event && event.dispatchConfig.phasedRegistrationNames) {\n    EventPluginUtils.traverseTwoPhase(event._targetInst, accumulateDirectionalDispatches, event);\n  }\n}\n\n/**\n * Same as `accumulateTwoPhaseDispatchesSingle`, but skips over the targetID.\n */\nfunction accumulateTwoPhaseDispatchesSingleSkipTarget(event) {\n  if (event && event.dispatchConfig.phasedRegistrationNames) {\n    var targetInst = event._targetInst;\n    var parentInst = targetInst ? EventPluginUtils.getParentInstance(targetInst) : null;\n    EventPluginUtils.traverseTwoPhase(parentInst, accumulateDirectionalDispatches, event);\n  }\n}\n\n/**\n * Accumulates without regard to direction, does not look for phased\n * registration names. Same as `accumulateDirectDispatchesSingle` but without\n * requiring that the `dispatchMarker` be the same as the dispatched ID.\n */\nfunction accumulateDispatches(inst, ignoredDirection, event) {\n  if (event && event.dispatchConfig.registrationName) {\n    var registrationName = event.dispatchConfig.registrationName;\n    var listener = getListener(inst, registrationName);\n    if (listener) {\n      event._dispatchListeners = accumulateInto(event._dispatchListeners, listener);\n      event._dispatchInstances = accumulateInto(event._dispatchInstances, inst);\n    }\n  }\n}\n\n/**\n * Accumulates dispatches on an `SyntheticEvent`, but only for the\n * `dispatchMarker`.\n * @param {SyntheticEvent} event\n */\nfunction accumulateDirectDispatchesSingle(event) {\n  if (event && event.dispatchConfig.registrationName) {\n    accumulateDispatches(event._targetInst, null, event);\n  }\n}\n\nfunction accumulateTwoPhaseDispatches(events) {\n  forEachAccumulated(events, accumulateTwoPhaseDispatchesSingle);\n}\n\nfunction accumulateTwoPhaseDispatchesSkipTarget(events) {\n  forEachAccumulated(events, accumulateTwoPhaseDispatchesSingleSkipTarget);\n}\n\nfunction accumulateEnterLeaveDispatches(leave, enter, from, to) {\n  EventPluginUtils.traverseEnterLeave(from, to, accumulateDispatches, leave, enter);\n}\n\nfunction accumulateDirectDispatches(events) {\n  forEachAccumulated(events, accumulateDirectDispatchesSingle);\n}\n\n/**\n * A small set of propagation patterns, each of which will accept a small amount\n * of information, and generate a set of \"dispatch ready event objects\" - which\n * are sets of events that have already been annotated with a set of dispatched\n * listener functions/ids. The API is designed this way to discourage these\n * propagation strategies from actually executing the dispatches, since we\n * always want to collect the entire set of dispatches before executing event a\n * single one.\n *\n * @constructor EventPropagators\n */\nvar EventPropagators = {\n  accumulateTwoPhaseDispatches: accumulateTwoPhaseDispatches,\n  accumulateTwoPhaseDispatchesSkipTarget: accumulateTwoPhaseDispatchesSkipTarget,\n  accumulateDirectDispatches: accumulateDirectDispatches,\n  accumulateEnterLeaveDispatches: accumulateEnterLeaveDispatches\n};\n\nmodule.exports = EventPropagators;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/EventPropagators.js\n ** module id = 45\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule EventPluginHub\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar EventPluginRegistry = require('./EventPluginRegistry');\nvar EventPluginUtils = require('./EventPluginUtils');\nvar ReactErrorUtils = require('./ReactErrorUtils');\n\nvar accumulateInto = require('./accumulateInto');\nvar forEachAccumulated = require('./forEachAccumulated');\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * Internal store for event listeners\n */\nvar listenerBank = {};\n\n/**\n * Internal queue of events that have accumulated their dispatches and are\n * waiting to have their dispatches executed.\n */\nvar eventQueue = null;\n\n/**\n * Dispatches an event and releases it back into the pool, unless persistent.\n *\n * @param {?object} event Synthetic event to be dispatched.\n * @param {boolean} simulated If the event is simulated (changes exn behavior)\n * @private\n */\nvar executeDispatchesAndRelease = function (event, simulated) {\n  if (event) {\n    EventPluginUtils.executeDispatchesInOrder(event, simulated);\n\n    if (!event.isPersistent()) {\n      event.constructor.release(event);\n    }\n  }\n};\nvar executeDispatchesAndReleaseSimulated = function (e) {\n  return executeDispatchesAndRelease(e, true);\n};\nvar executeDispatchesAndReleaseTopLevel = function (e) {\n  return executeDispatchesAndRelease(e, false);\n};\n\nvar getDictionaryKey = function (inst) {\n  return '.' + inst._rootNodeID;\n};\n\n/**\n * This is a unified interface for event plugins to be installed and configured.\n *\n * Event plugins can implement the following properties:\n *\n *   `extractEvents` {function(string, DOMEventTarget, string, object): *}\n *     Required. When a top-level event is fired, this method is expected to\n *     extract synthetic events that will in turn be queued and dispatched.\n *\n *   `eventTypes` {object}\n *     Optional, plugins that fire events must publish a mapping of registration\n *     names that are used to register listeners. Values of this mapping must\n *     be objects that contain `registrationName` or `phasedRegistrationNames`.\n *\n *   `executeDispatch` {function(object, function, string)}\n *     Optional, allows plugins to override how an event gets dispatched. By\n *     default, the listener is simply invoked.\n *\n * Each plugin that is injected into `EventsPluginHub` is immediately operable.\n *\n * @public\n */\nvar EventPluginHub = {\n\n  /**\n   * Methods for injecting dependencies.\n   */\n  injection: {\n\n    /**\n     * @param {array} InjectedEventPluginOrder\n     * @public\n     */\n    injectEventPluginOrder: EventPluginRegistry.injectEventPluginOrder,\n\n    /**\n     * @param {object} injectedNamesToPlugins Map from names to plugin modules.\n     */\n    injectEventPluginsByName: EventPluginRegistry.injectEventPluginsByName\n\n  },\n\n  /**\n   * Stores `listener` at `listenerBank[registrationName][key]`. Is idempotent.\n   *\n   * @param {object} inst The instance, which is the source of events.\n   * @param {string} registrationName Name of listener (e.g. `onClick`).\n   * @param {function} listener The callback to store.\n   */\n  putListener: function (inst, registrationName, listener) {\n    !(typeof listener === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected %s listener to be a function, instead got type %s', registrationName, typeof listener) : _prodInvariant('94', registrationName, typeof listener) : void 0;\n\n    var key = getDictionaryKey(inst);\n    var bankForRegistrationName = listenerBank[registrationName] || (listenerBank[registrationName] = {});\n    bankForRegistrationName[key] = listener;\n\n    var PluginModule = EventPluginRegistry.registrationNameModules[registrationName];\n    if (PluginModule && PluginModule.didPutListener) {\n      PluginModule.didPutListener(inst, registrationName, listener);\n    }\n  },\n\n  /**\n   * @param {object} inst The instance, which is the source of events.\n   * @param {string} registrationName Name of listener (e.g. `onClick`).\n   * @return {?function} The stored callback.\n   */\n  getListener: function (inst, registrationName) {\n    var bankForRegistrationName = listenerBank[registrationName];\n    var key = getDictionaryKey(inst);\n    return bankForRegistrationName && bankForRegistrationName[key];\n  },\n\n  /**\n   * Deletes a listener from the registration bank.\n   *\n   * @param {object} inst The instance, which is the source of events.\n   * @param {string} registrationName Name of listener (e.g. `onClick`).\n   */\n  deleteListener: function (inst, registrationName) {\n    var PluginModule = EventPluginRegistry.registrationNameModules[registrationName];\n    if (PluginModule && PluginModule.willDeleteListener) {\n      PluginModule.willDeleteListener(inst, registrationName);\n    }\n\n    var bankForRegistrationName = listenerBank[registrationName];\n    // TODO: This should never be null -- when is it?\n    if (bankForRegistrationName) {\n      var key = getDictionaryKey(inst);\n      delete bankForRegistrationName[key];\n    }\n  },\n\n  /**\n   * Deletes all listeners for the DOM element with the supplied ID.\n   *\n   * @param {object} inst The instance, which is the source of events.\n   */\n  deleteAllListeners: function (inst) {\n    var key = getDictionaryKey(inst);\n    for (var registrationName in listenerBank) {\n      if (!listenerBank.hasOwnProperty(registrationName)) {\n        continue;\n      }\n\n      if (!listenerBank[registrationName][key]) {\n        continue;\n      }\n\n      var PluginModule = EventPluginRegistry.registrationNameModules[registrationName];\n      if (PluginModule && PluginModule.willDeleteListener) {\n        PluginModule.willDeleteListener(inst, registrationName);\n      }\n\n      delete listenerBank[registrationName][key];\n    }\n  },\n\n  /**\n   * Allows registered plugins an opportunity to extract events from top-level\n   * native browser events.\n   *\n   * @return {*} An accumulation of synthetic events.\n   * @internal\n   */\n  extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n    var events;\n    var plugins = EventPluginRegistry.plugins;\n    for (var i = 0; i < plugins.length; i++) {\n      // Not every plugin in the ordering may be loaded at runtime.\n      var possiblePlugin = plugins[i];\n      if (possiblePlugin) {\n        var extractedEvents = possiblePlugin.extractEvents(topLevelType, targetInst, nativeEvent, nativeEventTarget);\n        if (extractedEvents) {\n          events = accumulateInto(events, extractedEvents);\n        }\n      }\n    }\n    return events;\n  },\n\n  /**\n   * Enqueues a synthetic event that should be dispatched when\n   * `processEventQueue` is invoked.\n   *\n   * @param {*} events An accumulation of synthetic events.\n   * @internal\n   */\n  enqueueEvents: function (events) {\n    if (events) {\n      eventQueue = accumulateInto(eventQueue, events);\n    }\n  },\n\n  /**\n   * Dispatches all synthetic events on the event queue.\n   *\n   * @internal\n   */\n  processEventQueue: function (simulated) {\n    // Set `eventQueue` to null before processing it so that we can tell if more\n    // events get enqueued while processing.\n    var processingEventQueue = eventQueue;\n    eventQueue = null;\n    if (simulated) {\n      forEachAccumulated(processingEventQueue, executeDispatchesAndReleaseSimulated);\n    } else {\n      forEachAccumulated(processingEventQueue, executeDispatchesAndReleaseTopLevel);\n    }\n    !!eventQueue ? process.env.NODE_ENV !== 'production' ? invariant(false, 'processEventQueue(): Additional events were enqueued while processing an event queue. Support for this has not yet been implemented.') : _prodInvariant('95') : void 0;\n    // This would be a good time to rethrow if any of the event handlers threw.\n    ReactErrorUtils.rethrowCaughtError();\n  },\n\n  /**\n   * These are needed for tests only. Do not use!\n   */\n  __purge: function () {\n    listenerBank = {};\n  },\n\n  __getListenerBank: function () {\n    return listenerBank;\n  }\n\n};\n\nmodule.exports = EventPluginHub;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/EventPluginHub.js\n ** module id = 46\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule EventPluginRegistry\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * Injectable ordering of event plugins.\n */\nvar EventPluginOrder = null;\n\n/**\n * Injectable mapping from names to event plugin modules.\n */\nvar namesToPlugins = {};\n\n/**\n * Recomputes the plugin list using the injected plugins and plugin ordering.\n *\n * @private\n */\nfunction recomputePluginOrdering() {\n  if (!EventPluginOrder) {\n    // Wait until an `EventPluginOrder` is injected.\n    return;\n  }\n  for (var pluginName in namesToPlugins) {\n    var PluginModule = namesToPlugins[pluginName];\n    var pluginIndex = EventPluginOrder.indexOf(pluginName);\n    !(pluginIndex > -1) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject event plugins that do not exist in the plugin ordering, `%s`.', pluginName) : _prodInvariant('96', pluginName) : void 0;\n    if (EventPluginRegistry.plugins[pluginIndex]) {\n      continue;\n    }\n    !PluginModule.extractEvents ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Event plugins must implement an `extractEvents` method, but `%s` does not.', pluginName) : _prodInvariant('97', pluginName) : void 0;\n    EventPluginRegistry.plugins[pluginIndex] = PluginModule;\n    var publishedEvents = PluginModule.eventTypes;\n    for (var eventName in publishedEvents) {\n      !publishEventForPlugin(publishedEvents[eventName], PluginModule, eventName) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Failed to publish event `%s` for plugin `%s`.', eventName, pluginName) : _prodInvariant('98', eventName, pluginName) : void 0;\n    }\n  }\n}\n\n/**\n * Publishes an event so that it can be dispatched by the supplied plugin.\n *\n * @param {object} dispatchConfig Dispatch configuration for the event.\n * @param {object} PluginModule Plugin publishing the event.\n * @return {boolean} True if the event was successfully published.\n * @private\n */\nfunction publishEventForPlugin(dispatchConfig, PluginModule, eventName) {\n  !!EventPluginRegistry.eventNameDispatchConfigs.hasOwnProperty(eventName) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginHub: More than one plugin attempted to publish the same event name, `%s`.', eventName) : _prodInvariant('99', eventName) : void 0;\n  EventPluginRegistry.eventNameDispatchConfigs[eventName] = dispatchConfig;\n\n  var phasedRegistrationNames = dispatchConfig.phasedRegistrationNames;\n  if (phasedRegistrationNames) {\n    for (var phaseName in phasedRegistrationNames) {\n      if (phasedRegistrationNames.hasOwnProperty(phaseName)) {\n        var phasedRegistrationName = phasedRegistrationNames[phaseName];\n        publishRegistrationName(phasedRegistrationName, PluginModule, eventName);\n      }\n    }\n    return true;\n  } else if (dispatchConfig.registrationName) {\n    publishRegistrationName(dispatchConfig.registrationName, PluginModule, eventName);\n    return true;\n  }\n  return false;\n}\n\n/**\n * Publishes a registration name that is used to identify dispatched events and\n * can be used with `EventPluginHub.putListener` to register listeners.\n *\n * @param {string} registrationName Registration name to add.\n * @param {object} PluginModule Plugin publishing the event.\n * @private\n */\nfunction publishRegistrationName(registrationName, PluginModule, eventName) {\n  !!EventPluginRegistry.registrationNameModules[registrationName] ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginHub: More than one plugin attempted to publish the same registration name, `%s`.', registrationName) : _prodInvariant('100', registrationName) : void 0;\n  EventPluginRegistry.registrationNameModules[registrationName] = PluginModule;\n  EventPluginRegistry.registrationNameDependencies[registrationName] = PluginModule.eventTypes[eventName].dependencies;\n\n  if (process.env.NODE_ENV !== 'production') {\n    var lowerCasedName = registrationName.toLowerCase();\n    EventPluginRegistry.possibleRegistrationNames[lowerCasedName] = registrationName;\n\n    if (registrationName === 'onDoubleClick') {\n      EventPluginRegistry.possibleRegistrationNames.ondblclick = registrationName;\n    }\n  }\n}\n\n/**\n * Registers plugins so that they can extract and dispatch events.\n *\n * @see {EventPluginHub}\n */\nvar EventPluginRegistry = {\n\n  /**\n   * Ordered list of injected plugins.\n   */\n  plugins: [],\n\n  /**\n   * Mapping from event name to dispatch config\n   */\n  eventNameDispatchConfigs: {},\n\n  /**\n   * Mapping from registration name to plugin module\n   */\n  registrationNameModules: {},\n\n  /**\n   * Mapping from registration name to event name\n   */\n  registrationNameDependencies: {},\n\n  /**\n   * Mapping from lowercase registration names to the properly cased version,\n   * used to warn in the case of missing event handlers. Available\n   * only in __DEV__.\n   * @type {Object}\n   */\n  possibleRegistrationNames: process.env.NODE_ENV !== 'production' ? {} : null,\n\n  /**\n   * Injects an ordering of plugins (by plugin name). This allows the ordering\n   * to be decoupled from injection of the actual plugins so that ordering is\n   * always deterministic regardless of packaging, on-the-fly injection, etc.\n   *\n   * @param {array} InjectedEventPluginOrder\n   * @internal\n   * @see {EventPluginHub.injection.injectEventPluginOrder}\n   */\n  injectEventPluginOrder: function (InjectedEventPluginOrder) {\n    !!EventPluginOrder ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject event plugin ordering more than once. You are likely trying to load more than one copy of React.') : _prodInvariant('101') : void 0;\n    // Clone the ordering so it cannot be dynamically mutated.\n    EventPluginOrder = Array.prototype.slice.call(InjectedEventPluginOrder);\n    recomputePluginOrdering();\n  },\n\n  /**\n   * Injects plugins to be used by `EventPluginHub`. The plugin names must be\n   * in the ordering injected by `injectEventPluginOrder`.\n   *\n   * Plugins can be injected as part of page initialization or on-the-fly.\n   *\n   * @param {object} injectedNamesToPlugins Map from names to plugin modules.\n   * @internal\n   * @see {EventPluginHub.injection.injectEventPluginsByName}\n   */\n  injectEventPluginsByName: function (injectedNamesToPlugins) {\n    var isOrderingDirty = false;\n    for (var pluginName in injectedNamesToPlugins) {\n      if (!injectedNamesToPlugins.hasOwnProperty(pluginName)) {\n        continue;\n      }\n      var PluginModule = injectedNamesToPlugins[pluginName];\n      if (!namesToPlugins.hasOwnProperty(pluginName) || namesToPlugins[pluginName] !== PluginModule) {\n        !!namesToPlugins[pluginName] ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject two different event plugins using the same name, `%s`.', pluginName) : _prodInvariant('102', pluginName) : void 0;\n        namesToPlugins[pluginName] = PluginModule;\n        isOrderingDirty = true;\n      }\n    }\n    if (isOrderingDirty) {\n      recomputePluginOrdering();\n    }\n  },\n\n  /**\n   * Looks up the plugin for the supplied event.\n   *\n   * @param {object} event A synthetic event.\n   * @return {?object} The plugin that created the supplied event.\n   * @internal\n   */\n  getPluginModuleForEvent: function (event) {\n    var dispatchConfig = event.dispatchConfig;\n    if (dispatchConfig.registrationName) {\n      return EventPluginRegistry.registrationNameModules[dispatchConfig.registrationName] || null;\n    }\n    for (var phase in dispatchConfig.phasedRegistrationNames) {\n      if (!dispatchConfig.phasedRegistrationNames.hasOwnProperty(phase)) {\n        continue;\n      }\n      var PluginModule = EventPluginRegistry.registrationNameModules[dispatchConfig.phasedRegistrationNames[phase]];\n      if (PluginModule) {\n        return PluginModule;\n      }\n    }\n    return null;\n  },\n\n  /**\n   * Exposed for unit testing.\n   * @private\n   */\n  _resetEventPlugins: function () {\n    EventPluginOrder = null;\n    for (var pluginName in namesToPlugins) {\n      if (namesToPlugins.hasOwnProperty(pluginName)) {\n        delete namesToPlugins[pluginName];\n      }\n    }\n    EventPluginRegistry.plugins.length = 0;\n\n    var eventNameDispatchConfigs = EventPluginRegistry.eventNameDispatchConfigs;\n    for (var eventName in eventNameDispatchConfigs) {\n      if (eventNameDispatchConfigs.hasOwnProperty(eventName)) {\n        delete eventNameDispatchConfigs[eventName];\n      }\n    }\n\n    var registrationNameModules = EventPluginRegistry.registrationNameModules;\n    for (var registrationName in registrationNameModules) {\n      if (registrationNameModules.hasOwnProperty(registrationName)) {\n        delete registrationNameModules[registrationName];\n      }\n    }\n\n    if (process.env.NODE_ENV !== 'production') {\n      var possibleRegistrationNames = EventPluginRegistry.possibleRegistrationNames;\n      for (var lowerCasedName in possibleRegistrationNames) {\n        if (possibleRegistrationNames.hasOwnProperty(lowerCasedName)) {\n          delete possibleRegistrationNames[lowerCasedName];\n        }\n      }\n    }\n  }\n\n};\n\nmodule.exports = EventPluginRegistry;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/EventPluginRegistry.js\n ** module id = 47\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule EventPluginUtils\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar EventConstants = require('./EventConstants');\nvar ReactErrorUtils = require('./ReactErrorUtils');\n\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\n/**\n * Injected dependencies:\n */\n\n/**\n * - `ComponentTree`: [required] Module that can convert between React instances\n *   and actual node references.\n */\nvar ComponentTree;\nvar TreeTraversal;\nvar injection = {\n  injectComponentTree: function (Injected) {\n    ComponentTree = Injected;\n    if (process.env.NODE_ENV !== 'production') {\n      process.env.NODE_ENV !== 'production' ? warning(Injected && Injected.getNodeFromInstance && Injected.getInstanceFromNode, 'EventPluginUtils.injection.injectComponentTree(...): Injected ' + 'module is missing getNodeFromInstance or getInstanceFromNode.') : void 0;\n    }\n  },\n  injectTreeTraversal: function (Injected) {\n    TreeTraversal = Injected;\n    if (process.env.NODE_ENV !== 'production') {\n      process.env.NODE_ENV !== 'production' ? warning(Injected && Injected.isAncestor && Injected.getLowestCommonAncestor, 'EventPluginUtils.injection.injectTreeTraversal(...): Injected ' + 'module is missing isAncestor or getLowestCommonAncestor.') : void 0;\n    }\n  }\n};\n\nvar topLevelTypes = EventConstants.topLevelTypes;\n\nfunction isEndish(topLevelType) {\n  return topLevelType === topLevelTypes.topMouseUp || topLevelType === topLevelTypes.topTouchEnd || topLevelType === topLevelTypes.topTouchCancel;\n}\n\nfunction isMoveish(topLevelType) {\n  return topLevelType === topLevelTypes.topMouseMove || topLevelType === topLevelTypes.topTouchMove;\n}\nfunction isStartish(topLevelType) {\n  return topLevelType === topLevelTypes.topMouseDown || topLevelType === topLevelTypes.topTouchStart;\n}\n\nvar validateEventDispatches;\nif (process.env.NODE_ENV !== 'production') {\n  validateEventDispatches = function (event) {\n    var dispatchListeners = event._dispatchListeners;\n    var dispatchInstances = event._dispatchInstances;\n\n    var listenersIsArr = Array.isArray(dispatchListeners);\n    var listenersLen = listenersIsArr ? dispatchListeners.length : dispatchListeners ? 1 : 0;\n\n    var instancesIsArr = Array.isArray(dispatchInstances);\n    var instancesLen = instancesIsArr ? dispatchInstances.length : dispatchInstances ? 1 : 0;\n\n    process.env.NODE_ENV !== 'production' ? warning(instancesIsArr === listenersIsArr && instancesLen === listenersLen, 'EventPluginUtils: Invalid `event`.') : void 0;\n  };\n}\n\n/**\n * Dispatch the event to the listener.\n * @param {SyntheticEvent} event SyntheticEvent to handle\n * @param {boolean} simulated If the event is simulated (changes exn behavior)\n * @param {function} listener Application-level callback\n * @param {*} inst Internal component instance\n */\nfunction executeDispatch(event, simulated, listener, inst) {\n  var type = event.type || 'unknown-event';\n  event.currentTarget = EventPluginUtils.getNodeFromInstance(inst);\n  if (simulated) {\n    ReactErrorUtils.invokeGuardedCallbackWithCatch(type, listener, event);\n  } else {\n    ReactErrorUtils.invokeGuardedCallback(type, listener, event);\n  }\n  event.currentTarget = null;\n}\n\n/**\n * Standard/simple iteration through an event's collected dispatches.\n */\nfunction executeDispatchesInOrder(event, simulated) {\n  var dispatchListeners = event._dispatchListeners;\n  var dispatchInstances = event._dispatchInstances;\n  if (process.env.NODE_ENV !== 'production') {\n    validateEventDispatches(event);\n  }\n  if (Array.isArray(dispatchListeners)) {\n    for (var i = 0; i < dispatchListeners.length; i++) {\n      if (event.isPropagationStopped()) {\n        break;\n      }\n      // Listeners and Instances are two parallel arrays that are always in sync.\n      executeDispatch(event, simulated, dispatchListeners[i], dispatchInstances[i]);\n    }\n  } else if (dispatchListeners) {\n    executeDispatch(event, simulated, dispatchListeners, dispatchInstances);\n  }\n  event._dispatchListeners = null;\n  event._dispatchInstances = null;\n}\n\n/**\n * Standard/simple iteration through an event's collected dispatches, but stops\n * at the first dispatch execution returning true, and returns that id.\n *\n * @return {?string} id of the first dispatch execution who's listener returns\n * true, or null if no listener returned true.\n */\nfunction executeDispatchesInOrderStopAtTrueImpl(event) {\n  var dispatchListeners = event._dispatchListeners;\n  var dispatchInstances = event._dispatchInstances;\n  if (process.env.NODE_ENV !== 'production') {\n    validateEventDispatches(event);\n  }\n  if (Array.isArray(dispatchListeners)) {\n    for (var i = 0; i < dispatchListeners.length; i++) {\n      if (event.isPropagationStopped()) {\n        break;\n      }\n      // Listeners and Instances are two parallel arrays that are always in sync.\n      if (dispatchListeners[i](event, dispatchInstances[i])) {\n        return dispatchInstances[i];\n      }\n    }\n  } else if (dispatchListeners) {\n    if (dispatchListeners(event, dispatchInstances)) {\n      return dispatchInstances;\n    }\n  }\n  return null;\n}\n\n/**\n * @see executeDispatchesInOrderStopAtTrueImpl\n */\nfunction executeDispatchesInOrderStopAtTrue(event) {\n  var ret = executeDispatchesInOrderStopAtTrueImpl(event);\n  event._dispatchInstances = null;\n  event._dispatchListeners = null;\n  return ret;\n}\n\n/**\n * Execution of a \"direct\" dispatch - there must be at most one dispatch\n * accumulated on the event or it is considered an error. It doesn't really make\n * sense for an event with multiple dispatches (bubbled) to keep track of the\n * return values at each dispatch execution, but it does tend to make sense when\n * dealing with \"direct\" dispatches.\n *\n * @return {*} The return value of executing the single dispatch.\n */\nfunction executeDirectDispatch(event) {\n  if (process.env.NODE_ENV !== 'production') {\n    validateEventDispatches(event);\n  }\n  var dispatchListener = event._dispatchListeners;\n  var dispatchInstance = event._dispatchInstances;\n  !!Array.isArray(dispatchListener) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'executeDirectDispatch(...): Invalid `event`.') : _prodInvariant('103') : void 0;\n  event.currentTarget = dispatchListener ? EventPluginUtils.getNodeFromInstance(dispatchInstance) : null;\n  var res = dispatchListener ? dispatchListener(event) : null;\n  event.currentTarget = null;\n  event._dispatchListeners = null;\n  event._dispatchInstances = null;\n  return res;\n}\n\n/**\n * @param {SyntheticEvent} event\n * @return {boolean} True iff number of dispatches accumulated is greater than 0.\n */\nfunction hasDispatches(event) {\n  return !!event._dispatchListeners;\n}\n\n/**\n * General utilities that are useful in creating custom Event Plugins.\n */\nvar EventPluginUtils = {\n  isEndish: isEndish,\n  isMoveish: isMoveish,\n  isStartish: isStartish,\n\n  executeDirectDispatch: executeDirectDispatch,\n  executeDispatchesInOrder: executeDispatchesInOrder,\n  executeDispatchesInOrderStopAtTrue: executeDispatchesInOrderStopAtTrue,\n  hasDispatches: hasDispatches,\n\n  getInstanceFromNode: function (node) {\n    return ComponentTree.getInstanceFromNode(node);\n  },\n  getNodeFromInstance: function (node) {\n    return ComponentTree.getNodeFromInstance(node);\n  },\n  isAncestor: function (a, b) {\n    return TreeTraversal.isAncestor(a, b);\n  },\n  getLowestCommonAncestor: function (a, b) {\n    return TreeTraversal.getLowestCommonAncestor(a, b);\n  },\n  getParentInstance: function (inst) {\n    return TreeTraversal.getParentInstance(inst);\n  },\n  traverseTwoPhase: function (target, fn, arg) {\n    return TreeTraversal.traverseTwoPhase(target, fn, arg);\n  },\n  traverseEnterLeave: function (from, to, fn, argFrom, argTo) {\n    return TreeTraversal.traverseEnterLeave(from, to, fn, argFrom, argTo);\n  },\n\n  injection: injection\n};\n\nmodule.exports = EventPluginUtils;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/EventPluginUtils.js\n ** module id = 48\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactErrorUtils\n */\n\n'use strict';\n\nvar caughtError = null;\n\n/**\n * Call a function while guarding against errors that happens within it.\n *\n * @param {?String} name of the guard to use for logging or debugging\n * @param {Function} func The function to invoke\n * @param {*} a First argument\n * @param {*} b Second argument\n */\nfunction invokeGuardedCallback(name, func, a, b) {\n  try {\n    return func(a, b);\n  } catch (x) {\n    if (caughtError === null) {\n      caughtError = x;\n    }\n    return undefined;\n  }\n}\n\nvar ReactErrorUtils = {\n  invokeGuardedCallback: invokeGuardedCallback,\n\n  /**\n   * Invoked by ReactTestUtils.Simulate so that any errors thrown by the event\n   * handler are sure to be rethrown by rethrowCaughtError.\n   */\n  invokeGuardedCallbackWithCatch: invokeGuardedCallback,\n\n  /**\n   * During execution of guarded functions we will capture the first error which\n   * we will rethrow to be handled by the top level error handler.\n   */\n  rethrowCaughtError: function () {\n    if (caughtError) {\n      var error = caughtError;\n      caughtError = null;\n      throw error;\n    }\n  }\n};\n\nif (process.env.NODE_ENV !== 'production') {\n  /**\n   * To help development we can get better devtools integration by simulating a\n   * real browser event.\n   */\n  if (typeof window !== 'undefined' && typeof window.dispatchEvent === 'function' && typeof document !== 'undefined' && typeof document.createEvent === 'function') {\n    var fakeNode = document.createElement('react');\n    ReactErrorUtils.invokeGuardedCallback = function (name, func, a, b) {\n      var boundFunc = func.bind(null, a, b);\n      var evtType = 'react-' + name;\n      fakeNode.addEventListener(evtType, boundFunc, false);\n      var evt = document.createEvent('Event');\n      evt.initEvent(evtType, false, false);\n      fakeNode.dispatchEvent(evt);\n      fakeNode.removeEventListener(evtType, boundFunc, false);\n    };\n  }\n}\n\nmodule.exports = ReactErrorUtils;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactErrorUtils.js\n ** module id = 49\n ** module chunks = 4\n **/","/**\n * Copyright 2014-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule accumulateInto\n * \n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * Accumulates items that must not be null or undefined into the first one. This\n * is used to conserve memory by avoiding array allocations, and thus sacrifices\n * API cleanness. Since `current` can be null before being passed in and not\n * null after this function, make sure to assign it back to `current`:\n *\n * `a = accumulateInto(a, b);`\n *\n * This API should be sparingly used. Try `accumulate` for something cleaner.\n *\n * @return {*|array<*>} An accumulation of items.\n */\n\nfunction accumulateInto(current, next) {\n  !(next != null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'accumulateInto(...): Accumulated items must not be null or undefined.') : _prodInvariant('30') : void 0;\n\n  if (current == null) {\n    return next;\n  }\n\n  // Both are not empty. Warning: Never call x.concat(y) when you are not\n  // certain that x is an Array (x could be a string with concat method).\n  if (Array.isArray(current)) {\n    if (Array.isArray(next)) {\n      current.push.apply(current, next);\n      return current;\n    }\n    current.push(next);\n    return current;\n  }\n\n  if (Array.isArray(next)) {\n    // A bit too dangerous to mutate `next`.\n    return [current].concat(next);\n  }\n\n  return [current, next];\n}\n\nmodule.exports = accumulateInto;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/accumulateInto.js\n ** module id = 50\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule forEachAccumulated\n * \n */\n\n'use strict';\n\n/**\n * @param {array} arr an \"accumulation\" of items which is either an Array or\n * a single item. Useful when paired with the `accumulate` module. This is a\n * simple utility that allows us to reason about a collection of items, but\n * handling the case when there is exactly one item (and we do not need to\n * allocate an array).\n */\n\nfunction forEachAccumulated(arr, cb, scope) {\n  if (Array.isArray(arr)) {\n    arr.forEach(cb, scope);\n  } else if (arr) {\n    cb.call(scope, arr);\n  }\n}\n\nmodule.exports = forEachAccumulated;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/forEachAccumulated.js\n ** module id = 51\n ** module chunks = 4\n **/","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n\n/**\n * Simple, lightweight module assisting with the detection and context of\n * Worker. Helps avoid circular dependencies and allows code to reason about\n * whether or not they are in a Worker, even if they never include the main\n * `ReactWorker` dependency.\n */\nvar ExecutionEnvironment = {\n\n  canUseDOM: canUseDOM,\n\n  canUseWorkers: typeof Worker !== 'undefined',\n\n  canUseEventListeners: canUseDOM && !!(window.addEventListener || window.attachEvent),\n\n  canUseViewport: canUseDOM && !!window.screen,\n\n  isInWorker: !canUseDOM // For now, this is true - might change in the future.\n\n};\n\nmodule.exports = ExecutionEnvironment;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/fbjs/lib/ExecutionEnvironment.js\n ** module id = 52\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule FallbackCompositionState\n */\n\n'use strict';\n\nvar _assign = require('object-assign');\n\nvar PooledClass = require('./PooledClass');\n\nvar getTextContentAccessor = require('./getTextContentAccessor');\n\n/**\n * This helper class stores information about text content of a target node,\n * allowing comparison of content before and after a given event.\n *\n * Identify the node where selection currently begins, then observe\n * both its text content and its current position in the DOM. Since the\n * browser may natively replace the target node during composition, we can\n * use its position to find its replacement.\n *\n * @param {DOMEventTarget} root\n */\nfunction FallbackCompositionState(root) {\n  this._root = root;\n  this._startText = this.getText();\n  this._fallbackText = null;\n}\n\n_assign(FallbackCompositionState.prototype, {\n  destructor: function () {\n    this._root = null;\n    this._startText = null;\n    this._fallbackText = null;\n  },\n\n  /**\n   * Get current text of input.\n   *\n   * @return {string}\n   */\n  getText: function () {\n    if ('value' in this._root) {\n      return this._root.value;\n    }\n    return this._root[getTextContentAccessor()];\n  },\n\n  /**\n   * Determine the differing substring between the initially stored\n   * text content and the current content.\n   *\n   * @return {string}\n   */\n  getData: function () {\n    if (this._fallbackText) {\n      return this._fallbackText;\n    }\n\n    var start;\n    var startValue = this._startText;\n    var startLength = startValue.length;\n    var end;\n    var endValue = this.getText();\n    var endLength = endValue.length;\n\n    for (start = 0; start < startLength; start++) {\n      if (startValue[start] !== endValue[start]) {\n        break;\n      }\n    }\n\n    var minEnd = startLength - start;\n    for (end = 1; end <= minEnd; end++) {\n      if (startValue[startLength - end] !== endValue[endLength - end]) {\n        break;\n      }\n    }\n\n    var sliceTail = end > 1 ? 1 - end : undefined;\n    this._fallbackText = endValue.slice(start, sliceTail);\n    return this._fallbackText;\n  }\n});\n\nPooledClass.addPoolingTo(FallbackCompositionState);\n\nmodule.exports = FallbackCompositionState;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/FallbackCompositionState.js\n ** module id = 53\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getTextContentAccessor\n */\n\n'use strict';\n\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\n\nvar contentKey = null;\n\n/**\n * Gets the key used to access text content on a DOM node.\n *\n * @return {?string} Key used to access text content.\n * @internal\n */\nfunction getTextContentAccessor() {\n  if (!contentKey && ExecutionEnvironment.canUseDOM) {\n    // Prefer textContent to innerText because many browsers support both but\n    // SVG <text> elements don't support innerText even when <div> does.\n    contentKey = 'textContent' in document.documentElement ? 'textContent' : 'innerText';\n  }\n  return contentKey;\n}\n\nmodule.exports = getTextContentAccessor;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/getTextContentAccessor.js\n ** module id = 54\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticCompositionEvent\n */\n\n'use strict';\n\nvar SyntheticEvent = require('./SyntheticEvent');\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/DOM-Level-3-Events/#events-compositionevents\n */\nvar CompositionEventInterface = {\n  data: null\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticCompositionEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n  return SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticEvent.augmentClass(SyntheticCompositionEvent, CompositionEventInterface);\n\nmodule.exports = SyntheticCompositionEvent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SyntheticCompositionEvent.js\n ** module id = 55\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticEvent\n */\n\n'use strict';\n\nvar _assign = require('object-assign');\n\nvar PooledClass = require('./PooledClass');\n\nvar emptyFunction = require('fbjs/lib/emptyFunction');\nvar warning = require('fbjs/lib/warning');\n\nvar didWarnForAddedNewProperty = false;\nvar isProxySupported = typeof Proxy === 'function';\n\nvar shouldBeReleasedProperties = ['dispatchConfig', '_targetInst', 'nativeEvent', 'isDefaultPrevented', 'isPropagationStopped', '_dispatchListeners', '_dispatchInstances'];\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar EventInterface = {\n  type: null,\n  target: null,\n  // currentTarget is set when dispatching; no use in copying it here\n  currentTarget: emptyFunction.thatReturnsNull,\n  eventPhase: null,\n  bubbles: null,\n  cancelable: null,\n  timeStamp: function (event) {\n    return event.timeStamp || Date.now();\n  },\n  defaultPrevented: null,\n  isTrusted: null\n};\n\n/**\n * Synthetic events are dispatched by event plugins, typically in response to a\n * top-level event delegation handler.\n *\n * These systems should generally use pooling to reduce the frequency of garbage\n * collection. The system should check `isPersistent` to determine whether the\n * event should be released into the pool after being dispatched. Users that\n * need a persisted event should invoke `persist`.\n *\n * Synthetic events (and subclasses) implement the DOM Level 3 Events API by\n * normalizing browser quirks. Subclasses do not necessarily have to implement a\n * DOM interface; custom application-specific events can also subclass this.\n *\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {*} targetInst Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @param {DOMEventTarget} nativeEventTarget Target node.\n */\nfunction SyntheticEvent(dispatchConfig, targetInst, nativeEvent, nativeEventTarget) {\n  if (process.env.NODE_ENV !== 'production') {\n    // these have a getter/setter for warnings\n    delete this.nativeEvent;\n    delete this.preventDefault;\n    delete this.stopPropagation;\n  }\n\n  this.dispatchConfig = dispatchConfig;\n  this._targetInst = targetInst;\n  this.nativeEvent = nativeEvent;\n\n  var Interface = this.constructor.Interface;\n  for (var propName in Interface) {\n    if (!Interface.hasOwnProperty(propName)) {\n      continue;\n    }\n    if (process.env.NODE_ENV !== 'production') {\n      delete this[propName]; // this has a getter/setter for warnings\n    }\n    var normalize = Interface[propName];\n    if (normalize) {\n      this[propName] = normalize(nativeEvent);\n    } else {\n      if (propName === 'target') {\n        this.target = nativeEventTarget;\n      } else {\n        this[propName] = nativeEvent[propName];\n      }\n    }\n  }\n\n  var defaultPrevented = nativeEvent.defaultPrevented != null ? nativeEvent.defaultPrevented : nativeEvent.returnValue === false;\n  if (defaultPrevented) {\n    this.isDefaultPrevented = emptyFunction.thatReturnsTrue;\n  } else {\n    this.isDefaultPrevented = emptyFunction.thatReturnsFalse;\n  }\n  this.isPropagationStopped = emptyFunction.thatReturnsFalse;\n  return this;\n}\n\n_assign(SyntheticEvent.prototype, {\n\n  preventDefault: function () {\n    this.defaultPrevented = true;\n    var event = this.nativeEvent;\n    if (!event) {\n      return;\n    }\n\n    if (event.preventDefault) {\n      event.preventDefault();\n    } else {\n      event.returnValue = false;\n    }\n    this.isDefaultPrevented = emptyFunction.thatReturnsTrue;\n  },\n\n  stopPropagation: function () {\n    var event = this.nativeEvent;\n    if (!event) {\n      return;\n    }\n\n    if (event.stopPropagation) {\n      event.stopPropagation();\n    } else {\n      event.cancelBubble = true;\n    }\n    this.isPropagationStopped = emptyFunction.thatReturnsTrue;\n  },\n\n  /**\n   * We release all dispatched `SyntheticEvent`s after each event loop, adding\n   * them back into the pool. This allows a way to hold onto a reference that\n   * won't be added back into the pool.\n   */\n  persist: function () {\n    this.isPersistent = emptyFunction.thatReturnsTrue;\n  },\n\n  /**\n   * Checks if this event should be released back into the pool.\n   *\n   * @return {boolean} True if this should not be released, false otherwise.\n   */\n  isPersistent: emptyFunction.thatReturnsFalse,\n\n  /**\n   * `PooledClass` looks for `destructor` on each instance it releases.\n   */\n  destructor: function () {\n    var Interface = this.constructor.Interface;\n    for (var propName in Interface) {\n      if (process.env.NODE_ENV !== 'production') {\n        Object.defineProperty(this, propName, getPooledWarningPropertyDefinition(propName, Interface[propName]));\n      } else {\n        this[propName] = null;\n      }\n    }\n    for (var i = 0; i < shouldBeReleasedProperties.length; i++) {\n      this[shouldBeReleasedProperties[i]] = null;\n    }\n    if (process.env.NODE_ENV !== 'production') {\n      Object.defineProperty(this, 'nativeEvent', getPooledWarningPropertyDefinition('nativeEvent', null));\n      Object.defineProperty(this, 'preventDefault', getPooledWarningPropertyDefinition('preventDefault', emptyFunction));\n      Object.defineProperty(this, 'stopPropagation', getPooledWarningPropertyDefinition('stopPropagation', emptyFunction));\n    }\n  }\n\n});\n\nSyntheticEvent.Interface = EventInterface;\n\nif (process.env.NODE_ENV !== 'production') {\n  if (isProxySupported) {\n    /*eslint-disable no-func-assign */\n    SyntheticEvent = new Proxy(SyntheticEvent, {\n      construct: function (target, args) {\n        return this.apply(target, Object.create(target.prototype), args);\n      },\n      apply: function (constructor, that, args) {\n        return new Proxy(constructor.apply(that, args), {\n          set: function (target, prop, value) {\n            if (prop !== 'isPersistent' && !target.constructor.Interface.hasOwnProperty(prop) && shouldBeReleasedProperties.indexOf(prop) === -1) {\n              process.env.NODE_ENV !== 'production' ? warning(didWarnForAddedNewProperty || target.isPersistent(), 'This synthetic event is reused for performance reasons. If you\\'re ' + 'seeing this, you\\'re adding a new property in the synthetic event object. ' + 'The property is never released. See ' + 'https://fb.me/react-event-pooling for more information.') : void 0;\n              didWarnForAddedNewProperty = true;\n            }\n            target[prop] = value;\n            return true;\n          }\n        });\n      }\n    });\n    /*eslint-enable no-func-assign */\n  }\n}\n/**\n * Helper to reduce boilerplate when creating subclasses.\n *\n * @param {function} Class\n * @param {?object} Interface\n */\nSyntheticEvent.augmentClass = function (Class, Interface) {\n  var Super = this;\n\n  var E = function () {};\n  E.prototype = Super.prototype;\n  var prototype = new E();\n\n  _assign(prototype, Class.prototype);\n  Class.prototype = prototype;\n  Class.prototype.constructor = Class;\n\n  Class.Interface = _assign({}, Super.Interface, Interface);\n  Class.augmentClass = Super.augmentClass;\n\n  PooledClass.addPoolingTo(Class, PooledClass.fourArgumentPooler);\n};\n\nPooledClass.addPoolingTo(SyntheticEvent, PooledClass.fourArgumentPooler);\n\nmodule.exports = SyntheticEvent;\n\n/**\n  * Helper to nullify syntheticEvent instance properties when destructing\n  *\n  * @param {object} SyntheticEvent\n  * @param {String} propName\n  * @return {object} defineProperty object\n  */\nfunction getPooledWarningPropertyDefinition(propName, getVal) {\n  var isFunction = typeof getVal === 'function';\n  return {\n    configurable: true,\n    set: set,\n    get: get\n  };\n\n  function set(val) {\n    var action = isFunction ? 'setting the method' : 'setting the property';\n    warn(action, 'This is effectively a no-op');\n    return val;\n  }\n\n  function get() {\n    var action = isFunction ? 'accessing the method' : 'accessing the property';\n    var result = isFunction ? 'This is a no-op function' : 'This is set to null';\n    warn(action, result);\n    return getVal;\n  }\n\n  function warn(action, result) {\n    var warningCondition = false;\n    process.env.NODE_ENV !== 'production' ? warning(warningCondition, 'This synthetic event is reused for performance reasons. If you\\'re seeing this, ' + 'you\\'re %s `%s` on a released/nullified synthetic event. %s. ' + 'If you must keep the original synthetic event around, use event.persist(). ' + 'See https://fb.me/react-event-pooling for more information.', action, propName, result) : void 0;\n  }\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SyntheticEvent.js\n ** module id = 56\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticInputEvent\n */\n\n'use strict';\n\nvar SyntheticEvent = require('./SyntheticEvent');\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105\n *      /#events-inputevents\n */\nvar InputEventInterface = {\n  data: null\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticInputEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n  return SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticEvent.augmentClass(SyntheticInputEvent, InputEventInterface);\n\nmodule.exports = SyntheticInputEvent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SyntheticInputEvent.js\n ** module id = 57\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ChangeEventPlugin\n */\n\n'use strict';\n\nvar EventConstants = require('./EventConstants');\nvar EventPluginHub = require('./EventPluginHub');\nvar EventPropagators = require('./EventPropagators');\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\nvar ReactDOMComponentTree = require('./ReactDOMComponentTree');\nvar ReactUpdates = require('./ReactUpdates');\nvar SyntheticEvent = require('./SyntheticEvent');\n\nvar getEventTarget = require('./getEventTarget');\nvar isEventSupported = require('./isEventSupported');\nvar isTextInputElement = require('./isTextInputElement');\nvar keyOf = require('fbjs/lib/keyOf');\n\nvar topLevelTypes = EventConstants.topLevelTypes;\n\nvar eventTypes = {\n  change: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onChange: null }),\n      captured: keyOf({ onChangeCapture: null })\n    },\n    dependencies: [topLevelTypes.topBlur, topLevelTypes.topChange, topLevelTypes.topClick, topLevelTypes.topFocus, topLevelTypes.topInput, topLevelTypes.topKeyDown, topLevelTypes.topKeyUp, topLevelTypes.topSelectionChange]\n  }\n};\n\n/**\n * For IE shims\n */\nvar activeElement = null;\nvar activeElementInst = null;\nvar activeElementValue = null;\nvar activeElementValueProp = null;\n\n/**\n * SECTION: handle `change` event\n */\nfunction shouldUseChangeEvent(elem) {\n  var nodeName = elem.nodeName && elem.nodeName.toLowerCase();\n  return nodeName === 'select' || nodeName === 'input' && elem.type === 'file';\n}\n\nvar doesChangeEventBubble = false;\nif (ExecutionEnvironment.canUseDOM) {\n  // See `handleChange` comment below\n  doesChangeEventBubble = isEventSupported('change') && (!('documentMode' in document) || document.documentMode > 8);\n}\n\nfunction manualDispatchChangeEvent(nativeEvent) {\n  var event = SyntheticEvent.getPooled(eventTypes.change, activeElementInst, nativeEvent, getEventTarget(nativeEvent));\n  EventPropagators.accumulateTwoPhaseDispatches(event);\n\n  // If change and propertychange bubbled, we'd just bind to it like all the\n  // other events and have it go through ReactBrowserEventEmitter. Since it\n  // doesn't, we manually listen for the events and so we have to enqueue and\n  // process the abstract event manually.\n  //\n  // Batching is necessary here in order to ensure that all event handlers run\n  // before the next rerender (including event handlers attached to ancestor\n  // elements instead of directly on the input). Without this, controlled\n  // components don't work properly in conjunction with event bubbling because\n  // the component is rerendered and the value reverted before all the event\n  // handlers can run. See https://github.com/facebook/react/issues/708.\n  ReactUpdates.batchedUpdates(runEventInBatch, event);\n}\n\nfunction runEventInBatch(event) {\n  EventPluginHub.enqueueEvents(event);\n  EventPluginHub.processEventQueue(false);\n}\n\nfunction startWatchingForChangeEventIE8(target, targetInst) {\n  activeElement = target;\n  activeElementInst = targetInst;\n  activeElement.attachEvent('onchange', manualDispatchChangeEvent);\n}\n\nfunction stopWatchingForChangeEventIE8() {\n  if (!activeElement) {\n    return;\n  }\n  activeElement.detachEvent('onchange', manualDispatchChangeEvent);\n  activeElement = null;\n  activeElementInst = null;\n}\n\nfunction getTargetInstForChangeEvent(topLevelType, targetInst) {\n  if (topLevelType === topLevelTypes.topChange) {\n    return targetInst;\n  }\n}\nfunction handleEventsForChangeEventIE8(topLevelType, target, targetInst) {\n  if (topLevelType === topLevelTypes.topFocus) {\n    // stopWatching() should be a noop here but we call it just in case we\n    // missed a blur event somehow.\n    stopWatchingForChangeEventIE8();\n    startWatchingForChangeEventIE8(target, targetInst);\n  } else if (topLevelType === topLevelTypes.topBlur) {\n    stopWatchingForChangeEventIE8();\n  }\n}\n\n/**\n * SECTION: handle `input` event\n */\nvar isInputEventSupported = false;\nif (ExecutionEnvironment.canUseDOM) {\n  // IE9 claims to support the input event but fails to trigger it when\n  // deleting text, so we ignore its input events.\n  // IE10+ fire input events to often, such when a placeholder\n  // changes or when an input with a placeholder is focused.\n  isInputEventSupported = isEventSupported('input') && (!('documentMode' in document) || document.documentMode > 11);\n}\n\n/**\n * (For IE <=11) Replacement getter/setter for the `value` property that gets\n * set on the active element.\n */\nvar newValueProp = {\n  get: function () {\n    return activeElementValueProp.get.call(this);\n  },\n  set: function (val) {\n    // Cast to a string so we can do equality checks.\n    activeElementValue = '' + val;\n    activeElementValueProp.set.call(this, val);\n  }\n};\n\n/**\n * (For IE <=11) Starts tracking propertychange events on the passed-in element\n * and override the value property so that we can distinguish user events from\n * value changes in JS.\n */\nfunction startWatchingForValueChange(target, targetInst) {\n  activeElement = target;\n  activeElementInst = targetInst;\n  activeElementValue = target.value;\n  activeElementValueProp = Object.getOwnPropertyDescriptor(target.constructor.prototype, 'value');\n\n  // Not guarded in a canDefineProperty check: IE8 supports defineProperty only\n  // on DOM elements\n  Object.defineProperty(activeElement, 'value', newValueProp);\n  if (activeElement.attachEvent) {\n    activeElement.attachEvent('onpropertychange', handlePropertyChange);\n  } else {\n    activeElement.addEventListener('propertychange', handlePropertyChange, false);\n  }\n}\n\n/**\n * (For IE <=11) Removes the event listeners from the currently-tracked element,\n * if any exists.\n */\nfunction stopWatchingForValueChange() {\n  if (!activeElement) {\n    return;\n  }\n\n  // delete restores the original property definition\n  delete activeElement.value;\n\n  if (activeElement.detachEvent) {\n    activeElement.detachEvent('onpropertychange', handlePropertyChange);\n  } else {\n    activeElement.removeEventListener('propertychange', handlePropertyChange, false);\n  }\n\n  activeElement = null;\n  activeElementInst = null;\n  activeElementValue = null;\n  activeElementValueProp = null;\n}\n\n/**\n * (For IE <=11) Handles a propertychange event, sending a `change` event if\n * the value of the active element has changed.\n */\nfunction handlePropertyChange(nativeEvent) {\n  if (nativeEvent.propertyName !== 'value') {\n    return;\n  }\n  var value = nativeEvent.srcElement.value;\n  if (value === activeElementValue) {\n    return;\n  }\n  activeElementValue = value;\n\n  manualDispatchChangeEvent(nativeEvent);\n}\n\n/**\n * If a `change` event should be fired, returns the target's ID.\n */\nfunction getTargetInstForInputEvent(topLevelType, targetInst) {\n  if (topLevelType === topLevelTypes.topInput) {\n    // In modern browsers (i.e., not IE8 or IE9), the input event is exactly\n    // what we want so fall through here and trigger an abstract event\n    return targetInst;\n  }\n}\n\nfunction handleEventsForInputEventIE(topLevelType, target, targetInst) {\n  if (topLevelType === topLevelTypes.topFocus) {\n    // In IE8, we can capture almost all .value changes by adding a\n    // propertychange handler and looking for events with propertyName\n    // equal to 'value'\n    // In IE9-11, propertychange fires for most input events but is buggy and\n    // doesn't fire when text is deleted, but conveniently, selectionchange\n    // appears to fire in all of the remaining cases so we catch those and\n    // forward the event if the value has changed\n    // In either case, we don't want to call the event handler if the value\n    // is changed from JS so we redefine a setter for `.value` that updates\n    // our activeElementValue variable, allowing us to ignore those changes\n    //\n    // stopWatching() should be a noop here but we call it just in case we\n    // missed a blur event somehow.\n    stopWatchingForValueChange();\n    startWatchingForValueChange(target, targetInst);\n  } else if (topLevelType === topLevelTypes.topBlur) {\n    stopWatchingForValueChange();\n  }\n}\n\n// For IE8 and IE9.\nfunction getTargetInstForInputEventIE(topLevelType, targetInst) {\n  if (topLevelType === topLevelTypes.topSelectionChange || topLevelType === topLevelTypes.topKeyUp || topLevelType === topLevelTypes.topKeyDown) {\n    // On the selectionchange event, the target is just document which isn't\n    // helpful for us so just check activeElement instead.\n    //\n    // 99% of the time, keydown and keyup aren't necessary. IE8 fails to fire\n    // propertychange on the first input event after setting `value` from a\n    // script and fires only keydown, keypress, keyup. Catching keyup usually\n    // gets it and catching keydown lets us fire an event for the first\n    // keystroke if user does a key repeat (it'll be a little delayed: right\n    // before the second keystroke). Other input methods (e.g., paste) seem to\n    // fire selectionchange normally.\n    if (activeElement && activeElement.value !== activeElementValue) {\n      activeElementValue = activeElement.value;\n      return activeElementInst;\n    }\n  }\n}\n\n/**\n * SECTION: handle `click` event\n */\nfunction shouldUseClickEvent(elem) {\n  // Use the `click` event to detect changes to checkbox and radio inputs.\n  // This approach works across all browsers, whereas `change` does not fire\n  // until `blur` in IE8.\n  return elem.nodeName && elem.nodeName.toLowerCase() === 'input' && (elem.type === 'checkbox' || elem.type === 'radio');\n}\n\nfunction getTargetInstForClickEvent(topLevelType, targetInst) {\n  if (topLevelType === topLevelTypes.topClick) {\n    return targetInst;\n  }\n}\n\n/**\n * This plugin creates an `onChange` event that normalizes change events\n * across form elements. This event fires at a time when it's possible to\n * change the element's value without seeing a flicker.\n *\n * Supported elements are:\n * - input (see `isTextInputElement`)\n * - textarea\n * - select\n */\nvar ChangeEventPlugin = {\n\n  eventTypes: eventTypes,\n\n  extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n    var targetNode = targetInst ? ReactDOMComponentTree.getNodeFromInstance(targetInst) : window;\n\n    var getTargetInstFunc, handleEventFunc;\n    if (shouldUseChangeEvent(targetNode)) {\n      if (doesChangeEventBubble) {\n        getTargetInstFunc = getTargetInstForChangeEvent;\n      } else {\n        handleEventFunc = handleEventsForChangeEventIE8;\n      }\n    } else if (isTextInputElement(targetNode)) {\n      if (isInputEventSupported) {\n        getTargetInstFunc = getTargetInstForInputEvent;\n      } else {\n        getTargetInstFunc = getTargetInstForInputEventIE;\n        handleEventFunc = handleEventsForInputEventIE;\n      }\n    } else if (shouldUseClickEvent(targetNode)) {\n      getTargetInstFunc = getTargetInstForClickEvent;\n    }\n\n    if (getTargetInstFunc) {\n      var inst = getTargetInstFunc(topLevelType, targetInst);\n      if (inst) {\n        var event = SyntheticEvent.getPooled(eventTypes.change, inst, nativeEvent, nativeEventTarget);\n        event.type = 'change';\n        EventPropagators.accumulateTwoPhaseDispatches(event);\n        return event;\n      }\n    }\n\n    if (handleEventFunc) {\n      handleEventFunc(topLevelType, targetNode, targetInst);\n    }\n  }\n\n};\n\nmodule.exports = ChangeEventPlugin;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ChangeEventPlugin.js\n ** module id = 58\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactUpdates\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant'),\n    _assign = require('object-assign');\n\nvar CallbackQueue = require('./CallbackQueue');\nvar PooledClass = require('./PooledClass');\nvar ReactFeatureFlags = require('./ReactFeatureFlags');\nvar ReactReconciler = require('./ReactReconciler');\nvar Transaction = require('./Transaction');\n\nvar invariant = require('fbjs/lib/invariant');\n\nvar dirtyComponents = [];\nvar updateBatchNumber = 0;\nvar asapCallbackQueue = CallbackQueue.getPooled();\nvar asapEnqueued = false;\n\nvar batchingStrategy = null;\n\nfunction ensureInjected() {\n  !(ReactUpdates.ReactReconcileTransaction && batchingStrategy) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must inject a reconcile transaction class and batching strategy') : _prodInvariant('123') : void 0;\n}\n\nvar NESTED_UPDATES = {\n  initialize: function () {\n    this.dirtyComponentsLength = dirtyComponents.length;\n  },\n  close: function () {\n    if (this.dirtyComponentsLength !== dirtyComponents.length) {\n      // Additional updates were enqueued by componentDidUpdate handlers or\n      // similar; before our own UPDATE_QUEUEING wrapper closes, we want to run\n      // these new updates so that if A's componentDidUpdate calls setState on\n      // B, B will update before the callback A's updater provided when calling\n      // setState.\n      dirtyComponents.splice(0, this.dirtyComponentsLength);\n      flushBatchedUpdates();\n    } else {\n      dirtyComponents.length = 0;\n    }\n  }\n};\n\nvar UPDATE_QUEUEING = {\n  initialize: function () {\n    this.callbackQueue.reset();\n  },\n  close: function () {\n    this.callbackQueue.notifyAll();\n  }\n};\n\nvar TRANSACTION_WRAPPERS = [NESTED_UPDATES, UPDATE_QUEUEING];\n\nfunction ReactUpdatesFlushTransaction() {\n  this.reinitializeTransaction();\n  this.dirtyComponentsLength = null;\n  this.callbackQueue = CallbackQueue.getPooled();\n  this.reconcileTransaction = ReactUpdates.ReactReconcileTransaction.getPooled(\n  /* useCreateElement */true);\n}\n\n_assign(ReactUpdatesFlushTransaction.prototype, Transaction.Mixin, {\n  getTransactionWrappers: function () {\n    return TRANSACTION_WRAPPERS;\n  },\n\n  destructor: function () {\n    this.dirtyComponentsLength = null;\n    CallbackQueue.release(this.callbackQueue);\n    this.callbackQueue = null;\n    ReactUpdates.ReactReconcileTransaction.release(this.reconcileTransaction);\n    this.reconcileTransaction = null;\n  },\n\n  perform: function (method, scope, a) {\n    // Essentially calls `this.reconcileTransaction.perform(method, scope, a)`\n    // with this transaction's wrappers around it.\n    return Transaction.Mixin.perform.call(this, this.reconcileTransaction.perform, this.reconcileTransaction, method, scope, a);\n  }\n});\n\nPooledClass.addPoolingTo(ReactUpdatesFlushTransaction);\n\nfunction batchedUpdates(callback, a, b, c, d, e) {\n  ensureInjected();\n  batchingStrategy.batchedUpdates(callback, a, b, c, d, e);\n}\n\n/**\n * Array comparator for ReactComponents by mount ordering.\n *\n * @param {ReactComponent} c1 first component you're comparing\n * @param {ReactComponent} c2 second component you're comparing\n * @return {number} Return value usable by Array.prototype.sort().\n */\nfunction mountOrderComparator(c1, c2) {\n  return c1._mountOrder - c2._mountOrder;\n}\n\nfunction runBatchedUpdates(transaction) {\n  var len = transaction.dirtyComponentsLength;\n  !(len === dirtyComponents.length) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected flush transaction\\'s stored dirty-components length (%s) to match dirty-components array length (%s).', len, dirtyComponents.length) : _prodInvariant('124', len, dirtyComponents.length) : void 0;\n\n  // Since reconciling a component higher in the owner hierarchy usually (not\n  // always -- see shouldComponentUpdate()) will reconcile children, reconcile\n  // them before their children by sorting the array.\n  dirtyComponents.sort(mountOrderComparator);\n\n  // Any updates enqueued while reconciling must be performed after this entire\n  // batch. Otherwise, if dirtyComponents is [A, B] where A has children B and\n  // C, B could update twice in a single batch if C's render enqueues an update\n  // to B (since B would have already updated, we should skip it, and the only\n  // way we can know to do so is by checking the batch counter).\n  updateBatchNumber++;\n\n  for (var i = 0; i < len; i++) {\n    // If a component is unmounted before pending changes apply, it will still\n    // be here, but we assume that it has cleared its _pendingCallbacks and\n    // that performUpdateIfNecessary is a noop.\n    var component = dirtyComponents[i];\n\n    // If performUpdateIfNecessary happens to enqueue any new updates, we\n    // shouldn't execute the callbacks until the next render happens, so\n    // stash the callbacks first\n    var callbacks = component._pendingCallbacks;\n    component._pendingCallbacks = null;\n\n    var markerName;\n    if (ReactFeatureFlags.logTopLevelRenders) {\n      var namedComponent = component;\n      // Duck type TopLevelWrapper. This is probably always true.\n      if (component._currentElement.props === component._renderedComponent._currentElement) {\n        namedComponent = component._renderedComponent;\n      }\n      markerName = 'React update: ' + namedComponent.getName();\n      console.time(markerName);\n    }\n\n    ReactReconciler.performUpdateIfNecessary(component, transaction.reconcileTransaction, updateBatchNumber);\n\n    if (markerName) {\n      console.timeEnd(markerName);\n    }\n\n    if (callbacks) {\n      for (var j = 0; j < callbacks.length; j++) {\n        transaction.callbackQueue.enqueue(callbacks[j], component.getPublicInstance());\n      }\n    }\n  }\n}\n\nvar flushBatchedUpdates = function () {\n  // ReactUpdatesFlushTransaction's wrappers will clear the dirtyComponents\n  // array and perform any updates enqueued by mount-ready handlers (i.e.,\n  // componentDidUpdate) but we need to check here too in order to catch\n  // updates enqueued by setState callbacks and asap calls.\n  while (dirtyComponents.length || asapEnqueued) {\n    if (dirtyComponents.length) {\n      var transaction = ReactUpdatesFlushTransaction.getPooled();\n      transaction.perform(runBatchedUpdates, null, transaction);\n      ReactUpdatesFlushTransaction.release(transaction);\n    }\n\n    if (asapEnqueued) {\n      asapEnqueued = false;\n      var queue = asapCallbackQueue;\n      asapCallbackQueue = CallbackQueue.getPooled();\n      queue.notifyAll();\n      CallbackQueue.release(queue);\n    }\n  }\n};\n\n/**\n * Mark a component as needing a rerender, adding an optional callback to a\n * list of functions which will be executed once the rerender occurs.\n */\nfunction enqueueUpdate(component) {\n  ensureInjected();\n\n  // Various parts of our code (such as ReactCompositeComponent's\n  // _renderValidatedComponent) assume that calls to render aren't nested;\n  // verify that that's the case. (This is called by each top-level update\n  // function, like setState, forceUpdate, etc.; creation and\n  // destruction of top-level components is guarded in ReactMount.)\n\n  if (!batchingStrategy.isBatchingUpdates) {\n    batchingStrategy.batchedUpdates(enqueueUpdate, component);\n    return;\n  }\n\n  dirtyComponents.push(component);\n  if (component._updateBatchNumber == null) {\n    component._updateBatchNumber = updateBatchNumber + 1;\n  }\n}\n\n/**\n * Enqueue a callback to be run at the end of the current batching cycle. Throws\n * if no updates are currently being performed.\n */\nfunction asap(callback, context) {\n  !batchingStrategy.isBatchingUpdates ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates.asap: Can\\'t enqueue an asap callback in a context whereupdates are not being batched.') : _prodInvariant('125') : void 0;\n  asapCallbackQueue.enqueue(callback, context);\n  asapEnqueued = true;\n}\n\nvar ReactUpdatesInjection = {\n  injectReconcileTransaction: function (ReconcileTransaction) {\n    !ReconcileTransaction ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must provide a reconcile transaction class') : _prodInvariant('126') : void 0;\n    ReactUpdates.ReactReconcileTransaction = ReconcileTransaction;\n  },\n\n  injectBatchingStrategy: function (_batchingStrategy) {\n    !_batchingStrategy ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must provide a batching strategy') : _prodInvariant('127') : void 0;\n    !(typeof _batchingStrategy.batchedUpdates === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must provide a batchedUpdates() function') : _prodInvariant('128') : void 0;\n    !(typeof _batchingStrategy.isBatchingUpdates === 'boolean') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must provide an isBatchingUpdates boolean attribute') : _prodInvariant('129') : void 0;\n    batchingStrategy = _batchingStrategy;\n  }\n};\n\nvar ReactUpdates = {\n  /**\n   * React references `ReactReconcileTransaction` using this property in order\n   * to allow dependency injection.\n   *\n   * @internal\n   */\n  ReactReconcileTransaction: null,\n\n  batchedUpdates: batchedUpdates,\n  enqueueUpdate: enqueueUpdate,\n  flushBatchedUpdates: flushBatchedUpdates,\n  injection: ReactUpdatesInjection,\n  asap: asap\n};\n\nmodule.exports = ReactUpdates;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactUpdates.js\n ** module id = 59\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule CallbackQueue\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant'),\n    _assign = require('object-assign');\n\nvar PooledClass = require('./PooledClass');\n\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * A specialized pseudo-event module to help keep track of components waiting to\n * be notified when their DOM representations are available for use.\n *\n * This implements `PooledClass`, so you should never need to instantiate this.\n * Instead, use `CallbackQueue.getPooled()`.\n *\n * @class ReactMountReady\n * @implements PooledClass\n * @internal\n */\nfunction CallbackQueue() {\n  this._callbacks = null;\n  this._contexts = null;\n}\n\n_assign(CallbackQueue.prototype, {\n\n  /**\n   * Enqueues a callback to be invoked when `notifyAll` is invoked.\n   *\n   * @param {function} callback Invoked when `notifyAll` is invoked.\n   * @param {?object} context Context to call `callback` with.\n   * @internal\n   */\n  enqueue: function (callback, context) {\n    this._callbacks = this._callbacks || [];\n    this._contexts = this._contexts || [];\n    this._callbacks.push(callback);\n    this._contexts.push(context);\n  },\n\n  /**\n   * Invokes all enqueued callbacks and clears the queue. This is invoked after\n   * the DOM representation of a component has been created or updated.\n   *\n   * @internal\n   */\n  notifyAll: function () {\n    var callbacks = this._callbacks;\n    var contexts = this._contexts;\n    if (callbacks) {\n      !(callbacks.length === contexts.length) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Mismatched list of contexts in callback queue') : _prodInvariant('24') : void 0;\n      this._callbacks = null;\n      this._contexts = null;\n      for (var i = 0; i < callbacks.length; i++) {\n        callbacks[i].call(contexts[i]);\n      }\n      callbacks.length = 0;\n      contexts.length = 0;\n    }\n  },\n\n  checkpoint: function () {\n    return this._callbacks ? this._callbacks.length : 0;\n  },\n\n  rollback: function (len) {\n    if (this._callbacks) {\n      this._callbacks.length = len;\n      this._contexts.length = len;\n    }\n  },\n\n  /**\n   * Resets the internal queue.\n   *\n   * @internal\n   */\n  reset: function () {\n    this._callbacks = null;\n    this._contexts = null;\n  },\n\n  /**\n   * `PooledClass` looks for this.\n   */\n  destructor: function () {\n    this.reset();\n  }\n\n});\n\nPooledClass.addPoolingTo(CallbackQueue);\n\nmodule.exports = CallbackQueue;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/CallbackQueue.js\n ** module id = 60\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactFeatureFlags\n * \n */\n\n'use strict';\n\nvar ReactFeatureFlags = {\n  // When true, call console.time() before and .timeEnd() after each top-level\n  // render (both initial renders and updates). Useful when looking at prod-mode\n  // timeline profiles in Chrome, for example.\n  logTopLevelRenders: false\n};\n\nmodule.exports = ReactFeatureFlags;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactFeatureFlags.js\n ** module id = 61\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactReconciler\n */\n\n'use strict';\n\nvar ReactRef = require('./ReactRef');\nvar ReactInstrumentation = require('./ReactInstrumentation');\n\nvar warning = require('fbjs/lib/warning');\n\n/**\n * Helper to call ReactRef.attachRefs with this composite component, split out\n * to avoid allocations in the transaction mount-ready queue.\n */\nfunction attachRefs() {\n  ReactRef.attachRefs(this, this._currentElement);\n}\n\nvar ReactReconciler = {\n\n  /**\n   * Initializes the component, renders markup, and registers event listeners.\n   *\n   * @param {ReactComponent} internalInstance\n   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\n   * @param {?object} the containing host component instance\n   * @param {?object} info about the host container\n   * @return {?string} Rendered markup to be inserted into the DOM.\n   * @final\n   * @internal\n   */\n  mountComponent: function (internalInstance, transaction, hostParent, hostContainerInfo, context) {\n    if (process.env.NODE_ENV !== 'production') {\n      if (internalInstance._debugID !== 0) {\n        ReactInstrumentation.debugTool.onBeforeMountComponent(internalInstance._debugID, internalInstance._currentElement);\n        ReactInstrumentation.debugTool.onBeginReconcilerTimer(internalInstance._debugID, 'mountComponent');\n      }\n    }\n    var markup = internalInstance.mountComponent(transaction, hostParent, hostContainerInfo, context);\n    if (internalInstance._currentElement && internalInstance._currentElement.ref != null) {\n      transaction.getReactMountReady().enqueue(attachRefs, internalInstance);\n    }\n    if (process.env.NODE_ENV !== 'production') {\n      if (internalInstance._debugID !== 0) {\n        ReactInstrumentation.debugTool.onEndReconcilerTimer(internalInstance._debugID, 'mountComponent');\n        ReactInstrumentation.debugTool.onMountComponent(internalInstance._debugID);\n      }\n    }\n    return markup;\n  },\n\n  /**\n   * Returns a value that can be passed to\n   * ReactComponentEnvironment.replaceNodeWithMarkup.\n   */\n  getHostNode: function (internalInstance) {\n    return internalInstance.getHostNode();\n  },\n\n  /**\n   * Releases any resources allocated by `mountComponent`.\n   *\n   * @final\n   * @internal\n   */\n  unmountComponent: function (internalInstance, safely) {\n    if (process.env.NODE_ENV !== 'production') {\n      if (internalInstance._debugID !== 0) {\n        ReactInstrumentation.debugTool.onBeginReconcilerTimer(internalInstance._debugID, 'unmountComponent');\n      }\n    }\n    ReactRef.detachRefs(internalInstance, internalInstance._currentElement);\n    internalInstance.unmountComponent(safely);\n    if (process.env.NODE_ENV !== 'production') {\n      if (internalInstance._debugID !== 0) {\n        ReactInstrumentation.debugTool.onEndReconcilerTimer(internalInstance._debugID, 'unmountComponent');\n        ReactInstrumentation.debugTool.onUnmountComponent(internalInstance._debugID);\n      }\n    }\n  },\n\n  /**\n   * Update a component using a new element.\n   *\n   * @param {ReactComponent} internalInstance\n   * @param {ReactElement} nextElement\n   * @param {ReactReconcileTransaction} transaction\n   * @param {object} context\n   * @internal\n   */\n  receiveComponent: function (internalInstance, nextElement, transaction, context) {\n    var prevElement = internalInstance._currentElement;\n\n    if (nextElement === prevElement && context === internalInstance._context) {\n      // Since elements are immutable after the owner is rendered,\n      // we can do a cheap identity compare here to determine if this is a\n      // superfluous reconcile. It's possible for state to be mutable but such\n      // change should trigger an update of the owner which would recreate\n      // the element. We explicitly check for the existence of an owner since\n      // it's possible for an element created outside a composite to be\n      // deeply mutated and reused.\n\n      // TODO: Bailing out early is just a perf optimization right?\n      // TODO: Removing the return statement should affect correctness?\n      return;\n    }\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (internalInstance._debugID !== 0) {\n        ReactInstrumentation.debugTool.onBeforeUpdateComponent(internalInstance._debugID, nextElement);\n        ReactInstrumentation.debugTool.onBeginReconcilerTimer(internalInstance._debugID, 'receiveComponent');\n      }\n    }\n\n    var refsChanged = ReactRef.shouldUpdateRefs(prevElement, nextElement);\n\n    if (refsChanged) {\n      ReactRef.detachRefs(internalInstance, prevElement);\n    }\n\n    internalInstance.receiveComponent(nextElement, transaction, context);\n\n    if (refsChanged && internalInstance._currentElement && internalInstance._currentElement.ref != null) {\n      transaction.getReactMountReady().enqueue(attachRefs, internalInstance);\n    }\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (internalInstance._debugID !== 0) {\n        ReactInstrumentation.debugTool.onEndReconcilerTimer(internalInstance._debugID, 'receiveComponent');\n        ReactInstrumentation.debugTool.onUpdateComponent(internalInstance._debugID);\n      }\n    }\n  },\n\n  /**\n   * Flush any dirty changes in a component.\n   *\n   * @param {ReactComponent} internalInstance\n   * @param {ReactReconcileTransaction} transaction\n   * @internal\n   */\n  performUpdateIfNecessary: function (internalInstance, transaction, updateBatchNumber) {\n    if (internalInstance._updateBatchNumber !== updateBatchNumber) {\n      // The component's enqueued batch number should always be the current\n      // batch or the following one.\n      process.env.NODE_ENV !== 'production' ? warning(internalInstance._updateBatchNumber == null || internalInstance._updateBatchNumber === updateBatchNumber + 1, 'performUpdateIfNecessary: Unexpected batch number (current %s, ' + 'pending %s)', updateBatchNumber, internalInstance._updateBatchNumber) : void 0;\n      return;\n    }\n    if (process.env.NODE_ENV !== 'production') {\n      if (internalInstance._debugID !== 0) {\n        ReactInstrumentation.debugTool.onBeginReconcilerTimer(internalInstance._debugID, 'performUpdateIfNecessary');\n        ReactInstrumentation.debugTool.onBeforeUpdateComponent(internalInstance._debugID, internalInstance._currentElement);\n      }\n    }\n    internalInstance.performUpdateIfNecessary(transaction);\n    if (process.env.NODE_ENV !== 'production') {\n      if (internalInstance._debugID !== 0) {\n        ReactInstrumentation.debugTool.onEndReconcilerTimer(internalInstance._debugID, 'performUpdateIfNecessary');\n        ReactInstrumentation.debugTool.onUpdateComponent(internalInstance._debugID);\n      }\n    }\n  }\n\n};\n\nmodule.exports = ReactReconciler;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactReconciler.js\n ** module id = 62\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactRef\n */\n\n'use strict';\n\nvar ReactOwner = require('./ReactOwner');\n\nvar ReactRef = {};\n\nfunction attachRef(ref, component, owner) {\n  if (typeof ref === 'function') {\n    ref(component.getPublicInstance());\n  } else {\n    // Legacy ref\n    ReactOwner.addComponentAsRefTo(component, ref, owner);\n  }\n}\n\nfunction detachRef(ref, component, owner) {\n  if (typeof ref === 'function') {\n    ref(null);\n  } else {\n    // Legacy ref\n    ReactOwner.removeComponentAsRefFrom(component, ref, owner);\n  }\n}\n\nReactRef.attachRefs = function (instance, element) {\n  if (element === null || element === false) {\n    return;\n  }\n  var ref = element.ref;\n  if (ref != null) {\n    attachRef(ref, instance, element._owner);\n  }\n};\n\nReactRef.shouldUpdateRefs = function (prevElement, nextElement) {\n  // If either the owner or a `ref` has changed, make sure the newest owner\n  // has stored a reference to `this`, and the previous owner (if different)\n  // has forgotten the reference to `this`. We use the element instead\n  // of the public this.props because the post processing cannot determine\n  // a ref. The ref conceptually lives on the element.\n\n  // TODO: Should this even be possible? The owner cannot change because\n  // it's forbidden by shouldUpdateReactComponent. The ref can change\n  // if you swap the keys of but not the refs. Reconsider where this check\n  // is made. It probably belongs where the key checking and\n  // instantiateReactComponent is done.\n\n  var prevEmpty = prevElement === null || prevElement === false;\n  var nextEmpty = nextElement === null || nextElement === false;\n\n  return(\n    // This has a few false positives w/r/t empty components.\n    prevEmpty || nextEmpty || nextElement.ref !== prevElement.ref ||\n    // If owner changes but we have an unchanged function ref, don't update refs\n    typeof nextElement.ref === 'string' && nextElement._owner !== prevElement._owner\n  );\n};\n\nReactRef.detachRefs = function (instance, element) {\n  if (element === null || element === false) {\n    return;\n  }\n  var ref = element.ref;\n  if (ref != null) {\n    detachRef(ref, instance, element._owner);\n  }\n};\n\nmodule.exports = ReactRef;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactRef.js\n ** module id = 63\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactOwner\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * ReactOwners are capable of storing references to owned components.\n *\n * All components are capable of //being// referenced by owner components, but\n * only ReactOwner components are capable of //referencing// owned components.\n * The named reference is known as a \"ref\".\n *\n * Refs are available when mounted and updated during reconciliation.\n *\n *   var MyComponent = React.createClass({\n *     render: function() {\n *       return (\n *         <div onClick={this.handleClick}>\n *           <CustomComponent ref=\"custom\" />\n *         </div>\n *       );\n *     },\n *     handleClick: function() {\n *       this.refs.custom.handleClick();\n *     },\n *     componentDidMount: function() {\n *       this.refs.custom.initialize();\n *     }\n *   });\n *\n * Refs should rarely be used. When refs are used, they should only be done to\n * control data that is not handled by React's data flow.\n *\n * @class ReactOwner\n */\nvar ReactOwner = {\n\n  /**\n   * @param {?object} object\n   * @return {boolean} True if `object` is a valid owner.\n   * @final\n   */\n  isValidOwner: function (object) {\n    return !!(object && typeof object.attachRef === 'function' && typeof object.detachRef === 'function');\n  },\n\n  /**\n   * Adds a component by ref to an owner component.\n   *\n   * @param {ReactComponent} component Component to reference.\n   * @param {string} ref Name by which to refer to the component.\n   * @param {ReactOwner} owner Component on which to record the ref.\n   * @final\n   * @internal\n   */\n  addComponentAsRefTo: function (component, ref, owner) {\n    !ReactOwner.isValidOwner(owner) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'addComponentAsRefTo(...): Only a ReactOwner can have refs. You might be adding a ref to a component that was not created inside a component\\'s `render` method, or you have multiple copies of React loaded (details: https://fb.me/react-refs-must-have-owner).') : _prodInvariant('119') : void 0;\n    owner.attachRef(ref, component);\n  },\n\n  /**\n   * Removes a component by ref from an owner component.\n   *\n   * @param {ReactComponent} component Component to dereference.\n   * @param {string} ref Name of the ref to remove.\n   * @param {ReactOwner} owner Component on which the ref is recorded.\n   * @final\n   * @internal\n   */\n  removeComponentAsRefFrom: function (component, ref, owner) {\n    !ReactOwner.isValidOwner(owner) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'removeComponentAsRefFrom(...): Only a ReactOwner can have refs. You might be removing a ref to a component that was not created inside a component\\'s `render` method, or you have multiple copies of React loaded (details: https://fb.me/react-refs-must-have-owner).') : _prodInvariant('120') : void 0;\n    var ownerPublicInstance = owner.getPublicInstance();\n    // Check that `component`'s owner is still alive and that `component` is still the current ref\n    // because we do not want to detach the ref if another component stole it.\n    if (ownerPublicInstance && ownerPublicInstance.refs[ref] === component.getPublicInstance()) {\n      owner.detachRef(ref);\n    }\n  }\n\n};\n\nmodule.exports = ReactOwner;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactOwner.js\n ** module id = 64\n ** module chunks = 4\n **/","/**\n * Copyright 2016-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactInstrumentation\n */\n\n'use strict';\n\nvar debugTool = null;\n\nif (process.env.NODE_ENV !== 'production') {\n  var ReactDebugTool = require('./ReactDebugTool');\n  debugTool = ReactDebugTool;\n}\n\nmodule.exports = { debugTool: debugTool };\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactInstrumentation.js\n ** module id = 65\n ** module chunks = 4\n **/","/**\n * Copyright 2016-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDebugTool\n */\n\n'use strict';\n\nvar ReactInvalidSetStateWarningDevTool = require('./ReactInvalidSetStateWarningDevTool');\nvar ReactHostOperationHistoryDevtool = require('./ReactHostOperationHistoryDevtool');\nvar ReactComponentTreeDevtool = require('./ReactComponentTreeDevtool');\nvar ReactChildrenMutationWarningDevtool = require('./ReactChildrenMutationWarningDevtool');\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\n\nvar performanceNow = require('fbjs/lib/performanceNow');\nvar warning = require('fbjs/lib/warning');\n\nvar eventHandlers = [];\nvar handlerDoesThrowForEvent = {};\n\nfunction emitEvent(handlerFunctionName, arg1, arg2, arg3, arg4, arg5) {\n  eventHandlers.forEach(function (handler) {\n    try {\n      if (handler[handlerFunctionName]) {\n        handler[handlerFunctionName](arg1, arg2, arg3, arg4, arg5);\n      }\n    } catch (e) {\n      process.env.NODE_ENV !== 'production' ? warning(handlerDoesThrowForEvent[handlerFunctionName], 'exception thrown by devtool while handling %s: %s', handlerFunctionName, e + '\\n' + e.stack) : void 0;\n      handlerDoesThrowForEvent[handlerFunctionName] = true;\n    }\n  });\n}\n\nvar isProfiling = false;\nvar flushHistory = [];\nvar lifeCycleTimerStack = [];\nvar currentFlushNesting = 0;\nvar currentFlushMeasurements = null;\nvar currentFlushStartTime = null;\nvar currentTimerDebugID = null;\nvar currentTimerStartTime = null;\nvar currentTimerNestedFlushDuration = null;\nvar currentTimerType = null;\n\nvar lifeCycleTimerHasWarned = false;\n\nfunction clearHistory() {\n  ReactComponentTreeDevtool.purgeUnmountedComponents();\n  ReactHostOperationHistoryDevtool.clearHistory();\n}\n\nfunction getTreeSnapshot(registeredIDs) {\n  return registeredIDs.reduce(function (tree, id) {\n    var ownerID = ReactComponentTreeDevtool.getOwnerID(id);\n    var parentID = ReactComponentTreeDevtool.getParentID(id);\n    tree[id] = {\n      displayName: ReactComponentTreeDevtool.getDisplayName(id),\n      text: ReactComponentTreeDevtool.getText(id),\n      updateCount: ReactComponentTreeDevtool.getUpdateCount(id),\n      childIDs: ReactComponentTreeDevtool.getChildIDs(id),\n      // Text nodes don't have owners but this is close enough.\n      ownerID: ownerID || ReactComponentTreeDevtool.getOwnerID(parentID),\n      parentID: parentID\n    };\n    return tree;\n  }, {});\n}\n\nfunction resetMeasurements() {\n  var previousStartTime = currentFlushStartTime;\n  var previousMeasurements = currentFlushMeasurements || [];\n  var previousOperations = ReactHostOperationHistoryDevtool.getHistory();\n\n  if (currentFlushNesting === 0) {\n    currentFlushStartTime = null;\n    currentFlushMeasurements = null;\n    clearHistory();\n    return;\n  }\n\n  if (previousMeasurements.length || previousOperations.length) {\n    var registeredIDs = ReactComponentTreeDevtool.getRegisteredIDs();\n    flushHistory.push({\n      duration: performanceNow() - previousStartTime,\n      measurements: previousMeasurements || [],\n      operations: previousOperations || [],\n      treeSnapshot: getTreeSnapshot(registeredIDs)\n    });\n  }\n\n  clearHistory();\n  currentFlushStartTime = performanceNow();\n  currentFlushMeasurements = [];\n}\n\nfunction checkDebugID(debugID) {\n  process.env.NODE_ENV !== 'production' ? warning(debugID, 'ReactDebugTool: debugID may not be empty.') : void 0;\n}\n\nfunction beginLifeCycleTimer(debugID, timerType) {\n  if (currentFlushNesting === 0) {\n    return;\n  }\n  if (currentTimerType && !lifeCycleTimerHasWarned) {\n    process.env.NODE_ENV !== 'production' ? warning(false, 'There is an internal error in the React performance measurement code. ' + 'Did not expect %s timer to start while %s timer is still in ' + 'progress for %s instance.', timerType, currentTimerType || 'no', debugID === currentTimerDebugID ? 'the same' : 'another') : void 0;\n    lifeCycleTimerHasWarned = true;\n  }\n  currentTimerStartTime = performanceNow();\n  currentTimerNestedFlushDuration = 0;\n  currentTimerDebugID = debugID;\n  currentTimerType = timerType;\n}\n\nfunction endLifeCycleTimer(debugID, timerType) {\n  if (currentFlushNesting === 0) {\n    return;\n  }\n  if (currentTimerType !== timerType && !lifeCycleTimerHasWarned) {\n    process.env.NODE_ENV !== 'production' ? warning(false, 'There is an internal error in the React performance measurement code. ' + 'We did not expect %s timer to stop while %s timer is still in ' + 'progress for %s instance. Please report this as a bug in React.', timerType, currentTimerType || 'no', debugID === currentTimerDebugID ? 'the same' : 'another') : void 0;\n    lifeCycleTimerHasWarned = true;\n  }\n  if (isProfiling) {\n    currentFlushMeasurements.push({\n      timerType: timerType,\n      instanceID: debugID,\n      duration: performanceNow() - currentTimerStartTime - currentTimerNestedFlushDuration\n    });\n  }\n  currentTimerStartTime = null;\n  currentTimerNestedFlushDuration = null;\n  currentTimerDebugID = null;\n  currentTimerType = null;\n}\n\nfunction pauseCurrentLifeCycleTimer() {\n  var currentTimer = {\n    startTime: currentTimerStartTime,\n    nestedFlushStartTime: performanceNow(),\n    debugID: currentTimerDebugID,\n    timerType: currentTimerType\n  };\n  lifeCycleTimerStack.push(currentTimer);\n  currentTimerStartTime = null;\n  currentTimerNestedFlushDuration = null;\n  currentTimerDebugID = null;\n  currentTimerType = null;\n}\n\nfunction resumeCurrentLifeCycleTimer() {\n  var _lifeCycleTimerStack$ = lifeCycleTimerStack.pop();\n\n  var startTime = _lifeCycleTimerStack$.startTime;\n  var nestedFlushStartTime = _lifeCycleTimerStack$.nestedFlushStartTime;\n  var debugID = _lifeCycleTimerStack$.debugID;\n  var timerType = _lifeCycleTimerStack$.timerType;\n\n  var nestedFlushDuration = performanceNow() - nestedFlushStartTime;\n  currentTimerStartTime = startTime;\n  currentTimerNestedFlushDuration += nestedFlushDuration;\n  currentTimerDebugID = debugID;\n  currentTimerType = timerType;\n}\n\nvar ReactDebugTool = {\n  addDevtool: function (devtool) {\n    eventHandlers.push(devtool);\n  },\n  removeDevtool: function (devtool) {\n    for (var i = 0; i < eventHandlers.length; i++) {\n      if (eventHandlers[i] === devtool) {\n        eventHandlers.splice(i, 1);\n        i--;\n      }\n    }\n  },\n  isProfiling: function () {\n    return isProfiling;\n  },\n  beginProfiling: function () {\n    if (isProfiling) {\n      return;\n    }\n\n    isProfiling = true;\n    flushHistory.length = 0;\n    resetMeasurements();\n    ReactDebugTool.addDevtool(ReactHostOperationHistoryDevtool);\n  },\n  endProfiling: function () {\n    if (!isProfiling) {\n      return;\n    }\n\n    isProfiling = false;\n    resetMeasurements();\n    ReactDebugTool.removeDevtool(ReactHostOperationHistoryDevtool);\n  },\n  getFlushHistory: function () {\n    return flushHistory;\n  },\n  onBeginFlush: function () {\n    currentFlushNesting++;\n    resetMeasurements();\n    pauseCurrentLifeCycleTimer();\n    emitEvent('onBeginFlush');\n  },\n  onEndFlush: function () {\n    resetMeasurements();\n    currentFlushNesting--;\n    resumeCurrentLifeCycleTimer();\n    emitEvent('onEndFlush');\n  },\n  onBeginLifeCycleTimer: function (debugID, timerType) {\n    checkDebugID(debugID);\n    emitEvent('onBeginLifeCycleTimer', debugID, timerType);\n    beginLifeCycleTimer(debugID, timerType);\n  },\n  onEndLifeCycleTimer: function (debugID, timerType) {\n    checkDebugID(debugID);\n    endLifeCycleTimer(debugID, timerType);\n    emitEvent('onEndLifeCycleTimer', debugID, timerType);\n  },\n  onBeginReconcilerTimer: function (debugID, timerType) {\n    checkDebugID(debugID);\n    emitEvent('onBeginReconcilerTimer', debugID, timerType);\n  },\n  onEndReconcilerTimer: function (debugID, timerType) {\n    checkDebugID(debugID);\n    emitEvent('onEndReconcilerTimer', debugID, timerType);\n  },\n  onError: function (debugID) {\n    if (currentTimerDebugID != null) {\n      endLifeCycleTimer(currentTimerDebugID, currentTimerType);\n    }\n    emitEvent('onError', debugID);\n  },\n  onBeginProcessingChildContext: function () {\n    emitEvent('onBeginProcessingChildContext');\n  },\n  onEndProcessingChildContext: function () {\n    emitEvent('onEndProcessingChildContext');\n  },\n  onHostOperation: function (debugID, type, payload) {\n    checkDebugID(debugID);\n    emitEvent('onHostOperation', debugID, type, payload);\n  },\n  onComponentHasMounted: function (debugID) {\n    checkDebugID(debugID);\n    emitEvent('onComponentHasMounted', debugID);\n  },\n  onComponentHasUpdated: function (debugID) {\n    checkDebugID(debugID);\n    emitEvent('onComponentHasUpdated', debugID);\n  },\n  onSetState: function () {\n    emitEvent('onSetState');\n  },\n  onSetDisplayName: function (debugID, displayName) {\n    checkDebugID(debugID);\n    emitEvent('onSetDisplayName', debugID, displayName);\n  },\n  onSetChildren: function (debugID, childDebugIDs) {\n    checkDebugID(debugID);\n    childDebugIDs.forEach(checkDebugID);\n    emitEvent('onSetChildren', debugID, childDebugIDs);\n  },\n  onSetOwner: function (debugID, ownerDebugID) {\n    checkDebugID(debugID);\n    emitEvent('onSetOwner', debugID, ownerDebugID);\n  },\n  onSetParent: function (debugID, parentDebugID) {\n    checkDebugID(debugID);\n    emitEvent('onSetParent', debugID, parentDebugID);\n  },\n  onSetText: function (debugID, text) {\n    checkDebugID(debugID);\n    emitEvent('onSetText', debugID, text);\n  },\n  onMountRootComponent: function (debugID) {\n    checkDebugID(debugID);\n    emitEvent('onMountRootComponent', debugID);\n  },\n  onBeforeMountComponent: function (debugID, element) {\n    checkDebugID(debugID);\n    emitEvent('onBeforeMountComponent', debugID, element);\n  },\n  onMountComponent: function (debugID) {\n    checkDebugID(debugID);\n    emitEvent('onMountComponent', debugID);\n  },\n  onBeforeUpdateComponent: function (debugID, element) {\n    checkDebugID(debugID);\n    emitEvent('onBeforeUpdateComponent', debugID, element);\n  },\n  onUpdateComponent: function (debugID) {\n    checkDebugID(debugID);\n    emitEvent('onUpdateComponent', debugID);\n  },\n  onUnmountComponent: function (debugID) {\n    checkDebugID(debugID);\n    emitEvent('onUnmountComponent', debugID);\n  },\n  onTestEvent: function () {\n    emitEvent('onTestEvent');\n  }\n};\n\nReactDebugTool.addDevtool(ReactInvalidSetStateWarningDevTool);\nReactDebugTool.addDevtool(ReactComponentTreeDevtool);\nReactDebugTool.addDevtool(ReactChildrenMutationWarningDevtool);\nvar url = ExecutionEnvironment.canUseDOM && window.location.href || '';\nif (/[?&]react_perf\\b/.test(url)) {\n  ReactDebugTool.beginProfiling();\n}\n\nmodule.exports = ReactDebugTool;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDebugTool.js\n ** module id = 66\n ** module chunks = 4\n **/","/**\n * Copyright 2016-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactInvalidSetStateWarningDevTool\n */\n\n'use strict';\n\nvar warning = require('fbjs/lib/warning');\n\nif (process.env.NODE_ENV !== 'production') {\n  var processingChildContext = false;\n\n  var warnInvalidSetState = function () {\n    process.env.NODE_ENV !== 'production' ? warning(!processingChildContext, 'setState(...): Cannot call setState() inside getChildContext()') : void 0;\n  };\n}\n\nvar ReactInvalidSetStateWarningDevTool = {\n  onBeginProcessingChildContext: function () {\n    processingChildContext = true;\n  },\n  onEndProcessingChildContext: function () {\n    processingChildContext = false;\n  },\n  onSetState: function () {\n    warnInvalidSetState();\n  }\n};\n\nmodule.exports = ReactInvalidSetStateWarningDevTool;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactInvalidSetStateWarningDevTool.js\n ** module id = 67\n ** module chunks = 4\n **/","/**\n * Copyright 2016-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactHostOperationHistoryDevtool\n */\n\n'use strict';\n\nvar history = [];\n\nvar ReactHostOperationHistoryDevtool = {\n  onHostOperation: function (debugID, type, payload) {\n    history.push({\n      instanceID: debugID,\n      type: type,\n      payload: payload\n    });\n  },\n  clearHistory: function () {\n    if (ReactHostOperationHistoryDevtool._preventClearing) {\n      // Should only be used for tests.\n      return;\n    }\n\n    history = [];\n  },\n  getHistory: function () {\n    return history;\n  }\n};\n\nmodule.exports = ReactHostOperationHistoryDevtool;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactHostOperationHistoryDevtool.js\n ** module id = 68\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactChildrenMutationWarningDevtool\n */\n\n'use strict';\n\nvar ReactComponentTreeDevtool = require('./ReactComponentTreeDevtool');\n\nvar warning = require('fbjs/lib/warning');\n\nvar elements = {};\n\nfunction handleElement(debugID, element) {\n  if (element == null) {\n    return;\n  }\n  if (element._shadowChildren === undefined) {\n    return;\n  }\n  if (element._shadowChildren === element.props.children) {\n    return;\n  }\n  var isMutated = false;\n  if (Array.isArray(element._shadowChildren)) {\n    if (element._shadowChildren.length === element.props.children.length) {\n      for (var i = 0; i < element._shadowChildren.length; i++) {\n        if (element._shadowChildren[i] !== element.props.children[i]) {\n          isMutated = true;\n        }\n      }\n    } else {\n      isMutated = true;\n    }\n  }\n  process.env.NODE_ENV !== 'production' ? warning(Array.isArray(element._shadowChildren) && !isMutated, 'Component\\'s children should not be mutated.%s', ReactComponentTreeDevtool.getStackAddendumByID(debugID)) : void 0;\n}\n\nvar ReactDOMUnknownPropertyDevtool = {\n  onBeforeMountComponent: function (debugID, element) {\n    elements[debugID] = element;\n  },\n  onBeforeUpdateComponent: function (debugID, element) {\n    elements[debugID] = element;\n  },\n  onComponentHasMounted: function (debugID) {\n    handleElement(debugID, elements[debugID]);\n    delete elements[debugID];\n  },\n  onComponentHasUpdated: function (debugID) {\n    handleElement(debugID, elements[debugID]);\n    delete elements[debugID];\n  }\n};\n\nmodule.exports = ReactDOMUnknownPropertyDevtool;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactChildrenMutationWarningDevtool.js\n ** module id = 69\n ** module chunks = 4\n **/","'use strict';\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @typechecks\n */\n\nvar performance = require('./performance');\n\nvar performanceNow;\n\n/**\n * Detect if we can use `window.performance.now()` and gracefully fallback to\n * `Date.now()` if it doesn't exist. We need to support Firefox < 15 for now\n * because of Facebook's testing infrastructure.\n */\nif (performance.now) {\n  performanceNow = function performanceNow() {\n    return performance.now();\n  };\n} else {\n  performanceNow = function performanceNow() {\n    return Date.now();\n  };\n}\n\nmodule.exports = performanceNow;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/fbjs/lib/performanceNow.js\n ** module id = 70\n ** module chunks = 4\n **/","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @typechecks\n */\n\n'use strict';\n\nvar ExecutionEnvironment = require('./ExecutionEnvironment');\n\nvar performance;\n\nif (ExecutionEnvironment.canUseDOM) {\n  performance = window.performance || window.msPerformance || window.webkitPerformance;\n}\n\nmodule.exports = performance || {};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/fbjs/lib/performance.js\n ** module id = 71\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule Transaction\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * `Transaction` creates a black box that is able to wrap any method such that\n * certain invariants are maintained before and after the method is invoked\n * (Even if an exception is thrown while invoking the wrapped method). Whoever\n * instantiates a transaction can provide enforcers of the invariants at\n * creation time. The `Transaction` class itself will supply one additional\n * automatic invariant for you - the invariant that any transaction instance\n * should not be run while it is already being run. You would typically create a\n * single instance of a `Transaction` for reuse multiple times, that potentially\n * is used to wrap several different methods. Wrappers are extremely simple -\n * they only require implementing two methods.\n *\n * <pre>\n *                       wrappers (injected at creation time)\n *                                      +        +\n *                                      |        |\n *                    +-----------------|--------|--------------+\n *                    |                 v        |              |\n *                    |      +---------------+   |              |\n *                    |   +--|    wrapper1   |---|----+         |\n *                    |   |  +---------------+   v    |         |\n *                    |   |          +-------------+  |         |\n *                    |   |     +----|   wrapper2  |--------+   |\n *                    |   |     |    +-------------+  |     |   |\n *                    |   |     |                     |     |   |\n *                    |   v     v                     v     v   | wrapper\n *                    | +---+ +---+   +---------+   +---+ +---+ | invariants\n * perform(anyMethod) | |   | |   |   |         |   |   | |   | | maintained\n * +----------------->|-|---|-|---|-->|anyMethod|---|---|-|---|-|-------->\n *                    | |   | |   |   |         |   |   | |   | |\n *                    | |   | |   |   |         |   |   | |   | |\n *                    | |   | |   |   |         |   |   | |   | |\n *                    | +---+ +---+   +---------+   +---+ +---+ |\n *                    |  initialize                    close    |\n *                    +-----------------------------------------+\n * </pre>\n *\n * Use cases:\n * - Preserving the input selection ranges before/after reconciliation.\n *   Restoring selection even in the event of an unexpected error.\n * - Deactivating events while rearranging the DOM, preventing blurs/focuses,\n *   while guaranteeing that afterwards, the event system is reactivated.\n * - Flushing a queue of collected DOM mutations to the main UI thread after a\n *   reconciliation takes place in a worker thread.\n * - Invoking any collected `componentDidUpdate` callbacks after rendering new\n *   content.\n * - (Future use case): Wrapping particular flushes of the `ReactWorker` queue\n *   to preserve the `scrollTop` (an automatic scroll aware DOM).\n * - (Future use case): Layout calculations before and after DOM updates.\n *\n * Transactional plugin API:\n * - A module that has an `initialize` method that returns any precomputation.\n * - and a `close` method that accepts the precomputation. `close` is invoked\n *   when the wrapped process is completed, or has failed.\n *\n * @param {Array<TransactionalWrapper>} transactionWrapper Wrapper modules\n * that implement `initialize` and `close`.\n * @return {Transaction} Single transaction for reuse in thread.\n *\n * @class Transaction\n */\nvar Mixin = {\n  /**\n   * Sets up this instance so that it is prepared for collecting metrics. Does\n   * so such that this setup method may be used on an instance that is already\n   * initialized, in a way that does not consume additional memory upon reuse.\n   * That can be useful if you decide to make your subclass of this mixin a\n   * \"PooledClass\".\n   */\n  reinitializeTransaction: function () {\n    this.transactionWrappers = this.getTransactionWrappers();\n    if (this.wrapperInitData) {\n      this.wrapperInitData.length = 0;\n    } else {\n      this.wrapperInitData = [];\n    }\n    this._isInTransaction = false;\n  },\n\n  _isInTransaction: false,\n\n  /**\n   * @abstract\n   * @return {Array<TransactionWrapper>} Array of transaction wrappers.\n   */\n  getTransactionWrappers: null,\n\n  isInTransaction: function () {\n    return !!this._isInTransaction;\n  },\n\n  /**\n   * Executes the function within a safety window. Use this for the top level\n   * methods that result in large amounts of computation/mutations that would\n   * need to be safety checked. The optional arguments helps prevent the need\n   * to bind in many cases.\n   *\n   * @param {function} method Member of scope to call.\n   * @param {Object} scope Scope to invoke from.\n   * @param {Object?=} a Argument to pass to the method.\n   * @param {Object?=} b Argument to pass to the method.\n   * @param {Object?=} c Argument to pass to the method.\n   * @param {Object?=} d Argument to pass to the method.\n   * @param {Object?=} e Argument to pass to the method.\n   * @param {Object?=} f Argument to pass to the method.\n   *\n   * @return {*} Return value from `method`.\n   */\n  perform: function (method, scope, a, b, c, d, e, f) {\n    !!this.isInTransaction() ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Transaction.perform(...): Cannot initialize a transaction when there is already an outstanding transaction.') : _prodInvariant('27') : void 0;\n    var errorThrown;\n    var ret;\n    try {\n      this._isInTransaction = true;\n      // Catching errors makes debugging more difficult, so we start with\n      // errorThrown set to true before setting it to false after calling\n      // close -- if it's still set to true in the finally block, it means\n      // one of these calls threw.\n      errorThrown = true;\n      this.initializeAll(0);\n      ret = method.call(scope, a, b, c, d, e, f);\n      errorThrown = false;\n    } finally {\n      try {\n        if (errorThrown) {\n          // If `method` throws, prefer to show that stack trace over any thrown\n          // by invoking `closeAll`.\n          try {\n            this.closeAll(0);\n          } catch (err) {}\n        } else {\n          // Since `method` didn't throw, we don't want to silence the exception\n          // here.\n          this.closeAll(0);\n        }\n      } finally {\n        this._isInTransaction = false;\n      }\n    }\n    return ret;\n  },\n\n  initializeAll: function (startIndex) {\n    var transactionWrappers = this.transactionWrappers;\n    for (var i = startIndex; i < transactionWrappers.length; i++) {\n      var wrapper = transactionWrappers[i];\n      try {\n        // Catching errors makes debugging more difficult, so we start with the\n        // OBSERVED_ERROR state before overwriting it with the real return value\n        // of initialize -- if it's still set to OBSERVED_ERROR in the finally\n        // block, it means wrapper.initialize threw.\n        this.wrapperInitData[i] = Transaction.OBSERVED_ERROR;\n        this.wrapperInitData[i] = wrapper.initialize ? wrapper.initialize.call(this) : null;\n      } finally {\n        if (this.wrapperInitData[i] === Transaction.OBSERVED_ERROR) {\n          // The initializer for wrapper i threw an error; initialize the\n          // remaining wrappers but silence any exceptions from them to ensure\n          // that the first error is the one to bubble up.\n          try {\n            this.initializeAll(i + 1);\n          } catch (err) {}\n        }\n      }\n    }\n  },\n\n  /**\n   * Invokes each of `this.transactionWrappers.close[i]` functions, passing into\n   * them the respective return values of `this.transactionWrappers.init[i]`\n   * (`close`rs that correspond to initializers that failed will not be\n   * invoked).\n   */\n  closeAll: function (startIndex) {\n    !this.isInTransaction() ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Transaction.closeAll(): Cannot close transaction when none are open.') : _prodInvariant('28') : void 0;\n    var transactionWrappers = this.transactionWrappers;\n    for (var i = startIndex; i < transactionWrappers.length; i++) {\n      var wrapper = transactionWrappers[i];\n      var initData = this.wrapperInitData[i];\n      var errorThrown;\n      try {\n        // Catching errors makes debugging more difficult, so we start with\n        // errorThrown set to true before setting it to false after calling\n        // close -- if it's still set to true in the finally block, it means\n        // wrapper.close threw.\n        errorThrown = true;\n        if (initData !== Transaction.OBSERVED_ERROR && wrapper.close) {\n          wrapper.close.call(this, initData);\n        }\n        errorThrown = false;\n      } finally {\n        if (errorThrown) {\n          // The closer for wrapper i threw an error; close the remaining\n          // wrappers but silence any exceptions from them to ensure that the\n          // first error is the one to bubble up.\n          try {\n            this.closeAll(i + 1);\n          } catch (e) {}\n        }\n      }\n    }\n    this.wrapperInitData.length = 0;\n  }\n};\n\nvar Transaction = {\n\n  Mixin: Mixin,\n\n  /**\n   * Token to look for to determine if an error occurred.\n   */\n  OBSERVED_ERROR: {}\n\n};\n\nmodule.exports = Transaction;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/Transaction.js\n ** module id = 72\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getEventTarget\n */\n\n'use strict';\n\n/**\n * Gets the target node from a native browser event by accounting for\n * inconsistencies in browser DOM APIs.\n *\n * @param {object} nativeEvent Native browser event.\n * @return {DOMEventTarget} Target node.\n */\n\nfunction getEventTarget(nativeEvent) {\n  var target = nativeEvent.target || nativeEvent.srcElement || window;\n\n  // Normalize SVG <use> element events #4963\n  if (target.correspondingUseElement) {\n    target = target.correspondingUseElement;\n  }\n\n  // Safari may fire events on text nodes (Node.TEXT_NODE is 3).\n  // @see http://www.quirksmode.org/js/events_properties.html\n  return target.nodeType === 3 ? target.parentNode : target;\n}\n\nmodule.exports = getEventTarget;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/getEventTarget.js\n ** module id = 73\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule isEventSupported\n */\n\n'use strict';\n\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\n\nvar useHasFeature;\nif (ExecutionEnvironment.canUseDOM) {\n  useHasFeature = document.implementation && document.implementation.hasFeature &&\n  // always returns true in newer browsers as per the standard.\n  // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature\n  document.implementation.hasFeature('', '') !== true;\n}\n\n/**\n * Checks if an event is supported in the current execution environment.\n *\n * NOTE: This will not work correctly for non-generic events such as `change`,\n * `reset`, `load`, `error`, and `select`.\n *\n * Borrows from Modernizr.\n *\n * @param {string} eventNameSuffix Event name, e.g. \"click\".\n * @param {?boolean} capture Check if the capture phase is supported.\n * @return {boolean} True if the event is supported.\n * @internal\n * @license Modernizr 3.0.0pre (Custom Build) | MIT\n */\nfunction isEventSupported(eventNameSuffix, capture) {\n  if (!ExecutionEnvironment.canUseDOM || capture && !('addEventListener' in document)) {\n    return false;\n  }\n\n  var eventName = 'on' + eventNameSuffix;\n  var isSupported = eventName in document;\n\n  if (!isSupported) {\n    var element = document.createElement('div');\n    element.setAttribute(eventName, 'return;');\n    isSupported = typeof element[eventName] === 'function';\n  }\n\n  if (!isSupported && useHasFeature && eventNameSuffix === 'wheel') {\n    // This is the only way to test support for the `wheel` event in IE9+.\n    isSupported = document.implementation.hasFeature('Events.wheel', '3.0');\n  }\n\n  return isSupported;\n}\n\nmodule.exports = isEventSupported;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/isEventSupported.js\n ** module id = 74\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule isTextInputElement\n * \n */\n\n'use strict';\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary\n */\n\nvar supportedInputTypes = {\n  'color': true,\n  'date': true,\n  'datetime': true,\n  'datetime-local': true,\n  'email': true,\n  'month': true,\n  'number': true,\n  'password': true,\n  'range': true,\n  'search': true,\n  'tel': true,\n  'text': true,\n  'time': true,\n  'url': true,\n  'week': true\n};\n\nfunction isTextInputElement(elem) {\n  var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n\n  if (nodeName === 'input') {\n    return !!supportedInputTypes[elem.type];\n  }\n\n  if (nodeName === 'textarea') {\n    return true;\n  }\n\n  return false;\n}\n\nmodule.exports = isTextInputElement;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/isTextInputElement.js\n ** module id = 75\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule DefaultEventPluginOrder\n */\n\n'use strict';\n\nvar keyOf = require('fbjs/lib/keyOf');\n\n/**\n * Module that is injectable into `EventPluginHub`, that specifies a\n * deterministic ordering of `EventPlugin`s. A convenient way to reason about\n * plugins, without having to package every one of them. This is better than\n * having plugins be ordered in the same order that they are injected because\n * that ordering would be influenced by the packaging order.\n * `ResponderEventPlugin` must occur before `SimpleEventPlugin` so that\n * preventing default on events is convenient in `SimpleEventPlugin` handlers.\n */\nvar DefaultEventPluginOrder = [keyOf({ ResponderEventPlugin: null }), keyOf({ SimpleEventPlugin: null }), keyOf({ TapEventPlugin: null }), keyOf({ EnterLeaveEventPlugin: null }), keyOf({ ChangeEventPlugin: null }), keyOf({ SelectEventPlugin: null }), keyOf({ BeforeInputEventPlugin: null })];\n\nmodule.exports = DefaultEventPluginOrder;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/DefaultEventPluginOrder.js\n ** module id = 76\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule EnterLeaveEventPlugin\n */\n\n'use strict';\n\nvar EventConstants = require('./EventConstants');\nvar EventPropagators = require('./EventPropagators');\nvar ReactDOMComponentTree = require('./ReactDOMComponentTree');\nvar SyntheticMouseEvent = require('./SyntheticMouseEvent');\n\nvar keyOf = require('fbjs/lib/keyOf');\n\nvar topLevelTypes = EventConstants.topLevelTypes;\n\nvar eventTypes = {\n  mouseEnter: {\n    registrationName: keyOf({ onMouseEnter: null }),\n    dependencies: [topLevelTypes.topMouseOut, topLevelTypes.topMouseOver]\n  },\n  mouseLeave: {\n    registrationName: keyOf({ onMouseLeave: null }),\n    dependencies: [topLevelTypes.topMouseOut, topLevelTypes.topMouseOver]\n  }\n};\n\nvar EnterLeaveEventPlugin = {\n\n  eventTypes: eventTypes,\n\n  /**\n   * For almost every interaction we care about, there will be both a top-level\n   * `mouseover` and `mouseout` event that occurs. Only use `mouseout` so that\n   * we do not extract duplicate events. However, moving the mouse into the\n   * browser from outside will not fire a `mouseout` event. In this case, we use\n   * the `mouseover` top-level event.\n   */\n  extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n    if (topLevelType === topLevelTypes.topMouseOver && (nativeEvent.relatedTarget || nativeEvent.fromElement)) {\n      return null;\n    }\n    if (topLevelType !== topLevelTypes.topMouseOut && topLevelType !== topLevelTypes.topMouseOver) {\n      // Must not be a mouse in or mouse out - ignoring.\n      return null;\n    }\n\n    var win;\n    if (nativeEventTarget.window === nativeEventTarget) {\n      // `nativeEventTarget` is probably a window object.\n      win = nativeEventTarget;\n    } else {\n      // TODO: Figure out why `ownerDocument` is sometimes undefined in IE8.\n      var doc = nativeEventTarget.ownerDocument;\n      if (doc) {\n        win = doc.defaultView || doc.parentWindow;\n      } else {\n        win = window;\n      }\n    }\n\n    var from;\n    var to;\n    if (topLevelType === topLevelTypes.topMouseOut) {\n      from = targetInst;\n      var related = nativeEvent.relatedTarget || nativeEvent.toElement;\n      to = related ? ReactDOMComponentTree.getClosestInstanceFromNode(related) : null;\n    } else {\n      // Moving to a node from outside the window.\n      from = null;\n      to = targetInst;\n    }\n\n    if (from === to) {\n      // Nothing pertains to our managed components.\n      return null;\n    }\n\n    var fromNode = from == null ? win : ReactDOMComponentTree.getNodeFromInstance(from);\n    var toNode = to == null ? win : ReactDOMComponentTree.getNodeFromInstance(to);\n\n    var leave = SyntheticMouseEvent.getPooled(eventTypes.mouseLeave, from, nativeEvent, nativeEventTarget);\n    leave.type = 'mouseleave';\n    leave.target = fromNode;\n    leave.relatedTarget = toNode;\n\n    var enter = SyntheticMouseEvent.getPooled(eventTypes.mouseEnter, to, nativeEvent, nativeEventTarget);\n    enter.type = 'mouseenter';\n    enter.target = toNode;\n    enter.relatedTarget = fromNode;\n\n    EventPropagators.accumulateEnterLeaveDispatches(leave, enter, from, to);\n\n    return [leave, enter];\n  }\n\n};\n\nmodule.exports = EnterLeaveEventPlugin;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/EnterLeaveEventPlugin.js\n ** module id = 77\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticMouseEvent\n */\n\n'use strict';\n\nvar SyntheticUIEvent = require('./SyntheticUIEvent');\nvar ViewportMetrics = require('./ViewportMetrics');\n\nvar getEventModifierState = require('./getEventModifierState');\n\n/**\n * @interface MouseEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar MouseEventInterface = {\n  screenX: null,\n  screenY: null,\n  clientX: null,\n  clientY: null,\n  ctrlKey: null,\n  shiftKey: null,\n  altKey: null,\n  metaKey: null,\n  getModifierState: getEventModifierState,\n  button: function (event) {\n    // Webkit, Firefox, IE9+\n    // which:  1 2 3\n    // button: 0 1 2 (standard)\n    var button = event.button;\n    if ('which' in event) {\n      return button;\n    }\n    // IE<9\n    // which:  undefined\n    // button: 0 0 0\n    // button: 1 4 2 (onmouseup)\n    return button === 2 ? 2 : button === 4 ? 1 : 0;\n  },\n  buttons: null,\n  relatedTarget: function (event) {\n    return event.relatedTarget || (event.fromElement === event.srcElement ? event.toElement : event.fromElement);\n  },\n  // \"Proprietary\" Interface.\n  pageX: function (event) {\n    return 'pageX' in event ? event.pageX : event.clientX + ViewportMetrics.currentScrollLeft;\n  },\n  pageY: function (event) {\n    return 'pageY' in event ? event.pageY : event.clientY + ViewportMetrics.currentScrollTop;\n  }\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticMouseEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n  return SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticUIEvent.augmentClass(SyntheticMouseEvent, MouseEventInterface);\n\nmodule.exports = SyntheticMouseEvent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SyntheticMouseEvent.js\n ** module id = 78\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticUIEvent\n */\n\n'use strict';\n\nvar SyntheticEvent = require('./SyntheticEvent');\n\nvar getEventTarget = require('./getEventTarget');\n\n/**\n * @interface UIEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar UIEventInterface = {\n  view: function (event) {\n    if (event.view) {\n      return event.view;\n    }\n\n    var target = getEventTarget(event);\n    if (target.window === target) {\n      // target is a window object\n      return target;\n    }\n\n    var doc = target.ownerDocument;\n    // TODO: Figure out why `ownerDocument` is sometimes undefined in IE8.\n    if (doc) {\n      return doc.defaultView || doc.parentWindow;\n    } else {\n      return window;\n    }\n  },\n  detail: function (event) {\n    return event.detail || 0;\n  }\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticEvent}\n */\nfunction SyntheticUIEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n  return SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticEvent.augmentClass(SyntheticUIEvent, UIEventInterface);\n\nmodule.exports = SyntheticUIEvent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SyntheticUIEvent.js\n ** module id = 79\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ViewportMetrics\n */\n\n'use strict';\n\nvar ViewportMetrics = {\n\n  currentScrollLeft: 0,\n\n  currentScrollTop: 0,\n\n  refreshScrollValues: function (scrollPosition) {\n    ViewportMetrics.currentScrollLeft = scrollPosition.x;\n    ViewportMetrics.currentScrollTop = scrollPosition.y;\n  }\n\n};\n\nmodule.exports = ViewportMetrics;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ViewportMetrics.js\n ** module id = 80\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getEventModifierState\n */\n\n'use strict';\n\n/**\n * Translation from modifier key to the associated property in the event.\n * @see http://www.w3.org/TR/DOM-Level-3-Events/#keys-Modifiers\n */\n\nvar modifierKeyToProp = {\n  'Alt': 'altKey',\n  'Control': 'ctrlKey',\n  'Meta': 'metaKey',\n  'Shift': 'shiftKey'\n};\n\n// IE8 does not implement getModifierState so we simply map it to the only\n// modifier keys exposed by the event itself, does not support Lock-keys.\n// Currently, all major browsers except Chrome seems to support Lock-keys.\nfunction modifierStateGetter(keyArg) {\n  var syntheticEvent = this;\n  var nativeEvent = syntheticEvent.nativeEvent;\n  if (nativeEvent.getModifierState) {\n    return nativeEvent.getModifierState(keyArg);\n  }\n  var keyProp = modifierKeyToProp[keyArg];\n  return keyProp ? !!nativeEvent[keyProp] : false;\n}\n\nfunction getEventModifierState(nativeEvent) {\n  return modifierStateGetter;\n}\n\nmodule.exports = getEventModifierState;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/getEventModifierState.js\n ** module id = 81\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule HTMLDOMPropertyConfig\n */\n\n'use strict';\n\nvar DOMProperty = require('./DOMProperty');\n\nvar MUST_USE_PROPERTY = DOMProperty.injection.MUST_USE_PROPERTY;\nvar HAS_BOOLEAN_VALUE = DOMProperty.injection.HAS_BOOLEAN_VALUE;\nvar HAS_NUMERIC_VALUE = DOMProperty.injection.HAS_NUMERIC_VALUE;\nvar HAS_POSITIVE_NUMERIC_VALUE = DOMProperty.injection.HAS_POSITIVE_NUMERIC_VALUE;\nvar HAS_OVERLOADED_BOOLEAN_VALUE = DOMProperty.injection.HAS_OVERLOADED_BOOLEAN_VALUE;\n\nvar HTMLDOMPropertyConfig = {\n  isCustomAttribute: RegExp.prototype.test.bind(new RegExp('^(data|aria)-[' + DOMProperty.ATTRIBUTE_NAME_CHAR + ']*$')),\n  Properties: {\n    /**\n     * Standard Properties\n     */\n    accept: 0,\n    acceptCharset: 0,\n    accessKey: 0,\n    action: 0,\n    allowFullScreen: HAS_BOOLEAN_VALUE,\n    allowTransparency: 0,\n    alt: 0,\n    async: HAS_BOOLEAN_VALUE,\n    autoComplete: 0,\n    // autoFocus is polyfilled/normalized by AutoFocusUtils\n    // autoFocus: HAS_BOOLEAN_VALUE,\n    autoPlay: HAS_BOOLEAN_VALUE,\n    capture: HAS_BOOLEAN_VALUE,\n    cellPadding: 0,\n    cellSpacing: 0,\n    charSet: 0,\n    challenge: 0,\n    checked: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\n    cite: 0,\n    classID: 0,\n    className: 0,\n    cols: HAS_POSITIVE_NUMERIC_VALUE,\n    colSpan: 0,\n    content: 0,\n    contentEditable: 0,\n    contextMenu: 0,\n    controls: HAS_BOOLEAN_VALUE,\n    coords: 0,\n    crossOrigin: 0,\n    data: 0, // For `<object />` acts as `src`.\n    dateTime: 0,\n    'default': HAS_BOOLEAN_VALUE,\n    defer: HAS_BOOLEAN_VALUE,\n    dir: 0,\n    disabled: HAS_BOOLEAN_VALUE,\n    download: HAS_OVERLOADED_BOOLEAN_VALUE,\n    draggable: 0,\n    encType: 0,\n    form: 0,\n    formAction: 0,\n    formEncType: 0,\n    formMethod: 0,\n    formNoValidate: HAS_BOOLEAN_VALUE,\n    formTarget: 0,\n    frameBorder: 0,\n    headers: 0,\n    height: 0,\n    hidden: HAS_BOOLEAN_VALUE,\n    high: 0,\n    href: 0,\n    hrefLang: 0,\n    htmlFor: 0,\n    httpEquiv: 0,\n    icon: 0,\n    id: 0,\n    inputMode: 0,\n    integrity: 0,\n    is: 0,\n    keyParams: 0,\n    keyType: 0,\n    kind: 0,\n    label: 0,\n    lang: 0,\n    list: 0,\n    loop: HAS_BOOLEAN_VALUE,\n    low: 0,\n    manifest: 0,\n    marginHeight: 0,\n    marginWidth: 0,\n    max: 0,\n    maxLength: 0,\n    media: 0,\n    mediaGroup: 0,\n    method: 0,\n    min: 0,\n    minLength: 0,\n    // Caution; `option.selected` is not updated if `select.multiple` is\n    // disabled with `removeAttribute`.\n    multiple: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\n    muted: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\n    name: 0,\n    nonce: 0,\n    noValidate: HAS_BOOLEAN_VALUE,\n    open: HAS_BOOLEAN_VALUE,\n    optimum: 0,\n    pattern: 0,\n    placeholder: 0,\n    poster: 0,\n    preload: 0,\n    profile: 0,\n    radioGroup: 0,\n    readOnly: HAS_BOOLEAN_VALUE,\n    referrerPolicy: 0,\n    rel: 0,\n    required: HAS_BOOLEAN_VALUE,\n    reversed: HAS_BOOLEAN_VALUE,\n    role: 0,\n    rows: HAS_POSITIVE_NUMERIC_VALUE,\n    rowSpan: HAS_NUMERIC_VALUE,\n    sandbox: 0,\n    scope: 0,\n    scoped: HAS_BOOLEAN_VALUE,\n    scrolling: 0,\n    seamless: HAS_BOOLEAN_VALUE,\n    selected: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\n    shape: 0,\n    size: HAS_POSITIVE_NUMERIC_VALUE,\n    sizes: 0,\n    span: HAS_POSITIVE_NUMERIC_VALUE,\n    spellCheck: 0,\n    src: 0,\n    srcDoc: 0,\n    srcLang: 0,\n    srcSet: 0,\n    start: HAS_NUMERIC_VALUE,\n    step: 0,\n    style: 0,\n    summary: 0,\n    tabIndex: 0,\n    target: 0,\n    title: 0,\n    // Setting .type throws on non-<input> tags\n    type: 0,\n    useMap: 0,\n    value: 0,\n    width: 0,\n    wmode: 0,\n    wrap: 0,\n\n    /**\n     * RDFa Properties\n     */\n    about: 0,\n    datatype: 0,\n    inlist: 0,\n    prefix: 0,\n    // property is also supported for OpenGraph in meta tags.\n    property: 0,\n    resource: 0,\n    'typeof': 0,\n    vocab: 0,\n\n    /**\n     * Non-standard Properties\n     */\n    // autoCapitalize and autoCorrect are supported in Mobile Safari for\n    // keyboard hints.\n    autoCapitalize: 0,\n    autoCorrect: 0,\n    // autoSave allows WebKit/Blink to persist values of input fields on page reloads\n    autoSave: 0,\n    // color is for Safari mask-icon link\n    color: 0,\n    // itemProp, itemScope, itemType are for\n    // Microdata support. See http://schema.org/docs/gs.html\n    itemProp: 0,\n    itemScope: HAS_BOOLEAN_VALUE,\n    itemType: 0,\n    // itemID and itemRef are for Microdata support as well but\n    // only specified in the WHATWG spec document. See\n    // https://html.spec.whatwg.org/multipage/microdata.html#microdata-dom-api\n    itemID: 0,\n    itemRef: 0,\n    // results show looking glass icon and recent searches on input\n    // search fields in WebKit/Blink\n    results: 0,\n    // IE-only attribute that specifies security restrictions on an iframe\n    // as an alternative to the sandbox attribute on IE<10\n    security: 0,\n    // IE-only attribute that controls focus behavior\n    unselectable: 0\n  },\n  DOMAttributeNames: {\n    acceptCharset: 'accept-charset',\n    className: 'class',\n    htmlFor: 'for',\n    httpEquiv: 'http-equiv'\n  },\n  DOMPropertyNames: {}\n};\n\nmodule.exports = HTMLDOMPropertyConfig;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/HTMLDOMPropertyConfig.js\n ** module id = 82\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactComponentBrowserEnvironment\n */\n\n'use strict';\n\nvar DOMChildrenOperations = require('./DOMChildrenOperations');\nvar ReactDOMIDOperations = require('./ReactDOMIDOperations');\n\n/**\n * Abstracts away all functionality of the reconciler that requires knowledge of\n * the browser context. TODO: These callers should be refactored to avoid the\n * need for this injection.\n */\nvar ReactComponentBrowserEnvironment = {\n\n  processChildrenUpdates: ReactDOMIDOperations.dangerouslyProcessChildrenUpdates,\n\n  replaceNodeWithMarkup: DOMChildrenOperations.dangerouslyReplaceNodeWithMarkup,\n\n  /**\n   * If a particular environment requires that some resources be cleaned up,\n   * specify this in the injected Mixin. In the DOM, we would likely want to\n   * purge any cached node ID lookups.\n   *\n   * @private\n   */\n  unmountIDFromEnvironment: function (rootNodeID) {}\n\n};\n\nmodule.exports = ReactComponentBrowserEnvironment;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactComponentBrowserEnvironment.js\n ** module id = 83\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule DOMChildrenOperations\n */\n\n'use strict';\n\nvar DOMLazyTree = require('./DOMLazyTree');\nvar Danger = require('./Danger');\nvar ReactMultiChildUpdateTypes = require('./ReactMultiChildUpdateTypes');\nvar ReactDOMComponentTree = require('./ReactDOMComponentTree');\nvar ReactInstrumentation = require('./ReactInstrumentation');\n\nvar createMicrosoftUnsafeLocalFunction = require('./createMicrosoftUnsafeLocalFunction');\nvar setInnerHTML = require('./setInnerHTML');\nvar setTextContent = require('./setTextContent');\n\nfunction getNodeAfter(parentNode, node) {\n  // Special case for text components, which return [open, close] comments\n  // from getHostNode.\n  if (Array.isArray(node)) {\n    node = node[1];\n  }\n  return node ? node.nextSibling : parentNode.firstChild;\n}\n\n/**\n * Inserts `childNode` as a child of `parentNode` at the `index`.\n *\n * @param {DOMElement} parentNode Parent node in which to insert.\n * @param {DOMElement} childNode Child node to insert.\n * @param {number} index Index at which to insert the child.\n * @internal\n */\nvar insertChildAt = createMicrosoftUnsafeLocalFunction(function (parentNode, childNode, referenceNode) {\n  // We rely exclusively on `insertBefore(node, null)` instead of also using\n  // `appendChild(node)`. (Using `undefined` is not allowed by all browsers so\n  // we are careful to use `null`.)\n  parentNode.insertBefore(childNode, referenceNode);\n});\n\nfunction insertLazyTreeChildAt(parentNode, childTree, referenceNode) {\n  DOMLazyTree.insertTreeBefore(parentNode, childTree, referenceNode);\n}\n\nfunction moveChild(parentNode, childNode, referenceNode) {\n  if (Array.isArray(childNode)) {\n    moveDelimitedText(parentNode, childNode[0], childNode[1], referenceNode);\n  } else {\n    insertChildAt(parentNode, childNode, referenceNode);\n  }\n}\n\nfunction removeChild(parentNode, childNode) {\n  if (Array.isArray(childNode)) {\n    var closingComment = childNode[1];\n    childNode = childNode[0];\n    removeDelimitedText(parentNode, childNode, closingComment);\n    parentNode.removeChild(closingComment);\n  }\n  parentNode.removeChild(childNode);\n}\n\nfunction moveDelimitedText(parentNode, openingComment, closingComment, referenceNode) {\n  var node = openingComment;\n  while (true) {\n    var nextNode = node.nextSibling;\n    insertChildAt(parentNode, node, referenceNode);\n    if (node === closingComment) {\n      break;\n    }\n    node = nextNode;\n  }\n}\n\nfunction removeDelimitedText(parentNode, startNode, closingComment) {\n  while (true) {\n    var node = startNode.nextSibling;\n    if (node === closingComment) {\n      // The closing comment is removed by ReactMultiChild.\n      break;\n    } else {\n      parentNode.removeChild(node);\n    }\n  }\n}\n\nfunction replaceDelimitedText(openingComment, closingComment, stringText) {\n  var parentNode = openingComment.parentNode;\n  var nodeAfterComment = openingComment.nextSibling;\n  if (nodeAfterComment === closingComment) {\n    // There are no text nodes between the opening and closing comments; insert\n    // a new one if stringText isn't empty.\n    if (stringText) {\n      insertChildAt(parentNode, document.createTextNode(stringText), nodeAfterComment);\n    }\n  } else {\n    if (stringText) {\n      // Set the text content of the first node after the opening comment, and\n      // remove all following nodes up until the closing comment.\n      setTextContent(nodeAfterComment, stringText);\n      removeDelimitedText(parentNode, nodeAfterComment, closingComment);\n    } else {\n      removeDelimitedText(parentNode, openingComment, closingComment);\n    }\n  }\n\n  if (process.env.NODE_ENV !== 'production') {\n    ReactInstrumentation.debugTool.onHostOperation(ReactDOMComponentTree.getInstanceFromNode(openingComment)._debugID, 'replace text', stringText);\n  }\n}\n\nvar dangerouslyReplaceNodeWithMarkup = Danger.dangerouslyReplaceNodeWithMarkup;\nif (process.env.NODE_ENV !== 'production') {\n  dangerouslyReplaceNodeWithMarkup = function (oldChild, markup, prevInstance) {\n    Danger.dangerouslyReplaceNodeWithMarkup(oldChild, markup);\n    if (prevInstance._debugID !== 0) {\n      ReactInstrumentation.debugTool.onHostOperation(prevInstance._debugID, 'replace with', markup.toString());\n    } else {\n      var nextInstance = ReactDOMComponentTree.getInstanceFromNode(markup.node);\n      if (nextInstance._debugID !== 0) {\n        ReactInstrumentation.debugTool.onHostOperation(nextInstance._debugID, 'mount', markup.toString());\n      }\n    }\n  };\n}\n\n/**\n * Operations for updating with DOM children.\n */\nvar DOMChildrenOperations = {\n\n  dangerouslyReplaceNodeWithMarkup: dangerouslyReplaceNodeWithMarkup,\n\n  replaceDelimitedText: replaceDelimitedText,\n\n  /**\n   * Updates a component's children by processing a series of updates. The\n   * update configurations are each expected to have a `parentNode` property.\n   *\n   * @param {array<object>} updates List of update configurations.\n   * @internal\n   */\n  processUpdates: function (parentNode, updates) {\n    if (process.env.NODE_ENV !== 'production') {\n      var parentNodeDebugID = ReactDOMComponentTree.getInstanceFromNode(parentNode)._debugID;\n    }\n\n    for (var k = 0; k < updates.length; k++) {\n      var update = updates[k];\n      switch (update.type) {\n        case ReactMultiChildUpdateTypes.INSERT_MARKUP:\n          insertLazyTreeChildAt(parentNode, update.content, getNodeAfter(parentNode, update.afterNode));\n          if (process.env.NODE_ENV !== 'production') {\n            ReactInstrumentation.debugTool.onHostOperation(parentNodeDebugID, 'insert child', { toIndex: update.toIndex, content: update.content.toString() });\n          }\n          break;\n        case ReactMultiChildUpdateTypes.MOVE_EXISTING:\n          moveChild(parentNode, update.fromNode, getNodeAfter(parentNode, update.afterNode));\n          if (process.env.NODE_ENV !== 'production') {\n            ReactInstrumentation.debugTool.onHostOperation(parentNodeDebugID, 'move child', { fromIndex: update.fromIndex, toIndex: update.toIndex });\n          }\n          break;\n        case ReactMultiChildUpdateTypes.SET_MARKUP:\n          setInnerHTML(parentNode, update.content);\n          if (process.env.NODE_ENV !== 'production') {\n            ReactInstrumentation.debugTool.onHostOperation(parentNodeDebugID, 'replace children', update.content.toString());\n          }\n          break;\n        case ReactMultiChildUpdateTypes.TEXT_CONTENT:\n          setTextContent(parentNode, update.content);\n          if (process.env.NODE_ENV !== 'production') {\n            ReactInstrumentation.debugTool.onHostOperation(parentNodeDebugID, 'replace text', update.content.toString());\n          }\n          break;\n        case ReactMultiChildUpdateTypes.REMOVE_NODE:\n          removeChild(parentNode, update.fromNode);\n          if (process.env.NODE_ENV !== 'production') {\n            ReactInstrumentation.debugTool.onHostOperation(parentNodeDebugID, 'remove child', { fromIndex: update.fromIndex });\n          }\n          break;\n      }\n    }\n  }\n\n};\n\nmodule.exports = DOMChildrenOperations;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/DOMChildrenOperations.js\n ** module id = 84\n ** module chunks = 4\n **/","/**\n * Copyright 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule DOMLazyTree\n */\n\n'use strict';\n\nvar DOMNamespaces = require('./DOMNamespaces');\nvar setInnerHTML = require('./setInnerHTML');\n\nvar createMicrosoftUnsafeLocalFunction = require('./createMicrosoftUnsafeLocalFunction');\nvar setTextContent = require('./setTextContent');\n\nvar ELEMENT_NODE_TYPE = 1;\nvar DOCUMENT_FRAGMENT_NODE_TYPE = 11;\n\n/**\n * In IE (8-11) and Edge, appending nodes with no children is dramatically\n * faster than appending a full subtree, so we essentially queue up the\n * .appendChild calls here and apply them so each node is added to its parent\n * before any children are added.\n *\n * In other browsers, doing so is slower or neutral compared to the other order\n * (in Firefox, twice as slow) so we only do this inversion in IE.\n *\n * See https://github.com/spicyj/innerhtml-vs-createelement-vs-clonenode.\n */\nvar enableLazy = typeof document !== 'undefined' && typeof document.documentMode === 'number' || typeof navigator !== 'undefined' && typeof navigator.userAgent === 'string' && /\\bEdge\\/\\d/.test(navigator.userAgent);\n\nfunction insertTreeChildren(tree) {\n  if (!enableLazy) {\n    return;\n  }\n  var node = tree.node;\n  var children = tree.children;\n  if (children.length) {\n    for (var i = 0; i < children.length; i++) {\n      insertTreeBefore(node, children[i], null);\n    }\n  } else if (tree.html != null) {\n    setInnerHTML(node, tree.html);\n  } else if (tree.text != null) {\n    setTextContent(node, tree.text);\n  }\n}\n\nvar insertTreeBefore = createMicrosoftUnsafeLocalFunction(function (parentNode, tree, referenceNode) {\n  // DocumentFragments aren't actually part of the DOM after insertion so\n  // appending children won't update the DOM. We need to ensure the fragment\n  // is properly populated first, breaking out of our lazy approach for just\n  // this level. Also, some <object> plugins (like Flash Player) will read\n  // <param> nodes immediately upon insertion into the DOM, so <object>\n  // must also be populated prior to insertion into the DOM.\n  if (tree.node.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE || tree.node.nodeType === ELEMENT_NODE_TYPE && tree.node.nodeName.toLowerCase() === 'object' && (tree.node.namespaceURI == null || tree.node.namespaceURI === DOMNamespaces.html)) {\n    insertTreeChildren(tree);\n    parentNode.insertBefore(tree.node, referenceNode);\n  } else {\n    parentNode.insertBefore(tree.node, referenceNode);\n    insertTreeChildren(tree);\n  }\n});\n\nfunction replaceChildWithTree(oldNode, newTree) {\n  oldNode.parentNode.replaceChild(newTree.node, oldNode);\n  insertTreeChildren(newTree);\n}\n\nfunction queueChild(parentTree, childTree) {\n  if (enableLazy) {\n    parentTree.children.push(childTree);\n  } else {\n    parentTree.node.appendChild(childTree.node);\n  }\n}\n\nfunction queueHTML(tree, html) {\n  if (enableLazy) {\n    tree.html = html;\n  } else {\n    setInnerHTML(tree.node, html);\n  }\n}\n\nfunction queueText(tree, text) {\n  if (enableLazy) {\n    tree.text = text;\n  } else {\n    setTextContent(tree.node, text);\n  }\n}\n\nfunction toString() {\n  return this.node.nodeName;\n}\n\nfunction DOMLazyTree(node) {\n  return {\n    node: node,\n    children: [],\n    html: null,\n    text: null,\n    toString: toString\n  };\n}\n\nDOMLazyTree.insertTreeBefore = insertTreeBefore;\nDOMLazyTree.replaceChildWithTree = replaceChildWithTree;\nDOMLazyTree.queueChild = queueChild;\nDOMLazyTree.queueHTML = queueHTML;\nDOMLazyTree.queueText = queueText;\n\nmodule.exports = DOMLazyTree;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/DOMLazyTree.js\n ** module id = 85\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule DOMNamespaces\n */\n\n'use strict';\n\nvar DOMNamespaces = {\n  html: 'http://www.w3.org/1999/xhtml',\n  mathml: 'http://www.w3.org/1998/Math/MathML',\n  svg: 'http://www.w3.org/2000/svg'\n};\n\nmodule.exports = DOMNamespaces;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/DOMNamespaces.js\n ** module id = 86\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule setInnerHTML\n */\n\n'use strict';\n\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\nvar DOMNamespaces = require('./DOMNamespaces');\n\nvar WHITESPACE_TEST = /^[ \\r\\n\\t\\f]/;\nvar NONVISIBLE_TEST = /<(!--|link|noscript|meta|script|style)[ \\r\\n\\t\\f\\/>]/;\n\nvar createMicrosoftUnsafeLocalFunction = require('./createMicrosoftUnsafeLocalFunction');\n\n// SVG temp container for IE lacking innerHTML\nvar reusableSVGContainer;\n\n/**\n * Set the innerHTML property of a node, ensuring that whitespace is preserved\n * even in IE8.\n *\n * @param {DOMElement} node\n * @param {string} html\n * @internal\n */\nvar setInnerHTML = createMicrosoftUnsafeLocalFunction(function (node, html) {\n  // IE does not have innerHTML for SVG nodes, so instead we inject the\n  // new markup in a temp node and then move the child nodes across into\n  // the target node\n  if (node.namespaceURI === DOMNamespaces.svg && !('innerHTML' in node)) {\n    reusableSVGContainer = reusableSVGContainer || document.createElement('div');\n    reusableSVGContainer.innerHTML = '<svg>' + html + '</svg>';\n    var newNodes = reusableSVGContainer.firstChild.childNodes;\n    for (var i = 0; i < newNodes.length; i++) {\n      node.appendChild(newNodes[i]);\n    }\n  } else {\n    node.innerHTML = html;\n  }\n});\n\nif (ExecutionEnvironment.canUseDOM) {\n  // IE8: When updating a just created node with innerHTML only leading\n  // whitespace is removed. When updating an existing node with innerHTML\n  // whitespace in root TextNodes is also collapsed.\n  // @see quirksmode.org/bugreports/archives/2004/11/innerhtml_and_t.html\n\n  // Feature detection; only IE8 is known to behave improperly like this.\n  var testElement = document.createElement('div');\n  testElement.innerHTML = ' ';\n  if (testElement.innerHTML === '') {\n    setInnerHTML = function (node, html) {\n      // Magic theory: IE8 supposedly differentiates between added and updated\n      // nodes when processing innerHTML, innerHTML on updated nodes suffers\n      // from worse whitespace behavior. Re-adding a node like this triggers\n      // the initial and more favorable whitespace behavior.\n      // TODO: What to do on a detached node?\n      if (node.parentNode) {\n        node.parentNode.replaceChild(node, node);\n      }\n\n      // We also implement a workaround for non-visible tags disappearing into\n      // thin air on IE8, this only happens if there is no visible text\n      // in-front of the non-visible tags. Piggyback on the whitespace fix\n      // and simply check if any non-visible tags appear in the source.\n      if (WHITESPACE_TEST.test(html) || html[0] === '<' && NONVISIBLE_TEST.test(html)) {\n        // Recover leading whitespace by temporarily prepending any character.\n        // \\uFEFF has the potential advantage of being zero-width/invisible.\n        // UglifyJS drops U+FEFF chars when parsing, so use String.fromCharCode\n        // in hopes that this is preserved even if \"\\uFEFF\" is transformed to\n        // the actual Unicode character (by Babel, for example).\n        // https://github.com/mishoo/UglifyJS2/blob/v2.4.20/lib/parse.js#L216\n        node.innerHTML = String.fromCharCode(0xFEFF) + html;\n\n        // deleteData leaves an empty `TextNode` which offsets the index of all\n        // children. Definitely want to avoid this.\n        var textNode = node.firstChild;\n        if (textNode.data.length === 1) {\n          node.removeChild(textNode);\n        } else {\n          textNode.deleteData(0, 1);\n        }\n      } else {\n        node.innerHTML = html;\n      }\n    };\n  }\n  testElement = null;\n}\n\nmodule.exports = setInnerHTML;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/setInnerHTML.js\n ** module id = 87\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule createMicrosoftUnsafeLocalFunction\n */\n\n/* globals MSApp */\n\n'use strict';\n\n/**\n * Create a function which has 'unsafe' privileges (required by windows8 apps)\n */\n\nvar createMicrosoftUnsafeLocalFunction = function (func) {\n  if (typeof MSApp !== 'undefined' && MSApp.execUnsafeLocalFunction) {\n    return function (arg0, arg1, arg2, arg3) {\n      MSApp.execUnsafeLocalFunction(function () {\n        return func(arg0, arg1, arg2, arg3);\n      });\n    };\n  } else {\n    return func;\n  }\n};\n\nmodule.exports = createMicrosoftUnsafeLocalFunction;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/createMicrosoftUnsafeLocalFunction.js\n ** module id = 88\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule setTextContent\n */\n\n'use strict';\n\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\nvar escapeTextContentForBrowser = require('./escapeTextContentForBrowser');\nvar setInnerHTML = require('./setInnerHTML');\n\n/**\n * Set the textContent property of a node, ensuring that whitespace is preserved\n * even in IE8. innerText is a poor substitute for textContent and, among many\n * issues, inserts <br> instead of the literal newline chars. innerHTML behaves\n * as it should.\n *\n * @param {DOMElement} node\n * @param {string} text\n * @internal\n */\nvar setTextContent = function (node, text) {\n  if (text) {\n    var firstChild = node.firstChild;\n\n    if (firstChild && firstChild === node.lastChild && firstChild.nodeType === 3) {\n      firstChild.nodeValue = text;\n      return;\n    }\n  }\n  node.textContent = text;\n};\n\nif (ExecutionEnvironment.canUseDOM) {\n  if (!('textContent' in document.documentElement)) {\n    setTextContent = function (node, text) {\n      setInnerHTML(node, escapeTextContentForBrowser(text));\n    };\n  }\n}\n\nmodule.exports = setTextContent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/setTextContent.js\n ** module id = 89\n ** module chunks = 4\n **/","/**\n * Copyright 2016-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * Based on the escape-html library, which is used under the MIT License below:\n *\n * Copyright (c) 2012-2013 TJ Holowaychuk\n * Copyright (c) 2015 Andreas Lubbe\n * Copyright (c) 2015 Tiancheng \"Timothy\" Gu\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * 'Software'), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * @providesModule escapeTextContentForBrowser\n */\n\n'use strict';\n\n// code copied and modified from escape-html\n/**\n * Module variables.\n * @private\n */\n\nvar matchHtmlRegExp = /[\"'&<>]/;\n\n/**\n * Escape special characters in the given string of html.\n *\n * @param  {string} string The string to escape for inserting into HTML\n * @return {string}\n * @public\n */\n\nfunction escapeHtml(string) {\n  var str = '' + string;\n  var match = matchHtmlRegExp.exec(str);\n\n  if (!match) {\n    return str;\n  }\n\n  var escape;\n  var html = '';\n  var index = 0;\n  var lastIndex = 0;\n\n  for (index = match.index; index < str.length; index++) {\n    switch (str.charCodeAt(index)) {\n      case 34:\n        // \"\n        escape = '&quot;';\n        break;\n      case 38:\n        // &\n        escape = '&amp;';\n        break;\n      case 39:\n        // '\n        escape = '&#x27;'; // modified from escape-html; used to be '&#39'\n        break;\n      case 60:\n        // <\n        escape = '&lt;';\n        break;\n      case 62:\n        // >\n        escape = '&gt;';\n        break;\n      default:\n        continue;\n    }\n\n    if (lastIndex !== index) {\n      html += str.substring(lastIndex, index);\n    }\n\n    lastIndex = index + 1;\n    html += escape;\n  }\n\n  return lastIndex !== index ? html + str.substring(lastIndex, index) : html;\n}\n// end code copied and modified from escape-html\n\n/**\n * Escapes text to prevent scripting attacks.\n *\n * @param {*} text Text value to escape.\n * @return {string} An escaped string.\n */\nfunction escapeTextContentForBrowser(text) {\n  if (typeof text === 'boolean' || typeof text === 'number') {\n    // this shortcircuit helps perf for types that we know will never have\n    // special characters, especially given that this function is used often\n    // for numeric dom ids.\n    return '' + text;\n  }\n  return escapeHtml(text);\n}\n\nmodule.exports = escapeTextContentForBrowser;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/escapeTextContentForBrowser.js\n ** module id = 90\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule Danger\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar DOMLazyTree = require('./DOMLazyTree');\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\n\nvar createNodesFromMarkup = require('fbjs/lib/createNodesFromMarkup');\nvar emptyFunction = require('fbjs/lib/emptyFunction');\nvar invariant = require('fbjs/lib/invariant');\n\nvar Danger = {\n\n  /**\n   * Replaces a node with a string of markup at its current position within its\n   * parent. The markup must render into a single root node.\n   *\n   * @param {DOMElement} oldChild Child node to replace.\n   * @param {string} markup Markup to render in place of the child node.\n   * @internal\n   */\n  dangerouslyReplaceNodeWithMarkup: function (oldChild, markup) {\n    !ExecutionEnvironment.canUseDOM ? process.env.NODE_ENV !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Cannot render markup in a worker thread. Make sure `window` and `document` are available globally before requiring React when unit testing or use ReactDOMServer.renderToString() for server rendering.') : _prodInvariant('56') : void 0;\n    !markup ? process.env.NODE_ENV !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Missing markup.') : _prodInvariant('57') : void 0;\n    !(oldChild.nodeName !== 'HTML') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Cannot replace markup of the <html> node. This is because browser quirks make this unreliable and/or slow. If you want to render to the root you must use server rendering. See ReactDOMServer.renderToString().') : _prodInvariant('58') : void 0;\n\n    if (typeof markup === 'string') {\n      var newChild = createNodesFromMarkup(markup, emptyFunction)[0];\n      oldChild.parentNode.replaceChild(newChild, oldChild);\n    } else {\n      DOMLazyTree.replaceChildWithTree(oldChild, markup);\n    }\n  }\n\n};\n\nmodule.exports = Danger;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/Danger.js\n ** module id = 91\n ** module chunks = 4\n **/","'use strict';\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @typechecks\n */\n\n/*eslint-disable fb-www/unsafe-html*/\n\nvar ExecutionEnvironment = require('./ExecutionEnvironment');\n\nvar createArrayFromMixed = require('./createArrayFromMixed');\nvar getMarkupWrap = require('./getMarkupWrap');\nvar invariant = require('./invariant');\n\n/**\n * Dummy container used to render all markup.\n */\nvar dummyNode = ExecutionEnvironment.canUseDOM ? document.createElement('div') : null;\n\n/**\n * Pattern used by `getNodeName`.\n */\nvar nodeNamePattern = /^\\s*<(\\w+)/;\n\n/**\n * Extracts the `nodeName` of the first element in a string of markup.\n *\n * @param {string} markup String of markup.\n * @return {?string} Node name of the supplied markup.\n */\nfunction getNodeName(markup) {\n  var nodeNameMatch = markup.match(nodeNamePattern);\n  return nodeNameMatch && nodeNameMatch[1].toLowerCase();\n}\n\n/**\n * Creates an array containing the nodes rendered from the supplied markup. The\n * optionally supplied `handleScript` function will be invoked once for each\n * <script> element that is rendered. If no `handleScript` function is supplied,\n * an exception is thrown if any <script> elements are rendered.\n *\n * @param {string} markup A string of valid HTML markup.\n * @param {?function} handleScript Invoked once for each rendered <script>.\n * @return {array<DOMElement|DOMTextNode>} An array of rendered nodes.\n */\nfunction createNodesFromMarkup(markup, handleScript) {\n  var node = dummyNode;\n  !!!dummyNode ? process.env.NODE_ENV !== 'production' ? invariant(false, 'createNodesFromMarkup dummy not initialized') : invariant(false) : void 0;\n  var nodeName = getNodeName(markup);\n\n  var wrap = nodeName && getMarkupWrap(nodeName);\n  if (wrap) {\n    node.innerHTML = wrap[1] + markup + wrap[2];\n\n    var wrapDepth = wrap[0];\n    while (wrapDepth--) {\n      node = node.lastChild;\n    }\n  } else {\n    node.innerHTML = markup;\n  }\n\n  var scripts = node.getElementsByTagName('script');\n  if (scripts.length) {\n    !handleScript ? process.env.NODE_ENV !== 'production' ? invariant(false, 'createNodesFromMarkup(...): Unexpected <script> element rendered.') : invariant(false) : void 0;\n    createArrayFromMixed(scripts).forEach(handleScript);\n  }\n\n  var nodes = Array.from(node.childNodes);\n  while (node.lastChild) {\n    node.removeChild(node.lastChild);\n  }\n  return nodes;\n}\n\nmodule.exports = createNodesFromMarkup;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/fbjs/lib/createNodesFromMarkup.js\n ** module id = 92\n ** module chunks = 4\n **/","'use strict';\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @typechecks\n */\n\nvar invariant = require('./invariant');\n\n/**\n * Convert array-like objects to arrays.\n *\n * This API assumes the caller knows the contents of the data type. For less\n * well defined inputs use createArrayFromMixed.\n *\n * @param {object|function|filelist} obj\n * @return {array}\n */\nfunction toArray(obj) {\n  var length = obj.length;\n\n  // Some browsers builtin objects can report typeof 'function' (e.g. NodeList\n  // in old versions of Safari).\n  !(!Array.isArray(obj) && (typeof obj === 'object' || typeof obj === 'function')) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'toArray: Array-like object expected') : invariant(false) : void 0;\n\n  !(typeof length === 'number') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'toArray: Object needs a length property') : invariant(false) : void 0;\n\n  !(length === 0 || length - 1 in obj) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'toArray: Object should have keys for indices') : invariant(false) : void 0;\n\n  !(typeof obj.callee !== 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'toArray: Object can\\'t be `arguments`. Use rest params ' + '(function(...args) {}) or Array.from() instead.') : invariant(false) : void 0;\n\n  // Old IE doesn't give collections access to hasOwnProperty. Assume inputs\n  // without method will throw during the slice call and skip straight to the\n  // fallback.\n  if (obj.hasOwnProperty) {\n    try {\n      return Array.prototype.slice.call(obj);\n    } catch (e) {\n      // IE < 9 does not support Array#slice on collections objects\n    }\n  }\n\n  // Fall back to copying key by key. This assumes all keys have a value,\n  // so will not preserve sparsely populated inputs.\n  var ret = Array(length);\n  for (var ii = 0; ii < length; ii++) {\n    ret[ii] = obj[ii];\n  }\n  return ret;\n}\n\n/**\n * Perform a heuristic test to determine if an object is \"array-like\".\n *\n *   A monk asked Joshu, a Zen master, \"Has a dog Buddha nature?\"\n *   Joshu replied: \"Mu.\"\n *\n * This function determines if its argument has \"array nature\": it returns\n * true if the argument is an actual array, an `arguments' object, or an\n * HTMLCollection (e.g. node.childNodes or node.getElementsByTagName()).\n *\n * It will return false for other array-like objects like Filelist.\n *\n * @param {*} obj\n * @return {boolean}\n */\nfunction hasArrayNature(obj) {\n  return(\n    // not null/false\n    !!obj && (\n    // arrays are objects, NodeLists are functions in Safari\n    typeof obj == 'object' || typeof obj == 'function') &&\n    // quacks like an array\n    'length' in obj &&\n    // not window\n    !('setInterval' in obj) &&\n    // no DOM node should be considered an array-like\n    // a 'select' element has 'length' and 'item' properties on IE8\n    typeof obj.nodeType != 'number' && (\n    // a real array\n    Array.isArray(obj) ||\n    // arguments\n    'callee' in obj ||\n    // HTMLCollection/NodeList\n    'item' in obj)\n  );\n}\n\n/**\n * Ensure that the argument is an array by wrapping it in an array if it is not.\n * Creates a copy of the argument if it is already an array.\n *\n * This is mostly useful idiomatically:\n *\n *   var createArrayFromMixed = require('createArrayFromMixed');\n *\n *   function takesOneOrMoreThings(things) {\n *     things = createArrayFromMixed(things);\n *     ...\n *   }\n *\n * This allows you to treat `things' as an array, but accept scalars in the API.\n *\n * If you need to convert an array-like object, like `arguments`, into an array\n * use toArray instead.\n *\n * @param {*} obj\n * @return {array}\n */\nfunction createArrayFromMixed(obj) {\n  if (!hasArrayNature(obj)) {\n    return [obj];\n  } else if (Array.isArray(obj)) {\n    return obj.slice();\n  } else {\n    return toArray(obj);\n  }\n}\n\nmodule.exports = createArrayFromMixed;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/fbjs/lib/createArrayFromMixed.js\n ** module id = 93\n ** module chunks = 4\n **/","'use strict';\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n/*eslint-disable fb-www/unsafe-html */\n\nvar ExecutionEnvironment = require('./ExecutionEnvironment');\n\nvar invariant = require('./invariant');\n\n/**\n * Dummy container used to detect which wraps are necessary.\n */\nvar dummyNode = ExecutionEnvironment.canUseDOM ? document.createElement('div') : null;\n\n/**\n * Some browsers cannot use `innerHTML` to render certain elements standalone,\n * so we wrap them, render the wrapped nodes, then extract the desired node.\n *\n * In IE8, certain elements cannot render alone, so wrap all elements ('*').\n */\n\nvar shouldWrap = {};\n\nvar selectWrap = [1, '<select multiple=\"true\">', '</select>'];\nvar tableWrap = [1, '<table>', '</table>'];\nvar trWrap = [3, '<table><tbody><tr>', '</tr></tbody></table>'];\n\nvar svgWrap = [1, '<svg xmlns=\"http://www.w3.org/2000/svg\">', '</svg>'];\n\nvar markupWrap = {\n  '*': [1, '?<div>', '</div>'],\n\n  'area': [1, '<map>', '</map>'],\n  'col': [2, '<table><tbody></tbody><colgroup>', '</colgroup></table>'],\n  'legend': [1, '<fieldset>', '</fieldset>'],\n  'param': [1, '<object>', '</object>'],\n  'tr': [2, '<table><tbody>', '</tbody></table>'],\n\n  'optgroup': selectWrap,\n  'option': selectWrap,\n\n  'caption': tableWrap,\n  'colgroup': tableWrap,\n  'tbody': tableWrap,\n  'tfoot': tableWrap,\n  'thead': tableWrap,\n\n  'td': trWrap,\n  'th': trWrap\n};\n\n// Initialize the SVG elements since we know they'll always need to be wrapped\n// consistently. If they are created inside a <div> they will be initialized in\n// the wrong namespace (and will not display).\nvar svgElements = ['circle', 'clipPath', 'defs', 'ellipse', 'g', 'image', 'line', 'linearGradient', 'mask', 'path', 'pattern', 'polygon', 'polyline', 'radialGradient', 'rect', 'stop', 'text', 'tspan'];\nsvgElements.forEach(function (nodeName) {\n  markupWrap[nodeName] = svgWrap;\n  shouldWrap[nodeName] = true;\n});\n\n/**\n * Gets the markup wrap configuration for the supplied `nodeName`.\n *\n * NOTE: This lazily detects which wraps are necessary for the current browser.\n *\n * @param {string} nodeName Lowercase `nodeName`.\n * @return {?array} Markup wrap configuration, if applicable.\n */\nfunction getMarkupWrap(nodeName) {\n  !!!dummyNode ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Markup wrapping node not initialized') : invariant(false) : void 0;\n  if (!markupWrap.hasOwnProperty(nodeName)) {\n    nodeName = '*';\n  }\n  if (!shouldWrap.hasOwnProperty(nodeName)) {\n    if (nodeName === '*') {\n      dummyNode.innerHTML = '<link />';\n    } else {\n      dummyNode.innerHTML = '<' + nodeName + '></' + nodeName + '>';\n    }\n    shouldWrap[nodeName] = !dummyNode.firstChild;\n  }\n  return shouldWrap[nodeName] ? markupWrap[nodeName] : null;\n}\n\nmodule.exports = getMarkupWrap;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/fbjs/lib/getMarkupWrap.js\n ** module id = 94\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactMultiChildUpdateTypes\n */\n\n'use strict';\n\nvar keyMirror = require('fbjs/lib/keyMirror');\n\n/**\n * When a component's children are updated, a series of update configuration\n * objects are created in order to batch and serialize the required changes.\n *\n * Enumerates all the possible types of update configurations.\n *\n * @internal\n */\nvar ReactMultiChildUpdateTypes = keyMirror({\n  INSERT_MARKUP: null,\n  MOVE_EXISTING: null,\n  REMOVE_NODE: null,\n  SET_MARKUP: null,\n  TEXT_CONTENT: null\n});\n\nmodule.exports = ReactMultiChildUpdateTypes;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactMultiChildUpdateTypes.js\n ** module id = 95\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMIDOperations\n */\n\n'use strict';\n\nvar DOMChildrenOperations = require('./DOMChildrenOperations');\nvar ReactDOMComponentTree = require('./ReactDOMComponentTree');\n\n/**\n * Operations used to process updates to DOM nodes.\n */\nvar ReactDOMIDOperations = {\n\n  /**\n   * Updates a component's children by processing a series of updates.\n   *\n   * @param {array<object>} updates List of update configurations.\n   * @internal\n   */\n  dangerouslyProcessChildrenUpdates: function (parentInst, updates) {\n    var node = ReactDOMComponentTree.getNodeFromInstance(parentInst);\n    DOMChildrenOperations.processUpdates(node, updates);\n  }\n};\n\nmodule.exports = ReactDOMIDOperations;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMIDOperations.js\n ** module id = 96\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMComponent\n */\n\n/* global hasOwnProperty:true */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant'),\n    _assign = require('object-assign');\n\nvar AutoFocusUtils = require('./AutoFocusUtils');\nvar CSSPropertyOperations = require('./CSSPropertyOperations');\nvar DOMLazyTree = require('./DOMLazyTree');\nvar DOMNamespaces = require('./DOMNamespaces');\nvar DOMProperty = require('./DOMProperty');\nvar DOMPropertyOperations = require('./DOMPropertyOperations');\nvar EventConstants = require('./EventConstants');\nvar EventPluginHub = require('./EventPluginHub');\nvar EventPluginRegistry = require('./EventPluginRegistry');\nvar ReactBrowserEventEmitter = require('./ReactBrowserEventEmitter');\nvar ReactComponentBrowserEnvironment = require('./ReactComponentBrowserEnvironment');\nvar ReactDOMButton = require('./ReactDOMButton');\nvar ReactDOMComponentFlags = require('./ReactDOMComponentFlags');\nvar ReactDOMComponentTree = require('./ReactDOMComponentTree');\nvar ReactDOMInput = require('./ReactDOMInput');\nvar ReactDOMOption = require('./ReactDOMOption');\nvar ReactDOMSelect = require('./ReactDOMSelect');\nvar ReactDOMTextarea = require('./ReactDOMTextarea');\nvar ReactInstrumentation = require('./ReactInstrumentation');\nvar ReactMultiChild = require('./ReactMultiChild');\nvar ReactServerRenderingTransaction = require('./ReactServerRenderingTransaction');\n\nvar emptyFunction = require('fbjs/lib/emptyFunction');\nvar escapeTextContentForBrowser = require('./escapeTextContentForBrowser');\nvar invariant = require('fbjs/lib/invariant');\nvar isEventSupported = require('./isEventSupported');\nvar keyOf = require('fbjs/lib/keyOf');\nvar shallowEqual = require('fbjs/lib/shallowEqual');\nvar validateDOMNesting = require('./validateDOMNesting');\nvar warning = require('fbjs/lib/warning');\n\nvar Flags = ReactDOMComponentFlags;\nvar deleteListener = EventPluginHub.deleteListener;\nvar getNode = ReactDOMComponentTree.getNodeFromInstance;\nvar listenTo = ReactBrowserEventEmitter.listenTo;\nvar registrationNameModules = EventPluginRegistry.registrationNameModules;\n\n// For quickly matching children type, to test if can be treated as content.\nvar CONTENT_TYPES = { 'string': true, 'number': true };\n\nvar STYLE = keyOf({ style: null });\nvar HTML = keyOf({ __html: null });\nvar RESERVED_PROPS = {\n  children: null,\n  dangerouslySetInnerHTML: null,\n  suppressContentEditableWarning: null\n};\n\n// Node type for document fragments (Node.DOCUMENT_FRAGMENT_NODE).\nvar DOC_FRAGMENT_TYPE = 11;\n\nfunction getDeclarationErrorAddendum(internalInstance) {\n  if (internalInstance) {\n    var owner = internalInstance._currentElement._owner || null;\n    if (owner) {\n      var name = owner.getName();\n      if (name) {\n        return ' This DOM node was rendered by `' + name + '`.';\n      }\n    }\n  }\n  return '';\n}\n\nfunction friendlyStringify(obj) {\n  if (typeof obj === 'object') {\n    if (Array.isArray(obj)) {\n      return '[' + obj.map(friendlyStringify).join(', ') + ']';\n    } else {\n      var pairs = [];\n      for (var key in obj) {\n        if (Object.prototype.hasOwnProperty.call(obj, key)) {\n          var keyEscaped = /^[a-z$_][\\w$_]*$/i.test(key) ? key : JSON.stringify(key);\n          pairs.push(keyEscaped + ': ' + friendlyStringify(obj[key]));\n        }\n      }\n      return '{' + pairs.join(', ') + '}';\n    }\n  } else if (typeof obj === 'string') {\n    return JSON.stringify(obj);\n  } else if (typeof obj === 'function') {\n    return '[function object]';\n  }\n  // Differs from JSON.stringify in that undefined because undefined and that\n  // inf and nan don't become null\n  return String(obj);\n}\n\nvar styleMutationWarning = {};\n\nfunction checkAndWarnForMutatedStyle(style1, style2, component) {\n  if (style1 == null || style2 == null) {\n    return;\n  }\n  if (shallowEqual(style1, style2)) {\n    return;\n  }\n\n  var componentName = component._tag;\n  var owner = component._currentElement._owner;\n  var ownerName;\n  if (owner) {\n    ownerName = owner.getName();\n  }\n\n  var hash = ownerName + '|' + componentName;\n\n  if (styleMutationWarning.hasOwnProperty(hash)) {\n    return;\n  }\n\n  styleMutationWarning[hash] = true;\n\n  process.env.NODE_ENV !== 'production' ? warning(false, '`%s` was passed a style object that has previously been mutated. ' + 'Mutating `style` is deprecated. Consider cloning it beforehand. Check ' + 'the `render` %s. Previous style: %s. Mutated style: %s.', componentName, owner ? 'of `' + ownerName + '`' : 'using <' + componentName + '>', friendlyStringify(style1), friendlyStringify(style2)) : void 0;\n}\n\n/**\n * @param {object} component\n * @param {?object} props\n */\nfunction assertValidProps(component, props) {\n  if (!props) {\n    return;\n  }\n  // Note the use of `==` which checks for null or undefined.\n  if (voidElementTags[component._tag]) {\n    !(props.children == null && props.dangerouslySetInnerHTML == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`.%s', component._tag, component._currentElement._owner ? ' Check the render method of ' + component._currentElement._owner.getName() + '.' : '') : _prodInvariant('137', component._tag, component._currentElement._owner ? ' Check the render method of ' + component._currentElement._owner.getName() + '.' : '') : void 0;\n  }\n  if (props.dangerouslySetInnerHTML != null) {\n    !(props.children == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Can only set one of `children` or `props.dangerouslySetInnerHTML`.') : _prodInvariant('60') : void 0;\n    !(typeof props.dangerouslySetInnerHTML === 'object' && HTML in props.dangerouslySetInnerHTML) ? process.env.NODE_ENV !== 'production' ? invariant(false, '`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://fb.me/react-invariant-dangerously-set-inner-html for more information.') : _prodInvariant('61') : void 0;\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    process.env.NODE_ENV !== 'production' ? warning(props.innerHTML == null, 'Directly setting property `innerHTML` is not permitted. ' + 'For more information, lookup documentation on `dangerouslySetInnerHTML`.') : void 0;\n    process.env.NODE_ENV !== 'production' ? warning(props.suppressContentEditableWarning || !props.contentEditable || props.children == null, 'A component is `contentEditable` and contains `children` managed by ' + 'React. It is now your responsibility to guarantee that none of ' + 'those nodes are unexpectedly modified or duplicated. This is ' + 'probably not intentional.') : void 0;\n    process.env.NODE_ENV !== 'production' ? warning(props.onFocusIn == null && props.onFocusOut == null, 'React uses onFocus and onBlur instead of onFocusIn and onFocusOut. ' + 'All React events are normalized to bubble, so onFocusIn and onFocusOut ' + 'are not needed/supported by React.') : void 0;\n  }\n  !(props.style == null || typeof props.style === 'object') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'The `style` prop expects a mapping from style properties to values, not a string. For example, style={{marginRight: spacing + \\'em\\'}} when using JSX.%s', getDeclarationErrorAddendum(component)) : _prodInvariant('62', getDeclarationErrorAddendum(component)) : void 0;\n}\n\nfunction enqueuePutListener(inst, registrationName, listener, transaction) {\n  if (transaction instanceof ReactServerRenderingTransaction) {\n    return;\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    // IE8 has no API for event capturing and the `onScroll` event doesn't\n    // bubble.\n    process.env.NODE_ENV !== 'production' ? warning(registrationName !== 'onScroll' || isEventSupported('scroll', true), 'This browser doesn\\'t support the `onScroll` event') : void 0;\n  }\n  var containerInfo = inst._hostContainerInfo;\n  var isDocumentFragment = containerInfo._node && containerInfo._node.nodeType === DOC_FRAGMENT_TYPE;\n  var doc = isDocumentFragment ? containerInfo._node : containerInfo._ownerDocument;\n  listenTo(registrationName, doc);\n  transaction.getReactMountReady().enqueue(putListener, {\n    inst: inst,\n    registrationName: registrationName,\n    listener: listener\n  });\n}\n\nfunction putListener() {\n  var listenerToPut = this;\n  EventPluginHub.putListener(listenerToPut.inst, listenerToPut.registrationName, listenerToPut.listener);\n}\n\nfunction inputPostMount() {\n  var inst = this;\n  ReactDOMInput.postMountWrapper(inst);\n}\n\nfunction textareaPostMount() {\n  var inst = this;\n  ReactDOMTextarea.postMountWrapper(inst);\n}\n\nfunction optionPostMount() {\n  var inst = this;\n  ReactDOMOption.postMountWrapper(inst);\n}\n\nvar setContentChildForInstrumentation = emptyFunction;\nif (process.env.NODE_ENV !== 'production') {\n  setContentChildForInstrumentation = function (content) {\n    var hasExistingContent = this._contentDebugID != null;\n    var debugID = this._debugID;\n    var contentDebugID = debugID + '#text';\n\n    if (content == null) {\n      if (hasExistingContent) {\n        ReactInstrumentation.debugTool.onUnmountComponent(this._contentDebugID);\n      }\n      this._contentDebugID = null;\n      return;\n    }\n\n    this._contentDebugID = contentDebugID;\n    var text = '' + content;\n\n    ReactInstrumentation.debugTool.onSetDisplayName(contentDebugID, '#text');\n    ReactInstrumentation.debugTool.onSetParent(contentDebugID, debugID);\n    ReactInstrumentation.debugTool.onSetText(contentDebugID, text);\n\n    if (hasExistingContent) {\n      ReactInstrumentation.debugTool.onBeforeUpdateComponent(contentDebugID, content);\n      ReactInstrumentation.debugTool.onUpdateComponent(contentDebugID);\n    } else {\n      ReactInstrumentation.debugTool.onBeforeMountComponent(contentDebugID, content);\n      ReactInstrumentation.debugTool.onMountComponent(contentDebugID);\n      ReactInstrumentation.debugTool.onSetChildren(debugID, [contentDebugID]);\n    }\n  };\n}\n\n// There are so many media events, it makes sense to just\n// maintain a list rather than create a `trapBubbledEvent` for each\nvar mediaEvents = {\n  topAbort: 'abort',\n  topCanPlay: 'canplay',\n  topCanPlayThrough: 'canplaythrough',\n  topDurationChange: 'durationchange',\n  topEmptied: 'emptied',\n  topEncrypted: 'encrypted',\n  topEnded: 'ended',\n  topError: 'error',\n  topLoadedData: 'loadeddata',\n  topLoadedMetadata: 'loadedmetadata',\n  topLoadStart: 'loadstart',\n  topPause: 'pause',\n  topPlay: 'play',\n  topPlaying: 'playing',\n  topProgress: 'progress',\n  topRateChange: 'ratechange',\n  topSeeked: 'seeked',\n  topSeeking: 'seeking',\n  topStalled: 'stalled',\n  topSuspend: 'suspend',\n  topTimeUpdate: 'timeupdate',\n  topVolumeChange: 'volumechange',\n  topWaiting: 'waiting'\n};\n\nfunction trapBubbledEventsLocal() {\n  var inst = this;\n  // If a component renders to null or if another component fatals and causes\n  // the state of the tree to be corrupted, `node` here can be null.\n  !inst._rootNodeID ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Must be mounted to trap events') : _prodInvariant('63') : void 0;\n  var node = getNode(inst);\n  !node ? process.env.NODE_ENV !== 'production' ? invariant(false, 'trapBubbledEvent(...): Requires node to be rendered.') : _prodInvariant('64') : void 0;\n\n  switch (inst._tag) {\n    case 'iframe':\n    case 'object':\n      inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topLoad, 'load', node)];\n      break;\n    case 'video':\n    case 'audio':\n\n      inst._wrapperState.listeners = [];\n      // Create listener for each media event\n      for (var event in mediaEvents) {\n        if (mediaEvents.hasOwnProperty(event)) {\n          inst._wrapperState.listeners.push(ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes[event], mediaEvents[event], node));\n        }\n      }\n      break;\n    case 'source':\n      inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topError, 'error', node)];\n      break;\n    case 'img':\n      inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topError, 'error', node), ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topLoad, 'load', node)];\n      break;\n    case 'form':\n      inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topReset, 'reset', node), ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topSubmit, 'submit', node)];\n      break;\n    case 'input':\n    case 'select':\n    case 'textarea':\n      inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topInvalid, 'invalid', node)];\n      break;\n  }\n}\n\nfunction postUpdateSelectWrapper() {\n  ReactDOMSelect.postUpdateWrapper(this);\n}\n\n// For HTML, certain tags should omit their close tag. We keep a whitelist for\n// those special-case tags.\n\nvar omittedCloseTags = {\n  'area': true,\n  'base': true,\n  'br': true,\n  'col': true,\n  'embed': true,\n  'hr': true,\n  'img': true,\n  'input': true,\n  'keygen': true,\n  'link': true,\n  'meta': true,\n  'param': true,\n  'source': true,\n  'track': true,\n  'wbr': true\n};\n\n// NOTE: menuitem's close tag should be omitted, but that causes problems.\nvar newlineEatingTags = {\n  'listing': true,\n  'pre': true,\n  'textarea': true\n};\n\n// For HTML, certain tags cannot have children. This has the same purpose as\n// `omittedCloseTags` except that `menuitem` should still have its closing tag.\n\nvar voidElementTags = _assign({\n  'menuitem': true\n}, omittedCloseTags);\n\n// We accept any tag to be rendered but since this gets injected into arbitrary\n// HTML, we want to make sure that it's a safe tag.\n// http://www.w3.org/TR/REC-xml/#NT-Name\n\nvar VALID_TAG_REGEX = /^[a-zA-Z][a-zA-Z:_\\.\\-\\d]*$/; // Simplified subset\nvar validatedTagCache = {};\nvar hasOwnProperty = {}.hasOwnProperty;\n\nfunction validateDangerousTag(tag) {\n  if (!hasOwnProperty.call(validatedTagCache, tag)) {\n    !VALID_TAG_REGEX.test(tag) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Invalid tag: %s', tag) : _prodInvariant('65', tag) : void 0;\n    validatedTagCache[tag] = true;\n  }\n}\n\nfunction isCustomComponent(tagName, props) {\n  return tagName.indexOf('-') >= 0 || props.is != null;\n}\n\nvar globalIdCounter = 1;\n\n/**\n * Creates a new React class that is idempotent and capable of containing other\n * React components. It accepts event listeners and DOM properties that are\n * valid according to `DOMProperty`.\n *\n *  - Event listeners: `onClick`, `onMouseDown`, etc.\n *  - DOM properties: `className`, `name`, `title`, etc.\n *\n * The `style` property functions differently from the DOM API. It accepts an\n * object mapping of style properties to values.\n *\n * @constructor ReactDOMComponent\n * @extends ReactMultiChild\n */\nfunction ReactDOMComponent(element) {\n  var tag = element.type;\n  validateDangerousTag(tag);\n  this._currentElement = element;\n  this._tag = tag.toLowerCase();\n  this._namespaceURI = null;\n  this._renderedChildren = null;\n  this._previousStyle = null;\n  this._previousStyleCopy = null;\n  this._hostNode = null;\n  this._hostParent = null;\n  this._rootNodeID = null;\n  this._domID = null;\n  this._hostContainerInfo = null;\n  this._wrapperState = null;\n  this._topLevelWrapper = null;\n  this._flags = 0;\n  if (process.env.NODE_ENV !== 'production') {\n    this._ancestorInfo = null;\n    setContentChildForInstrumentation.call(this, null);\n  }\n}\n\nReactDOMComponent.displayName = 'ReactDOMComponent';\n\nReactDOMComponent.Mixin = {\n\n  /**\n   * Generates root tag markup then recurses. This method has side effects and\n   * is not idempotent.\n   *\n   * @internal\n   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\n   * @param {?ReactDOMComponent} the containing DOM component instance\n   * @param {?object} info about the host container\n   * @param {object} context\n   * @return {string} The computed markup.\n   */\n  mountComponent: function (transaction, hostParent, hostContainerInfo, context) {\n    var _this = this;\n\n    this._rootNodeID = globalIdCounter++;\n    this._domID = hostContainerInfo._idCounter++;\n    this._hostParent = hostParent;\n    this._hostContainerInfo = hostContainerInfo;\n\n    var props = this._currentElement.props;\n\n    switch (this._tag) {\n      case 'audio':\n      case 'form':\n      case 'iframe':\n      case 'img':\n      case 'link':\n      case 'object':\n      case 'source':\n      case 'video':\n        this._wrapperState = {\n          listeners: null\n        };\n        transaction.getReactMountReady().enqueue(trapBubbledEventsLocal, this);\n        break;\n      case 'button':\n        props = ReactDOMButton.getHostProps(this, props, hostParent);\n        break;\n      case 'input':\n        ReactDOMInput.mountWrapper(this, props, hostParent);\n        props = ReactDOMInput.getHostProps(this, props);\n        transaction.getReactMountReady().enqueue(trapBubbledEventsLocal, this);\n        break;\n      case 'option':\n        ReactDOMOption.mountWrapper(this, props, hostParent);\n        props = ReactDOMOption.getHostProps(this, props);\n        break;\n      case 'select':\n        ReactDOMSelect.mountWrapper(this, props, hostParent);\n        props = ReactDOMSelect.getHostProps(this, props);\n        transaction.getReactMountReady().enqueue(trapBubbledEventsLocal, this);\n        break;\n      case 'textarea':\n        ReactDOMTextarea.mountWrapper(this, props, hostParent);\n        props = ReactDOMTextarea.getHostProps(this, props);\n        transaction.getReactMountReady().enqueue(trapBubbledEventsLocal, this);\n        break;\n    }\n\n    assertValidProps(this, props);\n\n    // We create tags in the namespace of their parent container, except HTML\n    // tags get no namespace.\n    var namespaceURI;\n    var parentTag;\n    if (hostParent != null) {\n      namespaceURI = hostParent._namespaceURI;\n      parentTag = hostParent._tag;\n    } else if (hostContainerInfo._tag) {\n      namespaceURI = hostContainerInfo._namespaceURI;\n      parentTag = hostContainerInfo._tag;\n    }\n    if (namespaceURI == null || namespaceURI === DOMNamespaces.svg && parentTag === 'foreignobject') {\n      namespaceURI = DOMNamespaces.html;\n    }\n    if (namespaceURI === DOMNamespaces.html) {\n      if (this._tag === 'svg') {\n        namespaceURI = DOMNamespaces.svg;\n      } else if (this._tag === 'math') {\n        namespaceURI = DOMNamespaces.mathml;\n      }\n    }\n    this._namespaceURI = namespaceURI;\n\n    if (process.env.NODE_ENV !== 'production') {\n      var parentInfo;\n      if (hostParent != null) {\n        parentInfo = hostParent._ancestorInfo;\n      } else if (hostContainerInfo._tag) {\n        parentInfo = hostContainerInfo._ancestorInfo;\n      }\n      if (parentInfo) {\n        // parentInfo should always be present except for the top-level\n        // component when server rendering\n        validateDOMNesting(this._tag, this, parentInfo);\n      }\n      this._ancestorInfo = validateDOMNesting.updatedAncestorInfo(parentInfo, this._tag, this);\n    }\n\n    var mountImage;\n    if (transaction.useCreateElement) {\n      var ownerDocument = hostContainerInfo._ownerDocument;\n      var el;\n      if (namespaceURI === DOMNamespaces.html) {\n        if (this._tag === 'script') {\n          // Create the script via .innerHTML so its \"parser-inserted\" flag is\n          // set to true and it does not execute\n          var div = ownerDocument.createElement('div');\n          var type = this._currentElement.type;\n          div.innerHTML = '<' + type + '></' + type + '>';\n          el = div.removeChild(div.firstChild);\n        } else if (props.is) {\n          el = ownerDocument.createElement(this._currentElement.type, props.is);\n        } else {\n          // Separate else branch instead of using `props.is || undefined` above becuase of a Firefox bug.\n          // See discussion in https://github.com/facebook/react/pull/6896\n          // and discussion in https://bugzilla.mozilla.org/show_bug.cgi?id=1276240\n          el = ownerDocument.createElement(this._currentElement.type);\n        }\n      } else {\n        el = ownerDocument.createElementNS(namespaceURI, this._currentElement.type);\n      }\n      ReactDOMComponentTree.precacheNode(this, el);\n      this._flags |= Flags.hasCachedChildNodes;\n      if (!this._hostParent) {\n        DOMPropertyOperations.setAttributeForRoot(el);\n      }\n      this._updateDOMProperties(null, props, transaction);\n      var lazyTree = DOMLazyTree(el);\n      this._createInitialChildren(transaction, props, context, lazyTree);\n      mountImage = lazyTree;\n    } else {\n      var tagOpen = this._createOpenTagMarkupAndPutListeners(transaction, props);\n      var tagContent = this._createContentMarkup(transaction, props, context);\n      if (!tagContent && omittedCloseTags[this._tag]) {\n        mountImage = tagOpen + '/>';\n      } else {\n        mountImage = tagOpen + '>' + tagContent + '</' + this._currentElement.type + '>';\n      }\n    }\n\n    switch (this._tag) {\n      case 'input':\n        transaction.getReactMountReady().enqueue(inputPostMount, this);\n        if (props.autoFocus) {\n          transaction.getReactMountReady().enqueue(AutoFocusUtils.focusDOMComponent, this);\n        }\n        break;\n      case 'textarea':\n        transaction.getReactMountReady().enqueue(textareaPostMount, this);\n        if (props.autoFocus) {\n          transaction.getReactMountReady().enqueue(AutoFocusUtils.focusDOMComponent, this);\n        }\n        break;\n      case 'select':\n        if (props.autoFocus) {\n          transaction.getReactMountReady().enqueue(AutoFocusUtils.focusDOMComponent, this);\n        }\n        break;\n      case 'button':\n        if (props.autoFocus) {\n          transaction.getReactMountReady().enqueue(AutoFocusUtils.focusDOMComponent, this);\n        }\n        break;\n      case 'option':\n        transaction.getReactMountReady().enqueue(optionPostMount, this);\n        break;\n    }\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (this._debugID) {\n        var callback = function () {\n          return ReactInstrumentation.debugTool.onComponentHasMounted(_this._debugID);\n        };\n        transaction.getReactMountReady().enqueue(callback, this);\n      }\n    }\n\n    return mountImage;\n  },\n\n  /**\n   * Creates markup for the open tag and all attributes.\n   *\n   * This method has side effects because events get registered.\n   *\n   * Iterating over object properties is faster than iterating over arrays.\n   * @see http://jsperf.com/obj-vs-arr-iteration\n   *\n   * @private\n   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\n   * @param {object} props\n   * @return {string} Markup of opening tag.\n   */\n  _createOpenTagMarkupAndPutListeners: function (transaction, props) {\n    var ret = '<' + this._currentElement.type;\n\n    for (var propKey in props) {\n      if (!props.hasOwnProperty(propKey)) {\n        continue;\n      }\n      var propValue = props[propKey];\n      if (propValue == null) {\n        continue;\n      }\n      if (registrationNameModules.hasOwnProperty(propKey)) {\n        if (propValue) {\n          enqueuePutListener(this, propKey, propValue, transaction);\n        }\n      } else {\n        if (propKey === STYLE) {\n          if (propValue) {\n            if (process.env.NODE_ENV !== 'production') {\n              // See `_updateDOMProperties`. style block\n              this._previousStyle = propValue;\n            }\n            propValue = this._previousStyleCopy = _assign({}, props.style);\n          }\n          propValue = CSSPropertyOperations.createMarkupForStyles(propValue, this);\n        }\n        var markup = null;\n        if (this._tag != null && isCustomComponent(this._tag, props)) {\n          if (!RESERVED_PROPS.hasOwnProperty(propKey)) {\n            markup = DOMPropertyOperations.createMarkupForCustomAttribute(propKey, propValue);\n          }\n        } else {\n          markup = DOMPropertyOperations.createMarkupForProperty(propKey, propValue);\n        }\n        if (markup) {\n          ret += ' ' + markup;\n        }\n      }\n    }\n\n    // For static pages, no need to put React ID and checksum. Saves lots of\n    // bytes.\n    if (transaction.renderToStaticMarkup) {\n      return ret;\n    }\n\n    if (!this._hostParent) {\n      ret += ' ' + DOMPropertyOperations.createMarkupForRoot();\n    }\n    ret += ' ' + DOMPropertyOperations.createMarkupForID(this._domID);\n    return ret;\n  },\n\n  /**\n   * Creates markup for the content between the tags.\n   *\n   * @private\n   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\n   * @param {object} props\n   * @param {object} context\n   * @return {string} Content markup.\n   */\n  _createContentMarkup: function (transaction, props, context) {\n    var ret = '';\n\n    // Intentional use of != to avoid catching zero/false.\n    var innerHTML = props.dangerouslySetInnerHTML;\n    if (innerHTML != null) {\n      if (innerHTML.__html != null) {\n        ret = innerHTML.__html;\n      }\n    } else {\n      var contentToUse = CONTENT_TYPES[typeof props.children] ? props.children : null;\n      var childrenToUse = contentToUse != null ? null : props.children;\n      if (contentToUse != null) {\n        // TODO: Validate that text is allowed as a child of this node\n        ret = escapeTextContentForBrowser(contentToUse);\n        if (process.env.NODE_ENV !== 'production') {\n          setContentChildForInstrumentation.call(this, contentToUse);\n        }\n      } else if (childrenToUse != null) {\n        var mountImages = this.mountChildren(childrenToUse, transaction, context);\n        ret = mountImages.join('');\n      }\n    }\n    if (newlineEatingTags[this._tag] && ret.charAt(0) === '\\n') {\n      // text/html ignores the first character in these tags if it's a newline\n      // Prefer to break application/xml over text/html (for now) by adding\n      // a newline specifically to get eaten by the parser. (Alternately for\n      // textareas, replacing \"^\\n\" with \"\\r\\n\" doesn't get eaten, and the first\n      // \\r is normalized out by HTMLTextAreaElement#value.)\n      // See: <http://www.w3.org/TR/html-polyglot/#newlines-in-textarea-and-pre>\n      // See: <http://www.w3.org/TR/html5/syntax.html#element-restrictions>\n      // See: <http://www.w3.org/TR/html5/syntax.html#newlines>\n      // See: Parsing of \"textarea\" \"listing\" and \"pre\" elements\n      //  from <http://www.w3.org/TR/html5/syntax.html#parsing-main-inbody>\n      return '\\n' + ret;\n    } else {\n      return ret;\n    }\n  },\n\n  _createInitialChildren: function (transaction, props, context, lazyTree) {\n    // Intentional use of != to avoid catching zero/false.\n    var innerHTML = props.dangerouslySetInnerHTML;\n    if (innerHTML != null) {\n      if (innerHTML.__html != null) {\n        DOMLazyTree.queueHTML(lazyTree, innerHTML.__html);\n      }\n    } else {\n      var contentToUse = CONTENT_TYPES[typeof props.children] ? props.children : null;\n      var childrenToUse = contentToUse != null ? null : props.children;\n      if (contentToUse != null) {\n        // TODO: Validate that text is allowed as a child of this node\n        if (process.env.NODE_ENV !== 'production') {\n          setContentChildForInstrumentation.call(this, contentToUse);\n        }\n        DOMLazyTree.queueText(lazyTree, contentToUse);\n      } else if (childrenToUse != null) {\n        var mountImages = this.mountChildren(childrenToUse, transaction, context);\n        for (var i = 0; i < mountImages.length; i++) {\n          DOMLazyTree.queueChild(lazyTree, mountImages[i]);\n        }\n      }\n    }\n  },\n\n  /**\n   * Receives a next element and updates the component.\n   *\n   * @internal\n   * @param {ReactElement} nextElement\n   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\n   * @param {object} context\n   */\n  receiveComponent: function (nextElement, transaction, context) {\n    var prevElement = this._currentElement;\n    this._currentElement = nextElement;\n    this.updateComponent(transaction, prevElement, nextElement, context);\n  },\n\n  /**\n   * Updates a DOM component after it has already been allocated and\n   * attached to the DOM. Reconciles the root DOM node, then recurses.\n   *\n   * @param {ReactReconcileTransaction} transaction\n   * @param {ReactElement} prevElement\n   * @param {ReactElement} nextElement\n   * @internal\n   * @overridable\n   */\n  updateComponent: function (transaction, prevElement, nextElement, context) {\n    var _this2 = this;\n\n    var lastProps = prevElement.props;\n    var nextProps = this._currentElement.props;\n\n    switch (this._tag) {\n      case 'button':\n        lastProps = ReactDOMButton.getHostProps(this, lastProps);\n        nextProps = ReactDOMButton.getHostProps(this, nextProps);\n        break;\n      case 'input':\n        ReactDOMInput.updateWrapper(this);\n        lastProps = ReactDOMInput.getHostProps(this, lastProps);\n        nextProps = ReactDOMInput.getHostProps(this, nextProps);\n        break;\n      case 'option':\n        lastProps = ReactDOMOption.getHostProps(this, lastProps);\n        nextProps = ReactDOMOption.getHostProps(this, nextProps);\n        break;\n      case 'select':\n        lastProps = ReactDOMSelect.getHostProps(this, lastProps);\n        nextProps = ReactDOMSelect.getHostProps(this, nextProps);\n        break;\n      case 'textarea':\n        ReactDOMTextarea.updateWrapper(this);\n        lastProps = ReactDOMTextarea.getHostProps(this, lastProps);\n        nextProps = ReactDOMTextarea.getHostProps(this, nextProps);\n        break;\n    }\n\n    assertValidProps(this, nextProps);\n    this._updateDOMProperties(lastProps, nextProps, transaction);\n    this._updateDOMChildren(lastProps, nextProps, transaction, context);\n\n    if (this._tag === 'select') {\n      // <select> value update needs to occur after <option> children\n      // reconciliation\n      transaction.getReactMountReady().enqueue(postUpdateSelectWrapper, this);\n    }\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (this._debugID) {\n        var callback = function () {\n          return ReactInstrumentation.debugTool.onComponentHasUpdated(_this2._debugID);\n        };\n        transaction.getReactMountReady().enqueue(callback, this);\n      }\n    }\n  },\n\n  /**\n   * Reconciles the properties by detecting differences in property values and\n   * updating the DOM as necessary. This function is probably the single most\n   * critical path for performance optimization.\n   *\n   * TODO: Benchmark whether checking for changed values in memory actually\n   *       improves performance (especially statically positioned elements).\n   * TODO: Benchmark the effects of putting this at the top since 99% of props\n   *       do not change for a given reconciliation.\n   * TODO: Benchmark areas that can be improved with caching.\n   *\n   * @private\n   * @param {object} lastProps\n   * @param {object} nextProps\n   * @param {?DOMElement} node\n   */\n  _updateDOMProperties: function (lastProps, nextProps, transaction) {\n    var propKey;\n    var styleName;\n    var styleUpdates;\n    for (propKey in lastProps) {\n      if (nextProps.hasOwnProperty(propKey) || !lastProps.hasOwnProperty(propKey) || lastProps[propKey] == null) {\n        continue;\n      }\n      if (propKey === STYLE) {\n        var lastStyle = this._previousStyleCopy;\n        for (styleName in lastStyle) {\n          if (lastStyle.hasOwnProperty(styleName)) {\n            styleUpdates = styleUpdates || {};\n            styleUpdates[styleName] = '';\n          }\n        }\n        this._previousStyleCopy = null;\n      } else if (registrationNameModules.hasOwnProperty(propKey)) {\n        if (lastProps[propKey]) {\n          // Only call deleteListener if there was a listener previously or\n          // else willDeleteListener gets called when there wasn't actually a\n          // listener (e.g., onClick={null})\n          deleteListener(this, propKey);\n        }\n      } else if (isCustomComponent(this._tag, lastProps)) {\n        if (!RESERVED_PROPS.hasOwnProperty(propKey)) {\n          DOMPropertyOperations.deleteValueForAttribute(getNode(this), propKey);\n        }\n      } else if (DOMProperty.properties[propKey] || DOMProperty.isCustomAttribute(propKey)) {\n        DOMPropertyOperations.deleteValueForProperty(getNode(this), propKey);\n      }\n    }\n    for (propKey in nextProps) {\n      var nextProp = nextProps[propKey];\n      var lastProp = propKey === STYLE ? this._previousStyleCopy : lastProps != null ? lastProps[propKey] : undefined;\n      if (!nextProps.hasOwnProperty(propKey) || nextProp === lastProp || nextProp == null && lastProp == null) {\n        continue;\n      }\n      if (propKey === STYLE) {\n        if (nextProp) {\n          if (process.env.NODE_ENV !== 'production') {\n            checkAndWarnForMutatedStyle(this._previousStyleCopy, this._previousStyle, this);\n            this._previousStyle = nextProp;\n          }\n          nextProp = this._previousStyleCopy = _assign({}, nextProp);\n        } else {\n          this._previousStyleCopy = null;\n        }\n        if (lastProp) {\n          // Unset styles on `lastProp` but not on `nextProp`.\n          for (styleName in lastProp) {\n            if (lastProp.hasOwnProperty(styleName) && (!nextProp || !nextProp.hasOwnProperty(styleName))) {\n              styleUpdates = styleUpdates || {};\n              styleUpdates[styleName] = '';\n            }\n          }\n          // Update styles that changed since `lastProp`.\n          for (styleName in nextProp) {\n            if (nextProp.hasOwnProperty(styleName) && lastProp[styleName] !== nextProp[styleName]) {\n              styleUpdates = styleUpdates || {};\n              styleUpdates[styleName] = nextProp[styleName];\n            }\n          }\n        } else {\n          // Relies on `updateStylesByID` not mutating `styleUpdates`.\n          styleUpdates = nextProp;\n        }\n      } else if (registrationNameModules.hasOwnProperty(propKey)) {\n        if (nextProp) {\n          enqueuePutListener(this, propKey, nextProp, transaction);\n        } else if (lastProp) {\n          deleteListener(this, propKey);\n        }\n      } else if (isCustomComponent(this._tag, nextProps)) {\n        if (!RESERVED_PROPS.hasOwnProperty(propKey)) {\n          DOMPropertyOperations.setValueForAttribute(getNode(this), propKey, nextProp);\n        }\n      } else if (DOMProperty.properties[propKey] || DOMProperty.isCustomAttribute(propKey)) {\n        var node = getNode(this);\n        // If we're updating to null or undefined, we should remove the property\n        // from the DOM node instead of inadvertently setting to a string. This\n        // brings us in line with the same behavior we have on initial render.\n        if (nextProp != null) {\n          DOMPropertyOperations.setValueForProperty(node, propKey, nextProp);\n        } else {\n          DOMPropertyOperations.deleteValueForProperty(node, propKey);\n        }\n      }\n    }\n    if (styleUpdates) {\n      CSSPropertyOperations.setValueForStyles(getNode(this), styleUpdates, this);\n    }\n  },\n\n  /**\n   * Reconciles the children with the various properties that affect the\n   * children content.\n   *\n   * @param {object} lastProps\n   * @param {object} nextProps\n   * @param {ReactReconcileTransaction} transaction\n   * @param {object} context\n   */\n  _updateDOMChildren: function (lastProps, nextProps, transaction, context) {\n    var lastContent = CONTENT_TYPES[typeof lastProps.children] ? lastProps.children : null;\n    var nextContent = CONTENT_TYPES[typeof nextProps.children] ? nextProps.children : null;\n\n    var lastHtml = lastProps.dangerouslySetInnerHTML && lastProps.dangerouslySetInnerHTML.__html;\n    var nextHtml = nextProps.dangerouslySetInnerHTML && nextProps.dangerouslySetInnerHTML.__html;\n\n    // Note the use of `!=` which checks for null or undefined.\n    var lastChildren = lastContent != null ? null : lastProps.children;\n    var nextChildren = nextContent != null ? null : nextProps.children;\n\n    // If we're switching from children to content/html or vice versa, remove\n    // the old content\n    var lastHasContentOrHtml = lastContent != null || lastHtml != null;\n    var nextHasContentOrHtml = nextContent != null || nextHtml != null;\n    if (lastChildren != null && nextChildren == null) {\n      this.updateChildren(null, transaction, context);\n    } else if (lastHasContentOrHtml && !nextHasContentOrHtml) {\n      this.updateTextContent('');\n      if (process.env.NODE_ENV !== 'production') {\n        ReactInstrumentation.debugTool.onSetChildren(this._debugID, []);\n      }\n    }\n\n    if (nextContent != null) {\n      if (lastContent !== nextContent) {\n        this.updateTextContent('' + nextContent);\n        if (process.env.NODE_ENV !== 'production') {\n          setContentChildForInstrumentation.call(this, nextContent);\n        }\n      }\n    } else if (nextHtml != null) {\n      if (lastHtml !== nextHtml) {\n        this.updateMarkup('' + nextHtml);\n      }\n      if (process.env.NODE_ENV !== 'production') {\n        ReactInstrumentation.debugTool.onSetChildren(this._debugID, []);\n      }\n    } else if (nextChildren != null) {\n      if (process.env.NODE_ENV !== 'production') {\n        setContentChildForInstrumentation.call(this, null);\n      }\n\n      this.updateChildren(nextChildren, transaction, context);\n    }\n  },\n\n  getHostNode: function () {\n    return getNode(this);\n  },\n\n  /**\n   * Destroys all event registrations for this instance. Does not remove from\n   * the DOM. That must be done by the parent.\n   *\n   * @internal\n   */\n  unmountComponent: function (safely) {\n    switch (this._tag) {\n      case 'audio':\n      case 'form':\n      case 'iframe':\n      case 'img':\n      case 'link':\n      case 'object':\n      case 'source':\n      case 'video':\n        var listeners = this._wrapperState.listeners;\n        if (listeners) {\n          for (var i = 0; i < listeners.length; i++) {\n            listeners[i].remove();\n          }\n        }\n        break;\n      case 'html':\n      case 'head':\n      case 'body':\n        /**\n         * Components like <html> <head> and <body> can't be removed or added\n         * easily in a cross-browser way, however it's valuable to be able to\n         * take advantage of React's reconciliation for styling and <title>\n         * management. So we just document it and throw in dangerous cases.\n         */\n        !false ? process.env.NODE_ENV !== 'production' ? invariant(false, '<%s> tried to unmount. Because of cross-browser quirks it is impossible to unmount some top-level components (eg <html>, <head>, and <body>) reliably and efficiently. To fix this, have a single top-level component that never unmounts render these elements.', this._tag) : _prodInvariant('66', this._tag) : void 0;\n        break;\n    }\n\n    this.unmountChildren(safely);\n    ReactDOMComponentTree.uncacheNode(this);\n    EventPluginHub.deleteAllListeners(this);\n    ReactComponentBrowserEnvironment.unmountIDFromEnvironment(this._rootNodeID);\n    this._rootNodeID = null;\n    this._domID = null;\n    this._wrapperState = null;\n\n    if (process.env.NODE_ENV !== 'production') {\n      setContentChildForInstrumentation.call(this, null);\n    }\n  },\n\n  getPublicInstance: function () {\n    return getNode(this);\n  }\n\n};\n\n_assign(ReactDOMComponent.prototype, ReactDOMComponent.Mixin, ReactMultiChild.Mixin);\n\nmodule.exports = ReactDOMComponent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMComponent.js\n ** module id = 97\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule AutoFocusUtils\n */\n\n'use strict';\n\nvar ReactDOMComponentTree = require('./ReactDOMComponentTree');\n\nvar focusNode = require('fbjs/lib/focusNode');\n\nvar AutoFocusUtils = {\n  focusDOMComponent: function () {\n    focusNode(ReactDOMComponentTree.getNodeFromInstance(this));\n  }\n};\n\nmodule.exports = AutoFocusUtils;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/AutoFocusUtils.js\n ** module id = 98\n ** module chunks = 4\n **/","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\n/**\n * @param {DOMElement} node input/textarea to focus\n */\n\nfunction focusNode(node) {\n  // IE8 can throw \"Can't move focus to the control because it is invisible,\n  // not enabled, or of a type that does not accept the focus.\" for all kinds of\n  // reasons that are too expensive and fragile to test.\n  try {\n    node.focus();\n  } catch (e) {}\n}\n\nmodule.exports = focusNode;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/fbjs/lib/focusNode.js\n ** module id = 99\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule CSSPropertyOperations\n */\n\n'use strict';\n\nvar CSSProperty = require('./CSSProperty');\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\nvar ReactInstrumentation = require('./ReactInstrumentation');\n\nvar camelizeStyleName = require('fbjs/lib/camelizeStyleName');\nvar dangerousStyleValue = require('./dangerousStyleValue');\nvar hyphenateStyleName = require('fbjs/lib/hyphenateStyleName');\nvar memoizeStringOnly = require('fbjs/lib/memoizeStringOnly');\nvar warning = require('fbjs/lib/warning');\n\nvar processStyleName = memoizeStringOnly(function (styleName) {\n  return hyphenateStyleName(styleName);\n});\n\nvar hasShorthandPropertyBug = false;\nvar styleFloatAccessor = 'cssFloat';\nif (ExecutionEnvironment.canUseDOM) {\n  var tempStyle = document.createElement('div').style;\n  try {\n    // IE8 throws \"Invalid argument.\" if resetting shorthand style properties.\n    tempStyle.font = '';\n  } catch (e) {\n    hasShorthandPropertyBug = true;\n  }\n  // IE8 only supports accessing cssFloat (standard) as styleFloat\n  if (document.documentElement.style.cssFloat === undefined) {\n    styleFloatAccessor = 'styleFloat';\n  }\n}\n\nif (process.env.NODE_ENV !== 'production') {\n  // 'msTransform' is correct, but the other prefixes should be capitalized\n  var badVendoredStyleNamePattern = /^(?:webkit|moz|o)[A-Z]/;\n\n  // style values shouldn't contain a semicolon\n  var badStyleValueWithSemicolonPattern = /;\\s*$/;\n\n  var warnedStyleNames = {};\n  var warnedStyleValues = {};\n  var warnedForNaNValue = false;\n\n  var warnHyphenatedStyleName = function (name, owner) {\n    if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {\n      return;\n    }\n\n    warnedStyleNames[name] = true;\n    process.env.NODE_ENV !== 'production' ? warning(false, 'Unsupported style property %s. Did you mean %s?%s', name, camelizeStyleName(name), checkRenderMessage(owner)) : void 0;\n  };\n\n  var warnBadVendoredStyleName = function (name, owner) {\n    if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {\n      return;\n    }\n\n    warnedStyleNames[name] = true;\n    process.env.NODE_ENV !== 'production' ? warning(false, 'Unsupported vendor-prefixed style property %s. Did you mean %s?%s', name, name.charAt(0).toUpperCase() + name.slice(1), checkRenderMessage(owner)) : void 0;\n  };\n\n  var warnStyleValueWithSemicolon = function (name, value, owner) {\n    if (warnedStyleValues.hasOwnProperty(value) && warnedStyleValues[value]) {\n      return;\n    }\n\n    warnedStyleValues[value] = true;\n    process.env.NODE_ENV !== 'production' ? warning(false, 'Style property values shouldn\\'t contain a semicolon.%s ' + 'Try \"%s: %s\" instead.', checkRenderMessage(owner), name, value.replace(badStyleValueWithSemicolonPattern, '')) : void 0;\n  };\n\n  var warnStyleValueIsNaN = function (name, value, owner) {\n    if (warnedForNaNValue) {\n      return;\n    }\n\n    warnedForNaNValue = true;\n    process.env.NODE_ENV !== 'production' ? warning(false, '`NaN` is an invalid value for the `%s` css style property.%s', name, checkRenderMessage(owner)) : void 0;\n  };\n\n  var checkRenderMessage = function (owner) {\n    if (owner) {\n      var name = owner.getName();\n      if (name) {\n        return ' Check the render method of `' + name + '`.';\n      }\n    }\n    return '';\n  };\n\n  /**\n   * @param {string} name\n   * @param {*} value\n   * @param {ReactDOMComponent} component\n   */\n  var warnValidStyle = function (name, value, component) {\n    var owner;\n    if (component) {\n      owner = component._currentElement._owner;\n    }\n    if (name.indexOf('-') > -1) {\n      warnHyphenatedStyleName(name, owner);\n    } else if (badVendoredStyleNamePattern.test(name)) {\n      warnBadVendoredStyleName(name, owner);\n    } else if (badStyleValueWithSemicolonPattern.test(value)) {\n      warnStyleValueWithSemicolon(name, value, owner);\n    }\n\n    if (typeof value === 'number' && isNaN(value)) {\n      warnStyleValueIsNaN(name, value, owner);\n    }\n  };\n}\n\n/**\n * Operations for dealing with CSS properties.\n */\nvar CSSPropertyOperations = {\n\n  /**\n   * Serializes a mapping of style properties for use as inline styles:\n   *\n   *   > createMarkupForStyles({width: '200px', height: 0})\n   *   \"width:200px;height:0;\"\n   *\n   * Undefined values are ignored so that declarative programming is easier.\n   * The result should be HTML-escaped before insertion into the DOM.\n   *\n   * @param {object} styles\n   * @param {ReactDOMComponent} component\n   * @return {?string}\n   */\n  createMarkupForStyles: function (styles, component) {\n    var serialized = '';\n    for (var styleName in styles) {\n      if (!styles.hasOwnProperty(styleName)) {\n        continue;\n      }\n      var styleValue = styles[styleName];\n      if (process.env.NODE_ENV !== 'production') {\n        warnValidStyle(styleName, styleValue, component);\n      }\n      if (styleValue != null) {\n        serialized += processStyleName(styleName) + ':';\n        serialized += dangerousStyleValue(styleName, styleValue, component) + ';';\n      }\n    }\n    return serialized || null;\n  },\n\n  /**\n   * Sets the value for multiple styles on a node.  If a value is specified as\n   * '' (empty string), the corresponding style property will be unset.\n   *\n   * @param {DOMElement} node\n   * @param {object} styles\n   * @param {ReactDOMComponent} component\n   */\n  setValueForStyles: function (node, styles, component) {\n    if (process.env.NODE_ENV !== 'production') {\n      ReactInstrumentation.debugTool.onHostOperation(component._debugID, 'update styles', styles);\n    }\n\n    var style = node.style;\n    for (var styleName in styles) {\n      if (!styles.hasOwnProperty(styleName)) {\n        continue;\n      }\n      if (process.env.NODE_ENV !== 'production') {\n        warnValidStyle(styleName, styles[styleName], component);\n      }\n      var styleValue = dangerousStyleValue(styleName, styles[styleName], component);\n      if (styleName === 'float' || styleName === 'cssFloat') {\n        styleName = styleFloatAccessor;\n      }\n      if (styleValue) {\n        style[styleName] = styleValue;\n      } else {\n        var expansion = hasShorthandPropertyBug && CSSProperty.shorthandPropertyExpansions[styleName];\n        if (expansion) {\n          // Shorthand property that IE8 won't like unsetting, so unset each\n          // component to placate it\n          for (var individualStyleName in expansion) {\n            style[individualStyleName] = '';\n          }\n        } else {\n          style[styleName] = '';\n        }\n      }\n    }\n  }\n\n};\n\nmodule.exports = CSSPropertyOperations;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/CSSPropertyOperations.js\n ** module id = 100\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule CSSProperty\n */\n\n'use strict';\n\n/**\n * CSS properties which accept numbers but are not in units of \"px\".\n */\n\nvar isUnitlessNumber = {\n  animationIterationCount: true,\n  borderImageOutset: true,\n  borderImageSlice: true,\n  borderImageWidth: true,\n  boxFlex: true,\n  boxFlexGroup: true,\n  boxOrdinalGroup: true,\n  columnCount: true,\n  flex: true,\n  flexGrow: true,\n  flexPositive: true,\n  flexShrink: true,\n  flexNegative: true,\n  flexOrder: true,\n  gridRow: true,\n  gridColumn: true,\n  fontWeight: true,\n  lineClamp: true,\n  lineHeight: true,\n  opacity: true,\n  order: true,\n  orphans: true,\n  tabSize: true,\n  widows: true,\n  zIndex: true,\n  zoom: true,\n\n  // SVG-related properties\n  fillOpacity: true,\n  floodOpacity: true,\n  stopOpacity: true,\n  strokeDasharray: true,\n  strokeDashoffset: true,\n  strokeMiterlimit: true,\n  strokeOpacity: true,\n  strokeWidth: true\n};\n\n/**\n * @param {string} prefix vendor-specific prefix, eg: Webkit\n * @param {string} key style name, eg: transitionDuration\n * @return {string} style name prefixed with `prefix`, properly camelCased, eg:\n * WebkitTransitionDuration\n */\nfunction prefixKey(prefix, key) {\n  return prefix + key.charAt(0).toUpperCase() + key.substring(1);\n}\n\n/**\n * Support style names that may come passed in prefixed by adding permutations\n * of vendor prefixes.\n */\nvar prefixes = ['Webkit', 'ms', 'Moz', 'O'];\n\n// Using Object.keys here, or else the vanilla for-in loop makes IE8 go into an\n// infinite loop, because it iterates over the newly added props too.\nObject.keys(isUnitlessNumber).forEach(function (prop) {\n  prefixes.forEach(function (prefix) {\n    isUnitlessNumber[prefixKey(prefix, prop)] = isUnitlessNumber[prop];\n  });\n});\n\n/**\n * Most style properties can be unset by doing .style[prop] = '' but IE8\n * doesn't like doing that with shorthand properties so for the properties that\n * IE8 breaks on, which are listed here, we instead unset each of the\n * individual properties. See http://bugs.jquery.com/ticket/12385.\n * The 4-value 'clock' properties like margin, padding, border-width seem to\n * behave without any problems. Curiously, list-style works too without any\n * special prodding.\n */\nvar shorthandPropertyExpansions = {\n  background: {\n    backgroundAttachment: true,\n    backgroundColor: true,\n    backgroundImage: true,\n    backgroundPositionX: true,\n    backgroundPositionY: true,\n    backgroundRepeat: true\n  },\n  backgroundPosition: {\n    backgroundPositionX: true,\n    backgroundPositionY: true\n  },\n  border: {\n    borderWidth: true,\n    borderStyle: true,\n    borderColor: true\n  },\n  borderBottom: {\n    borderBottomWidth: true,\n    borderBottomStyle: true,\n    borderBottomColor: true\n  },\n  borderLeft: {\n    borderLeftWidth: true,\n    borderLeftStyle: true,\n    borderLeftColor: true\n  },\n  borderRight: {\n    borderRightWidth: true,\n    borderRightStyle: true,\n    borderRightColor: true\n  },\n  borderTop: {\n    borderTopWidth: true,\n    borderTopStyle: true,\n    borderTopColor: true\n  },\n  font: {\n    fontStyle: true,\n    fontVariant: true,\n    fontWeight: true,\n    fontSize: true,\n    lineHeight: true,\n    fontFamily: true\n  },\n  outline: {\n    outlineWidth: true,\n    outlineStyle: true,\n    outlineColor: true\n  }\n};\n\nvar CSSProperty = {\n  isUnitlessNumber: isUnitlessNumber,\n  shorthandPropertyExpansions: shorthandPropertyExpansions\n};\n\nmodule.exports = CSSProperty;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/CSSProperty.js\n ** module id = 101\n ** module chunks = 4\n **/","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @typechecks\n */\n\n'use strict';\n\nvar camelize = require('./camelize');\n\nvar msPattern = /^-ms-/;\n\n/**\n * Camelcases a hyphenated CSS property name, for example:\n *\n *   > camelizeStyleName('background-color')\n *   < \"backgroundColor\"\n *   > camelizeStyleName('-moz-transition')\n *   < \"MozTransition\"\n *   > camelizeStyleName('-ms-transition')\n *   < \"msTransition\"\n *\n * As Andi Smith suggests\n * (http://www.andismith.com/blog/2012/02/modernizr-prefixed/), an `-ms` prefix\n * is converted to lowercase `ms`.\n *\n * @param {string} string\n * @return {string}\n */\nfunction camelizeStyleName(string) {\n  return camelize(string.replace(msPattern, 'ms-'));\n}\n\nmodule.exports = camelizeStyleName;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/fbjs/lib/camelizeStyleName.js\n ** module id = 102\n ** module chunks = 4\n **/","\"use strict\";\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @typechecks\n */\n\nvar _hyphenPattern = /-(.)/g;\n\n/**\n * Camelcases a hyphenated string, for example:\n *\n *   > camelize('background-color')\n *   < \"backgroundColor\"\n *\n * @param {string} string\n * @return {string}\n */\nfunction camelize(string) {\n  return string.replace(_hyphenPattern, function (_, character) {\n    return character.toUpperCase();\n  });\n}\n\nmodule.exports = camelize;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/fbjs/lib/camelize.js\n ** module id = 103\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule dangerousStyleValue\n */\n\n'use strict';\n\nvar CSSProperty = require('./CSSProperty');\nvar warning = require('fbjs/lib/warning');\n\nvar isUnitlessNumber = CSSProperty.isUnitlessNumber;\nvar styleWarnings = {};\n\n/**\n * Convert a value into the proper css writable value. The style name `name`\n * should be logical (no hyphens), as specified\n * in `CSSProperty.isUnitlessNumber`.\n *\n * @param {string} name CSS property name such as `topMargin`.\n * @param {*} value CSS property value such as `10px`.\n * @param {ReactDOMComponent} component\n * @return {string} Normalized style value with dimensions applied.\n */\nfunction dangerousStyleValue(name, value, component) {\n  // Note that we've removed escapeTextForBrowser() calls here since the\n  // whole string will be escaped when the attribute is injected into\n  // the markup. If you provide unsafe user data here they can inject\n  // arbitrary CSS which may be problematic (I couldn't repro this):\n  // https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet\n  // http://www.thespanner.co.uk/2007/11/26/ultimate-xss-css-injection/\n  // This is not an XSS hole but instead a potential CSS injection issue\n  // which has lead to a greater discussion about how we're going to\n  // trust URLs moving forward. See #2115901\n\n  var isEmpty = value == null || typeof value === 'boolean' || value === '';\n  if (isEmpty) {\n    return '';\n  }\n\n  var isNonNumeric = isNaN(value);\n  if (isNonNumeric || value === 0 || isUnitlessNumber.hasOwnProperty(name) && isUnitlessNumber[name]) {\n    return '' + value; // cast to string\n  }\n\n  if (typeof value === 'string') {\n    if (process.env.NODE_ENV !== 'production') {\n      // Allow '0' to pass through without warning. 0 is already special and\n      // doesn't require units, so we don't need to warn about it.\n      if (component && value !== '0') {\n        var owner = component._currentElement._owner;\n        var ownerName = owner ? owner.getName() : null;\n        if (ownerName && !styleWarnings[ownerName]) {\n          styleWarnings[ownerName] = {};\n        }\n        var warned = false;\n        if (ownerName) {\n          var warnings = styleWarnings[ownerName];\n          warned = warnings[name];\n          if (!warned) {\n            warnings[name] = true;\n          }\n        }\n        if (!warned) {\n          process.env.NODE_ENV !== 'production' ? warning(false, 'a `%s` tag (owner: `%s`) was passed a numeric string value ' + 'for CSS property `%s` (value: `%s`) which will be treated ' + 'as a unitless number in a future version of React.', component._currentElement.type, ownerName || 'unknown', name, value) : void 0;\n        }\n      }\n    }\n    value = value.trim();\n  }\n  return value + 'px';\n}\n\nmodule.exports = dangerousStyleValue;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/dangerousStyleValue.js\n ** module id = 104\n ** module chunks = 4\n **/","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @typechecks\n */\n\n'use strict';\n\nvar hyphenate = require('./hyphenate');\n\nvar msPattern = /^ms-/;\n\n/**\n * Hyphenates a camelcased CSS property name, for example:\n *\n *   > hyphenateStyleName('backgroundColor')\n *   < \"background-color\"\n *   > hyphenateStyleName('MozTransition')\n *   < \"-moz-transition\"\n *   > hyphenateStyleName('msTransition')\n *   < \"-ms-transition\"\n *\n * As Modernizr suggests (http://modernizr.com/docs/#prefixed), an `ms` prefix\n * is converted to `-ms-`.\n *\n * @param {string} string\n * @return {string}\n */\nfunction hyphenateStyleName(string) {\n  return hyphenate(string).replace(msPattern, '-ms-');\n}\n\nmodule.exports = hyphenateStyleName;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/fbjs/lib/hyphenateStyleName.js\n ** module id = 105\n ** module chunks = 4\n **/","'use strict';\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @typechecks\n */\n\nvar _uppercasePattern = /([A-Z])/g;\n\n/**\n * Hyphenates a camelcased string, for example:\n *\n *   > hyphenate('backgroundColor')\n *   < \"background-color\"\n *\n * For CSS style names, use `hyphenateStyleName` instead which works properly\n * with all vendor prefixes, including `ms`.\n *\n * @param {string} string\n * @return {string}\n */\nfunction hyphenate(string) {\n  return string.replace(_uppercasePattern, '-$1').toLowerCase();\n}\n\nmodule.exports = hyphenate;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/fbjs/lib/hyphenate.js\n ** module id = 106\n ** module chunks = 4\n **/","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * \n * @typechecks static-only\n */\n\n'use strict';\n\n/**\n * Memoizes the return value of a function that accepts one string argument.\n */\n\nfunction memoizeStringOnly(callback) {\n  var cache = {};\n  return function (string) {\n    if (!cache.hasOwnProperty(string)) {\n      cache[string] = callback.call(this, string);\n    }\n    return cache[string];\n  };\n}\n\nmodule.exports = memoizeStringOnly;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/fbjs/lib/memoizeStringOnly.js\n ** module id = 107\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule DOMPropertyOperations\n */\n\n'use strict';\n\nvar DOMProperty = require('./DOMProperty');\nvar ReactDOMComponentTree = require('./ReactDOMComponentTree');\nvar ReactDOMInstrumentation = require('./ReactDOMInstrumentation');\nvar ReactInstrumentation = require('./ReactInstrumentation');\n\nvar quoteAttributeValueForBrowser = require('./quoteAttributeValueForBrowser');\nvar warning = require('fbjs/lib/warning');\n\nvar VALID_ATTRIBUTE_NAME_REGEX = new RegExp('^[' + DOMProperty.ATTRIBUTE_NAME_START_CHAR + '][' + DOMProperty.ATTRIBUTE_NAME_CHAR + ']*$');\nvar illegalAttributeNameCache = {};\nvar validatedAttributeNameCache = {};\n\nfunction isAttributeNameSafe(attributeName) {\n  if (validatedAttributeNameCache.hasOwnProperty(attributeName)) {\n    return true;\n  }\n  if (illegalAttributeNameCache.hasOwnProperty(attributeName)) {\n    return false;\n  }\n  if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName)) {\n    validatedAttributeNameCache[attributeName] = true;\n    return true;\n  }\n  illegalAttributeNameCache[attributeName] = true;\n  process.env.NODE_ENV !== 'production' ? warning(false, 'Invalid attribute name: `%s`', attributeName) : void 0;\n  return false;\n}\n\nfunction shouldIgnoreValue(propertyInfo, value) {\n  return value == null || propertyInfo.hasBooleanValue && !value || propertyInfo.hasNumericValue && isNaN(value) || propertyInfo.hasPositiveNumericValue && value < 1 || propertyInfo.hasOverloadedBooleanValue && value === false;\n}\n\n/**\n * Operations for dealing with DOM properties.\n */\nvar DOMPropertyOperations = {\n\n  /**\n   * Creates markup for the ID property.\n   *\n   * @param {string} id Unescaped ID.\n   * @return {string} Markup string.\n   */\n  createMarkupForID: function (id) {\n    return DOMProperty.ID_ATTRIBUTE_NAME + '=' + quoteAttributeValueForBrowser(id);\n  },\n\n  setAttributeForID: function (node, id) {\n    node.setAttribute(DOMProperty.ID_ATTRIBUTE_NAME, id);\n  },\n\n  createMarkupForRoot: function () {\n    return DOMProperty.ROOT_ATTRIBUTE_NAME + '=\"\"';\n  },\n\n  setAttributeForRoot: function (node) {\n    node.setAttribute(DOMProperty.ROOT_ATTRIBUTE_NAME, '');\n  },\n\n  /**\n   * Creates markup for a property.\n   *\n   * @param {string} name\n   * @param {*} value\n   * @return {?string} Markup string, or null if the property was invalid.\n   */\n  createMarkupForProperty: function (name, value) {\n    if (process.env.NODE_ENV !== 'production') {\n      ReactDOMInstrumentation.debugTool.onCreateMarkupForProperty(name, value);\n    }\n    var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null;\n    if (propertyInfo) {\n      if (shouldIgnoreValue(propertyInfo, value)) {\n        return '';\n      }\n      var attributeName = propertyInfo.attributeName;\n      if (propertyInfo.hasBooleanValue || propertyInfo.hasOverloadedBooleanValue && value === true) {\n        return attributeName + '=\"\"';\n      }\n      return attributeName + '=' + quoteAttributeValueForBrowser(value);\n    } else if (DOMProperty.isCustomAttribute(name)) {\n      if (value == null) {\n        return '';\n      }\n      return name + '=' + quoteAttributeValueForBrowser(value);\n    }\n    return null;\n  },\n\n  /**\n   * Creates markup for a custom property.\n   *\n   * @param {string} name\n   * @param {*} value\n   * @return {string} Markup string, or empty string if the property was invalid.\n   */\n  createMarkupForCustomAttribute: function (name, value) {\n    if (!isAttributeNameSafe(name) || value == null) {\n      return '';\n    }\n    return name + '=' + quoteAttributeValueForBrowser(value);\n  },\n\n  /**\n   * Sets the value for a property on a node.\n   *\n   * @param {DOMElement} node\n   * @param {string} name\n   * @param {*} value\n   */\n  setValueForProperty: function (node, name, value) {\n    var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null;\n    if (propertyInfo) {\n      var mutationMethod = propertyInfo.mutationMethod;\n      if (mutationMethod) {\n        mutationMethod(node, value);\n      } else if (shouldIgnoreValue(propertyInfo, value)) {\n        this.deleteValueForProperty(node, name);\n        return;\n      } else if (propertyInfo.mustUseProperty) {\n        // Contrary to `setAttribute`, object properties are properly\n        // `toString`ed by IE8/9.\n        node[propertyInfo.propertyName] = value;\n      } else {\n        var attributeName = propertyInfo.attributeName;\n        var namespace = propertyInfo.attributeNamespace;\n        // `setAttribute` with objects becomes only `[object]` in IE8/9,\n        // ('' + value) makes it output the correct toString()-value.\n        if (namespace) {\n          node.setAttributeNS(namespace, attributeName, '' + value);\n        } else if (propertyInfo.hasBooleanValue || propertyInfo.hasOverloadedBooleanValue && value === true) {\n          node.setAttribute(attributeName, '');\n        } else {\n          node.setAttribute(attributeName, '' + value);\n        }\n      }\n    } else if (DOMProperty.isCustomAttribute(name)) {\n      DOMPropertyOperations.setValueForAttribute(node, name, value);\n      return;\n    }\n\n    if (process.env.NODE_ENV !== 'production') {\n      ReactDOMInstrumentation.debugTool.onSetValueForProperty(node, name, value);\n      var payload = {};\n      payload[name] = value;\n      ReactInstrumentation.debugTool.onHostOperation(ReactDOMComponentTree.getInstanceFromNode(node)._debugID, 'update attribute', payload);\n    }\n  },\n\n  setValueForAttribute: function (node, name, value) {\n    if (!isAttributeNameSafe(name)) {\n      return;\n    }\n    if (value == null) {\n      node.removeAttribute(name);\n    } else {\n      node.setAttribute(name, '' + value);\n    }\n\n    if (process.env.NODE_ENV !== 'production') {\n      var payload = {};\n      payload[name] = value;\n      ReactInstrumentation.debugTool.onHostOperation(ReactDOMComponentTree.getInstanceFromNode(node)._debugID, 'update attribute', payload);\n    }\n  },\n\n  /**\n   * Deletes an attributes from a node.\n   *\n   * @param {DOMElement} node\n   * @param {string} name\n   */\n  deleteValueForAttribute: function (node, name) {\n    node.removeAttribute(name);\n    if (process.env.NODE_ENV !== 'production') {\n      ReactDOMInstrumentation.debugTool.onDeleteValueForProperty(node, name);\n      ReactInstrumentation.debugTool.onHostOperation(ReactDOMComponentTree.getInstanceFromNode(node)._debugID, 'remove attribute', name);\n    }\n  },\n\n  /**\n   * Deletes the value for a property on a node.\n   *\n   * @param {DOMElement} node\n   * @param {string} name\n   */\n  deleteValueForProperty: function (node, name) {\n    var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null;\n    if (propertyInfo) {\n      var mutationMethod = propertyInfo.mutationMethod;\n      if (mutationMethod) {\n        mutationMethod(node, undefined);\n      } else if (propertyInfo.mustUseProperty) {\n        var propName = propertyInfo.propertyName;\n        if (propertyInfo.hasBooleanValue) {\n          node[propName] = false;\n        } else {\n          node[propName] = '';\n        }\n      } else {\n        node.removeAttribute(propertyInfo.attributeName);\n      }\n    } else if (DOMProperty.isCustomAttribute(name)) {\n      node.removeAttribute(name);\n    }\n\n    if (process.env.NODE_ENV !== 'production') {\n      ReactDOMInstrumentation.debugTool.onDeleteValueForProperty(node, name);\n      ReactInstrumentation.debugTool.onHostOperation(ReactDOMComponentTree.getInstanceFromNode(node)._debugID, 'remove attribute', name);\n    }\n  }\n\n};\n\nmodule.exports = DOMPropertyOperations;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/DOMPropertyOperations.js\n ** module id = 108\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMInstrumentation\n */\n\n'use strict';\n\nvar debugTool = null;\n\nif (process.env.NODE_ENV !== 'production') {\n  var ReactDOMDebugTool = require('./ReactDOMDebugTool');\n  debugTool = ReactDOMDebugTool;\n}\n\nmodule.exports = { debugTool: debugTool };\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMInstrumentation.js\n ** module id = 109\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMDebugTool\n */\n\n'use strict';\n\nvar ReactDOMNullInputValuePropDevtool = require('./ReactDOMNullInputValuePropDevtool');\nvar ReactDOMUnknownPropertyDevtool = require('./ReactDOMUnknownPropertyDevtool');\nvar ReactDebugTool = require('./ReactDebugTool');\n\nvar warning = require('fbjs/lib/warning');\n\nvar eventHandlers = [];\nvar handlerDoesThrowForEvent = {};\n\nfunction emitEvent(handlerFunctionName, arg1, arg2, arg3, arg4, arg5) {\n  eventHandlers.forEach(function (handler) {\n    try {\n      if (handler[handlerFunctionName]) {\n        handler[handlerFunctionName](arg1, arg2, arg3, arg4, arg5);\n      }\n    } catch (e) {\n      process.env.NODE_ENV !== 'production' ? warning(handlerDoesThrowForEvent[handlerFunctionName], 'exception thrown by devtool while handling %s: %s', handlerFunctionName, e + '\\n' + e.stack) : void 0;\n      handlerDoesThrowForEvent[handlerFunctionName] = true;\n    }\n  });\n}\n\nvar ReactDOMDebugTool = {\n  addDevtool: function (devtool) {\n    ReactDebugTool.addDevtool(devtool);\n    eventHandlers.push(devtool);\n  },\n  removeDevtool: function (devtool) {\n    ReactDebugTool.removeDevtool(devtool);\n    for (var i = 0; i < eventHandlers.length; i++) {\n      if (eventHandlers[i] === devtool) {\n        eventHandlers.splice(i, 1);\n        i--;\n      }\n    }\n  },\n  onCreateMarkupForProperty: function (name, value) {\n    emitEvent('onCreateMarkupForProperty', name, value);\n  },\n  onSetValueForProperty: function (node, name, value) {\n    emitEvent('onSetValueForProperty', node, name, value);\n  },\n  onDeleteValueForProperty: function (node, name) {\n    emitEvent('onDeleteValueForProperty', node, name);\n  },\n  onTestEvent: function () {\n    emitEvent('onTestEvent');\n  }\n};\n\nReactDOMDebugTool.addDevtool(ReactDOMUnknownPropertyDevtool);\nReactDOMDebugTool.addDevtool(ReactDOMNullInputValuePropDevtool);\n\nmodule.exports = ReactDOMDebugTool;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMDebugTool.js\n ** module id = 110\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMNullInputValuePropDevtool\n */\n\n'use strict';\n\nvar ReactComponentTreeDevtool = require('./ReactComponentTreeDevtool');\n\nvar warning = require('fbjs/lib/warning');\n\nvar didWarnValueNull = false;\n\nfunction handleElement(debugID, element) {\n  if (element == null) {\n    return;\n  }\n  if (element.type !== 'input' && element.type !== 'textarea' && element.type !== 'select') {\n    return;\n  }\n  if (element.props != null && element.props.value === null && !didWarnValueNull) {\n    process.env.NODE_ENV !== 'production' ? warning(false, '`value` prop on `%s` should not be null. ' + 'Consider using the empty string to clear the component or `undefined` ' + 'for uncontrolled components.%s', element.type, ReactComponentTreeDevtool.getStackAddendumByID(debugID)) : void 0;\n\n    didWarnValueNull = true;\n  }\n}\n\nvar ReactDOMUnknownPropertyDevtool = {\n  onBeforeMountComponent: function (debugID, element) {\n    handleElement(debugID, element);\n  },\n  onBeforeUpdateComponent: function (debugID, element) {\n    handleElement(debugID, element);\n  }\n};\n\nmodule.exports = ReactDOMUnknownPropertyDevtool;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMNullInputValuePropDevtool.js\n ** module id = 111\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMUnknownPropertyDevtool\n */\n\n'use strict';\n\nvar DOMProperty = require('./DOMProperty');\nvar EventPluginRegistry = require('./EventPluginRegistry');\nvar ReactComponentTreeDevtool = require('./ReactComponentTreeDevtool');\n\nvar warning = require('fbjs/lib/warning');\n\nif (process.env.NODE_ENV !== 'production') {\n  var reactProps = {\n    children: true,\n    dangerouslySetInnerHTML: true,\n    key: true,\n    ref: true,\n\n    autoFocus: true,\n    defaultValue: true,\n    valueLink: true,\n    defaultChecked: true,\n    checkedLink: true,\n    innerHTML: true,\n    suppressContentEditableWarning: true,\n    onFocusIn: true,\n    onFocusOut: true\n  };\n  var warnedProperties = {};\n\n  var validateProperty = function (tagName, name, debugID) {\n    if (DOMProperty.properties.hasOwnProperty(name) || DOMProperty.isCustomAttribute(name)) {\n      return true;\n    }\n    if (reactProps.hasOwnProperty(name) && reactProps[name] || warnedProperties.hasOwnProperty(name) && warnedProperties[name]) {\n      return true;\n    }\n    if (EventPluginRegistry.registrationNameModules.hasOwnProperty(name)) {\n      return true;\n    }\n    warnedProperties[name] = true;\n    var lowerCasedName = name.toLowerCase();\n\n    // data-* attributes should be lowercase; suggest the lowercase version\n    var standardName = DOMProperty.isCustomAttribute(lowerCasedName) ? lowerCasedName : DOMProperty.getPossibleStandardName.hasOwnProperty(lowerCasedName) ? DOMProperty.getPossibleStandardName[lowerCasedName] : null;\n\n    var registrationName = EventPluginRegistry.possibleRegistrationNames.hasOwnProperty(lowerCasedName) ? EventPluginRegistry.possibleRegistrationNames[lowerCasedName] : null;\n\n    if (standardName != null) {\n      process.env.NODE_ENV !== 'production' ? warning(standardName == null, 'Unknown DOM property %s. Did you mean %s?%s', name, standardName, ReactComponentTreeDevtool.getStackAddendumByID(debugID)) : void 0;\n      return true;\n    } else if (registrationName != null) {\n      process.env.NODE_ENV !== 'production' ? warning(registrationName == null, 'Unknown event handler property %s. Did you mean `%s`?%s', name, registrationName, ReactComponentTreeDevtool.getStackAddendumByID(debugID)) : void 0;\n      return true;\n    } else {\n      // We were unable to guess which prop the user intended.\n      // It is likely that the user was just blindly spreading/forwarding props\n      // Components should be careful to only render valid props/attributes.\n      // Warning will be invoked in warnUnknownProperties to allow grouping.\n      return false;\n    }\n  };\n}\n\nvar warnUnknownProperties = function (debugID, element) {\n  var unknownProps = [];\n  for (var key in element.props) {\n    var isValid = validateProperty(element.type, key, debugID);\n    if (!isValid) {\n      unknownProps.push(key);\n    }\n  }\n\n  var unknownPropString = unknownProps.map(function (prop) {\n    return '`' + prop + '`';\n  }).join(', ');\n\n  if (unknownProps.length === 1) {\n    process.env.NODE_ENV !== 'production' ? warning(false, 'Unknown prop %s on <%s> tag. Remove this prop from the element. ' + 'For details, see https://fb.me/react-unknown-prop%s', unknownPropString, element.type, ReactComponentTreeDevtool.getStackAddendumByID(debugID)) : void 0;\n  } else if (unknownProps.length > 1) {\n    process.env.NODE_ENV !== 'production' ? warning(false, 'Unknown props %s on <%s> tag. Remove these props from the element. ' + 'For details, see https://fb.me/react-unknown-prop%s', unknownPropString, element.type, ReactComponentTreeDevtool.getStackAddendumByID(debugID)) : void 0;\n  }\n};\n\nfunction handleElement(debugID, element) {\n  if (element == null || typeof element.type !== 'string') {\n    return;\n  }\n  if (element.type.indexOf('-') >= 0 || element.props.is) {\n    return;\n  }\n  warnUnknownProperties(debugID, element);\n}\n\nvar ReactDOMUnknownPropertyDevtool = {\n  onBeforeMountComponent: function (debugID, element) {\n    handleElement(debugID, element);\n  },\n  onBeforeUpdateComponent: function (debugID, element) {\n    handleElement(debugID, element);\n  }\n};\n\nmodule.exports = ReactDOMUnknownPropertyDevtool;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMUnknownPropertyDevtool.js\n ** module id = 112\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule quoteAttributeValueForBrowser\n */\n\n'use strict';\n\nvar escapeTextContentForBrowser = require('./escapeTextContentForBrowser');\n\n/**\n * Escapes attribute value to prevent scripting attacks.\n *\n * @param {*} value Value to escape.\n * @return {string} An escaped string.\n */\nfunction quoteAttributeValueForBrowser(value) {\n  return '\"' + escapeTextContentForBrowser(value) + '\"';\n}\n\nmodule.exports = quoteAttributeValueForBrowser;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/quoteAttributeValueForBrowser.js\n ** module id = 113\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactBrowserEventEmitter\n */\n\n'use strict';\n\nvar _assign = require('object-assign');\n\nvar EventConstants = require('./EventConstants');\nvar EventPluginRegistry = require('./EventPluginRegistry');\nvar ReactEventEmitterMixin = require('./ReactEventEmitterMixin');\nvar ViewportMetrics = require('./ViewportMetrics');\n\nvar getVendorPrefixedEventName = require('./getVendorPrefixedEventName');\nvar isEventSupported = require('./isEventSupported');\n\n/**\n * Summary of `ReactBrowserEventEmitter` event handling:\n *\n *  - Top-level delegation is used to trap most native browser events. This\n *    may only occur in the main thread and is the responsibility of\n *    ReactEventListener, which is injected and can therefore support pluggable\n *    event sources. This is the only work that occurs in the main thread.\n *\n *  - We normalize and de-duplicate events to account for browser quirks. This\n *    may be done in the worker thread.\n *\n *  - Forward these native events (with the associated top-level type used to\n *    trap it) to `EventPluginHub`, which in turn will ask plugins if they want\n *    to extract any synthetic events.\n *\n *  - The `EventPluginHub` will then process each event by annotating them with\n *    \"dispatches\", a sequence of listeners and IDs that care about that event.\n *\n *  - The `EventPluginHub` then dispatches the events.\n *\n * Overview of React and the event system:\n *\n * +------------+    .\n * |    DOM     |    .\n * +------------+    .\n *       |           .\n *       v           .\n * +------------+    .\n * | ReactEvent |    .\n * |  Listener  |    .\n * +------------+    .                         +-----------+\n *       |           .               +--------+|SimpleEvent|\n *       |           .               |         |Plugin     |\n * +-----|------+    .               v         +-----------+\n * |     |      |    .    +--------------+                    +------------+\n * |     +-----------.--->|EventPluginHub|                    |    Event   |\n * |            |    .    |              |     +-----------+  | Propagators|\n * | ReactEvent |    .    |              |     |TapEvent   |  |------------|\n * |  Emitter   |    .    |              |<---+|Plugin     |  |other plugin|\n * |            |    .    |              |     +-----------+  |  utilities |\n * |     +-----------.--->|              |                    +------------+\n * |     |      |    .    +--------------+\n * +-----|------+    .                ^        +-----------+\n *       |           .                |        |Enter/Leave|\n *       +           .                +-------+|Plugin     |\n * +-------------+   .                         +-----------+\n * | application |   .\n * |-------------|   .\n * |             |   .\n * |             |   .\n * +-------------+   .\n *                   .\n *    React Core     .  General Purpose Event Plugin System\n */\n\nvar hasEventPageXY;\nvar alreadyListeningTo = {};\nvar isMonitoringScrollValue = false;\nvar reactTopListenersCounter = 0;\n\n// For events like 'submit' which don't consistently bubble (which we trap at a\n// lower node than `document`), binding at `document` would cause duplicate\n// events so we don't include them here\nvar topEventMapping = {\n  topAbort: 'abort',\n  topAnimationEnd: getVendorPrefixedEventName('animationend') || 'animationend',\n  topAnimationIteration: getVendorPrefixedEventName('animationiteration') || 'animationiteration',\n  topAnimationStart: getVendorPrefixedEventName('animationstart') || 'animationstart',\n  topBlur: 'blur',\n  topCanPlay: 'canplay',\n  topCanPlayThrough: 'canplaythrough',\n  topChange: 'change',\n  topClick: 'click',\n  topCompositionEnd: 'compositionend',\n  topCompositionStart: 'compositionstart',\n  topCompositionUpdate: 'compositionupdate',\n  topContextMenu: 'contextmenu',\n  topCopy: 'copy',\n  topCut: 'cut',\n  topDoubleClick: 'dblclick',\n  topDrag: 'drag',\n  topDragEnd: 'dragend',\n  topDragEnter: 'dragenter',\n  topDragExit: 'dragexit',\n  topDragLeave: 'dragleave',\n  topDragOver: 'dragover',\n  topDragStart: 'dragstart',\n  topDrop: 'drop',\n  topDurationChange: 'durationchange',\n  topEmptied: 'emptied',\n  topEncrypted: 'encrypted',\n  topEnded: 'ended',\n  topError: 'error',\n  topFocus: 'focus',\n  topInput: 'input',\n  topKeyDown: 'keydown',\n  topKeyPress: 'keypress',\n  topKeyUp: 'keyup',\n  topLoadedData: 'loadeddata',\n  topLoadedMetadata: 'loadedmetadata',\n  topLoadStart: 'loadstart',\n  topMouseDown: 'mousedown',\n  topMouseMove: 'mousemove',\n  topMouseOut: 'mouseout',\n  topMouseOver: 'mouseover',\n  topMouseUp: 'mouseup',\n  topPaste: 'paste',\n  topPause: 'pause',\n  topPlay: 'play',\n  topPlaying: 'playing',\n  topProgress: 'progress',\n  topRateChange: 'ratechange',\n  topScroll: 'scroll',\n  topSeeked: 'seeked',\n  topSeeking: 'seeking',\n  topSelectionChange: 'selectionchange',\n  topStalled: 'stalled',\n  topSuspend: 'suspend',\n  topTextInput: 'textInput',\n  topTimeUpdate: 'timeupdate',\n  topTouchCancel: 'touchcancel',\n  topTouchEnd: 'touchend',\n  topTouchMove: 'touchmove',\n  topTouchStart: 'touchstart',\n  topTransitionEnd: getVendorPrefixedEventName('transitionend') || 'transitionend',\n  topVolumeChange: 'volumechange',\n  topWaiting: 'waiting',\n  topWheel: 'wheel'\n};\n\n/**\n * To ensure no conflicts with other potential React instances on the page\n */\nvar topListenersIDKey = '_reactListenersID' + String(Math.random()).slice(2);\n\nfunction getListeningForDocument(mountAt) {\n  // In IE8, `mountAt` is a host object and doesn't have `hasOwnProperty`\n  // directly.\n  if (!Object.prototype.hasOwnProperty.call(mountAt, topListenersIDKey)) {\n    mountAt[topListenersIDKey] = reactTopListenersCounter++;\n    alreadyListeningTo[mountAt[topListenersIDKey]] = {};\n  }\n  return alreadyListeningTo[mountAt[topListenersIDKey]];\n}\n\n/**\n * `ReactBrowserEventEmitter` is used to attach top-level event listeners. For\n * example:\n *\n *   EventPluginHub.putListener('myID', 'onClick', myFunction);\n *\n * This would allocate a \"registration\" of `('onClick', myFunction)` on 'myID'.\n *\n * @internal\n */\nvar ReactBrowserEventEmitter = _assign({}, ReactEventEmitterMixin, {\n\n  /**\n   * Injectable event backend\n   */\n  ReactEventListener: null,\n\n  injection: {\n    /**\n     * @param {object} ReactEventListener\n     */\n    injectReactEventListener: function (ReactEventListener) {\n      ReactEventListener.setHandleTopLevel(ReactBrowserEventEmitter.handleTopLevel);\n      ReactBrowserEventEmitter.ReactEventListener = ReactEventListener;\n    }\n  },\n\n  /**\n   * Sets whether or not any created callbacks should be enabled.\n   *\n   * @param {boolean} enabled True if callbacks should be enabled.\n   */\n  setEnabled: function (enabled) {\n    if (ReactBrowserEventEmitter.ReactEventListener) {\n      ReactBrowserEventEmitter.ReactEventListener.setEnabled(enabled);\n    }\n  },\n\n  /**\n   * @return {boolean} True if callbacks are enabled.\n   */\n  isEnabled: function () {\n    return !!(ReactBrowserEventEmitter.ReactEventListener && ReactBrowserEventEmitter.ReactEventListener.isEnabled());\n  },\n\n  /**\n   * We listen for bubbled touch events on the document object.\n   *\n   * Firefox v8.01 (and possibly others) exhibited strange behavior when\n   * mounting `onmousemove` events at some node that was not the document\n   * element. The symptoms were that if your mouse is not moving over something\n   * contained within that mount point (for example on the background) the\n   * top-level listeners for `onmousemove` won't be called. However, if you\n   * register the `mousemove` on the document object, then it will of course\n   * catch all `mousemove`s. This along with iOS quirks, justifies restricting\n   * top-level listeners to the document object only, at least for these\n   * movement types of events and possibly all events.\n   *\n   * @see http://www.quirksmode.org/blog/archives/2010/09/click_event_del.html\n   *\n   * Also, `keyup`/`keypress`/`keydown` do not bubble to the window on IE, but\n   * they bubble to document.\n   *\n   * @param {string} registrationName Name of listener (e.g. `onClick`).\n   * @param {object} contentDocumentHandle Document which owns the container\n   */\n  listenTo: function (registrationName, contentDocumentHandle) {\n    var mountAt = contentDocumentHandle;\n    var isListening = getListeningForDocument(mountAt);\n    var dependencies = EventPluginRegistry.registrationNameDependencies[registrationName];\n\n    var topLevelTypes = EventConstants.topLevelTypes;\n    for (var i = 0; i < dependencies.length; i++) {\n      var dependency = dependencies[i];\n      if (!(isListening.hasOwnProperty(dependency) && isListening[dependency])) {\n        if (dependency === topLevelTypes.topWheel) {\n          if (isEventSupported('wheel')) {\n            ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topWheel, 'wheel', mountAt);\n          } else if (isEventSupported('mousewheel')) {\n            ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topWheel, 'mousewheel', mountAt);\n          } else {\n            // Firefox needs to capture a different mouse scroll event.\n            // @see http://www.quirksmode.org/dom/events/tests/scroll.html\n            ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topWheel, 'DOMMouseScroll', mountAt);\n          }\n        } else if (dependency === topLevelTypes.topScroll) {\n\n          if (isEventSupported('scroll', true)) {\n            ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelTypes.topScroll, 'scroll', mountAt);\n          } else {\n            ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topScroll, 'scroll', ReactBrowserEventEmitter.ReactEventListener.WINDOW_HANDLE);\n          }\n        } else if (dependency === topLevelTypes.topFocus || dependency === topLevelTypes.topBlur) {\n\n          if (isEventSupported('focus', true)) {\n            ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelTypes.topFocus, 'focus', mountAt);\n            ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelTypes.topBlur, 'blur', mountAt);\n          } else if (isEventSupported('focusin')) {\n            // IE has `focusin` and `focusout` events which bubble.\n            // @see http://www.quirksmode.org/blog/archives/2008/04/delegating_the.html\n            ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topFocus, 'focusin', mountAt);\n            ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topBlur, 'focusout', mountAt);\n          }\n\n          // to make sure blur and focus event listeners are only attached once\n          isListening[topLevelTypes.topBlur] = true;\n          isListening[topLevelTypes.topFocus] = true;\n        } else if (topEventMapping.hasOwnProperty(dependency)) {\n          ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(dependency, topEventMapping[dependency], mountAt);\n        }\n\n        isListening[dependency] = true;\n      }\n    }\n  },\n\n  trapBubbledEvent: function (topLevelType, handlerBaseName, handle) {\n    return ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelType, handlerBaseName, handle);\n  },\n\n  trapCapturedEvent: function (topLevelType, handlerBaseName, handle) {\n    return ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelType, handlerBaseName, handle);\n  },\n\n  /**\n   * Listens to window scroll and resize events. We cache scroll values so that\n   * application code can access them without triggering reflows.\n   *\n   * ViewportMetrics is only used by SyntheticMouse/TouchEvent and only when\n   * pageX/pageY isn't supported (legacy browsers).\n   *\n   * NOTE: Scroll events do not bubble.\n   *\n   * @see http://www.quirksmode.org/dom/events/scroll.html\n   */\n  ensureScrollValueMonitoring: function () {\n    if (hasEventPageXY === undefined) {\n      hasEventPageXY = document.createEvent && 'pageX' in document.createEvent('MouseEvent');\n    }\n    if (!hasEventPageXY && !isMonitoringScrollValue) {\n      var refresh = ViewportMetrics.refreshScrollValues;\n      ReactBrowserEventEmitter.ReactEventListener.monitorScrollValue(refresh);\n      isMonitoringScrollValue = true;\n    }\n  }\n\n});\n\nmodule.exports = ReactBrowserEventEmitter;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactBrowserEventEmitter.js\n ** module id = 114\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactEventEmitterMixin\n */\n\n'use strict';\n\nvar EventPluginHub = require('./EventPluginHub');\n\nfunction runEventQueueInBatch(events) {\n  EventPluginHub.enqueueEvents(events);\n  EventPluginHub.processEventQueue(false);\n}\n\nvar ReactEventEmitterMixin = {\n\n  /**\n   * Streams a fired top-level event to `EventPluginHub` where plugins have the\n   * opportunity to create `ReactEvent`s to be dispatched.\n   */\n  handleTopLevel: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n    var events = EventPluginHub.extractEvents(topLevelType, targetInst, nativeEvent, nativeEventTarget);\n    runEventQueueInBatch(events);\n  }\n};\n\nmodule.exports = ReactEventEmitterMixin;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactEventEmitterMixin.js\n ** module id = 115\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getVendorPrefixedEventName\n */\n\n'use strict';\n\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\n\n/**\n * Generate a mapping of standard vendor prefixes using the defined style property and event name.\n *\n * @param {string} styleProp\n * @param {string} eventName\n * @returns {object}\n */\nfunction makePrefixMap(styleProp, eventName) {\n  var prefixes = {};\n\n  prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();\n  prefixes['Webkit' + styleProp] = 'webkit' + eventName;\n  prefixes['Moz' + styleProp] = 'moz' + eventName;\n  prefixes['ms' + styleProp] = 'MS' + eventName;\n  prefixes['O' + styleProp] = 'o' + eventName.toLowerCase();\n\n  return prefixes;\n}\n\n/**\n * A list of event names to a configurable list of vendor prefixes.\n */\nvar vendorPrefixes = {\n  animationend: makePrefixMap('Animation', 'AnimationEnd'),\n  animationiteration: makePrefixMap('Animation', 'AnimationIteration'),\n  animationstart: makePrefixMap('Animation', 'AnimationStart'),\n  transitionend: makePrefixMap('Transition', 'TransitionEnd')\n};\n\n/**\n * Event names that have already been detected and prefixed (if applicable).\n */\nvar prefixedEventNames = {};\n\n/**\n * Element to check for prefixes on.\n */\nvar style = {};\n\n/**\n * Bootstrap if a DOM exists.\n */\nif (ExecutionEnvironment.canUseDOM) {\n  style = document.createElement('div').style;\n\n  // On some platforms, in particular some releases of Android 4.x,\n  // the un-prefixed \"animation\" and \"transition\" properties are defined on the\n  // style object but the events that fire will still be prefixed, so we need\n  // to check if the un-prefixed events are usable, and if not remove them from the map.\n  if (!('AnimationEvent' in window)) {\n    delete vendorPrefixes.animationend.animation;\n    delete vendorPrefixes.animationiteration.animation;\n    delete vendorPrefixes.animationstart.animation;\n  }\n\n  // Same as above\n  if (!('TransitionEvent' in window)) {\n    delete vendorPrefixes.transitionend.transition;\n  }\n}\n\n/**\n * Attempts to determine the correct vendor prefixed event name.\n *\n * @param {string} eventName\n * @returns {string}\n */\nfunction getVendorPrefixedEventName(eventName) {\n  if (prefixedEventNames[eventName]) {\n    return prefixedEventNames[eventName];\n  } else if (!vendorPrefixes[eventName]) {\n    return eventName;\n  }\n\n  var prefixMap = vendorPrefixes[eventName];\n\n  for (var styleProp in prefixMap) {\n    if (prefixMap.hasOwnProperty(styleProp) && styleProp in style) {\n      return prefixedEventNames[eventName] = prefixMap[styleProp];\n    }\n  }\n\n  return '';\n}\n\nmodule.exports = getVendorPrefixedEventName;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/getVendorPrefixedEventName.js\n ** module id = 116\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMButton\n */\n\n'use strict';\n\nvar DisabledInputUtils = require('./DisabledInputUtils');\n\n/**\n * Implements a <button> host component that does not receive mouse events\n * when `disabled` is set.\n */\nvar ReactDOMButton = {\n  getHostProps: DisabledInputUtils.getHostProps\n};\n\nmodule.exports = ReactDOMButton;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMButton.js\n ** module id = 117\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule DisabledInputUtils\n */\n\n'use strict';\n\nvar disableableMouseListenerNames = {\n  onClick: true,\n  onDoubleClick: true,\n  onMouseDown: true,\n  onMouseMove: true,\n  onMouseUp: true,\n\n  onClickCapture: true,\n  onDoubleClickCapture: true,\n  onMouseDownCapture: true,\n  onMouseMoveCapture: true,\n  onMouseUpCapture: true\n};\n\n/**\n * Implements a host component that does not receive mouse events\n * when `disabled` is set.\n */\nvar DisabledInputUtils = {\n  getHostProps: function (inst, props) {\n    if (!props.disabled) {\n      return props;\n    }\n\n    // Copy the props, except the mouse listeners\n    var hostProps = {};\n    for (var key in props) {\n      if (!disableableMouseListenerNames[key] && props.hasOwnProperty(key)) {\n        hostProps[key] = props[key];\n      }\n    }\n\n    return hostProps;\n  }\n};\n\nmodule.exports = DisabledInputUtils;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/DisabledInputUtils.js\n ** module id = 118\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMInput\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant'),\n    _assign = require('object-assign');\n\nvar DisabledInputUtils = require('./DisabledInputUtils');\nvar DOMPropertyOperations = require('./DOMPropertyOperations');\nvar LinkedValueUtils = require('./LinkedValueUtils');\nvar ReactDOMComponentTree = require('./ReactDOMComponentTree');\nvar ReactUpdates = require('./ReactUpdates');\n\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\nvar didWarnValueLink = false;\nvar didWarnCheckedLink = false;\nvar didWarnValueDefaultValue = false;\nvar didWarnCheckedDefaultChecked = false;\nvar didWarnControlledToUncontrolled = false;\nvar didWarnUncontrolledToControlled = false;\n\nfunction forceUpdateIfMounted() {\n  if (this._rootNodeID) {\n    // DOM component is still mounted; update\n    ReactDOMInput.updateWrapper(this);\n  }\n}\n\nfunction isControlled(props) {\n  var usesChecked = props.type === 'checkbox' || props.type === 'radio';\n  return usesChecked ? props.checked !== undefined : props.value !== undefined;\n}\n\n/**\n * Implements an <input> host component that allows setting these optional\n * props: `checked`, `value`, `defaultChecked`, and `defaultValue`.\n *\n * If `checked` or `value` are not supplied (or null/undefined), user actions\n * that affect the checked state or value will trigger updates to the element.\n *\n * If they are supplied (and not null/undefined), the rendered element will not\n * trigger updates to the element. Instead, the props must change in order for\n * the rendered element to be updated.\n *\n * The rendered element will be initialized as unchecked (or `defaultChecked`)\n * with an empty value (or `defaultValue`).\n *\n * @see http://www.w3.org/TR/2012/WD-html5-20121025/the-input-element.html\n */\nvar ReactDOMInput = {\n  getHostProps: function (inst, props) {\n    var value = LinkedValueUtils.getValue(props);\n    var checked = LinkedValueUtils.getChecked(props);\n\n    var hostProps = _assign({\n      // Make sure we set .type before any other properties (setting .value\n      // before .type means .value is lost in IE11 and below)\n      type: undefined,\n      // Make sure we set .step before .value (setting .value before .step\n      // means .value is rounded on mount, based upon step precision)\n      step: undefined\n    }, DisabledInputUtils.getHostProps(inst, props), {\n      defaultChecked: undefined,\n      defaultValue: undefined,\n      value: value != null ? value : inst._wrapperState.initialValue,\n      checked: checked != null ? checked : inst._wrapperState.initialChecked,\n      onChange: inst._wrapperState.onChange\n    });\n\n    return hostProps;\n  },\n\n  mountWrapper: function (inst, props) {\n    if (process.env.NODE_ENV !== 'production') {\n      LinkedValueUtils.checkPropTypes('input', props, inst._currentElement._owner);\n\n      var owner = inst._currentElement._owner;\n\n      if (props.valueLink !== undefined && !didWarnValueLink) {\n        process.env.NODE_ENV !== 'production' ? warning(false, '`valueLink` prop on `input` is deprecated; set `value` and `onChange` instead.') : void 0;\n        didWarnValueLink = true;\n      }\n      if (props.checkedLink !== undefined && !didWarnCheckedLink) {\n        process.env.NODE_ENV !== 'production' ? warning(false, '`checkedLink` prop on `input` is deprecated; set `value` and `onChange` instead.') : void 0;\n        didWarnCheckedLink = true;\n      }\n      if (props.checked !== undefined && props.defaultChecked !== undefined && !didWarnCheckedDefaultChecked) {\n        process.env.NODE_ENV !== 'production' ? warning(false, '%s contains an input of type %s with both checked and defaultChecked props. ' + 'Input elements must be either controlled or uncontrolled ' + '(specify either the checked prop, or the defaultChecked prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components', owner && owner.getName() || 'A component', props.type) : void 0;\n        didWarnCheckedDefaultChecked = true;\n      }\n      if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValueDefaultValue) {\n        process.env.NODE_ENV !== 'production' ? warning(false, '%s contains an input of type %s with both value and defaultValue props. ' + 'Input elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components', owner && owner.getName() || 'A component', props.type) : void 0;\n        didWarnValueDefaultValue = true;\n      }\n    }\n\n    var defaultValue = props.defaultValue;\n    inst._wrapperState = {\n      initialChecked: props.checked != null ? props.checked : props.defaultChecked,\n      initialValue: props.value != null ? props.value : defaultValue,\n      listeners: null,\n      onChange: _handleChange.bind(inst)\n    };\n\n    if (process.env.NODE_ENV !== 'production') {\n      inst._wrapperState.controlled = isControlled(props);\n    }\n  },\n\n  updateWrapper: function (inst) {\n    var props = inst._currentElement.props;\n\n    if (process.env.NODE_ENV !== 'production') {\n      var controlled = isControlled(props);\n      var owner = inst._currentElement._owner;\n\n      if (!inst._wrapperState.controlled && controlled && !didWarnUncontrolledToControlled) {\n        process.env.NODE_ENV !== 'production' ? warning(false, '%s is changing an uncontrolled input of type %s to be controlled. ' + 'Input elements should not switch from uncontrolled to controlled (or vice versa). ' + 'Decide between using a controlled or uncontrolled input ' + 'element for the lifetime of the component. More info: https://fb.me/react-controlled-components', owner && owner.getName() || 'A component', props.type) : void 0;\n        didWarnUncontrolledToControlled = true;\n      }\n      if (inst._wrapperState.controlled && !controlled && !didWarnControlledToUncontrolled) {\n        process.env.NODE_ENV !== 'production' ? warning(false, '%s is changing a controlled input of type %s to be uncontrolled. ' + 'Input elements should not switch from controlled to uncontrolled (or vice versa). ' + 'Decide between using a controlled or uncontrolled input ' + 'element for the lifetime of the component. More info: https://fb.me/react-controlled-components', owner && owner.getName() || 'A component', props.type) : void 0;\n        didWarnControlledToUncontrolled = true;\n      }\n    }\n\n    // TODO: Shouldn't this be getChecked(props)?\n    var checked = props.checked;\n    if (checked != null) {\n      DOMPropertyOperations.setValueForProperty(ReactDOMComponentTree.getNodeFromInstance(inst), 'checked', checked || false);\n    }\n\n    var node = ReactDOMComponentTree.getNodeFromInstance(inst);\n    var value = LinkedValueUtils.getValue(props);\n    if (value != null) {\n\n      // Cast `value` to a string to ensure the value is set correctly. While\n      // browsers typically do this as necessary, jsdom doesn't.\n      var newValue = '' + value;\n\n      // To avoid side effects (such as losing text selection), only set value if changed\n      if (newValue !== node.value) {\n        node.value = newValue;\n      }\n    } else {\n      if (props.value == null && props.defaultValue != null) {\n        node.defaultValue = '' + props.defaultValue;\n      }\n      if (props.checked == null && props.defaultChecked != null) {\n        node.defaultChecked = !!props.defaultChecked;\n      }\n    }\n  },\n\n  postMountWrapper: function (inst) {\n    var props = inst._currentElement.props;\n\n    // This is in postMount because we need access to the DOM node, which is not\n    // available until after the component has mounted.\n    var node = ReactDOMComponentTree.getNodeFromInstance(inst);\n\n    // Detach value from defaultValue. We won't do anything if we're working on\n    // submit or reset inputs as those values & defaultValues are linked. They\n    // are not resetable nodes so this operation doesn't matter and actually\n    // removes browser-default values (eg \"Submit Query\") when no value is\n    // provided.\n    if (props.type !== 'submit' && props.type !== 'reset') {\n      node.value = node.value;\n    }\n\n    // Normally, we'd just do `node.checked = node.checked` upon initial mount, less this bug\n    // this is needed to work around a chrome bug where setting defaultChecked\n    // will sometimes influence the value of checked (even after detachment).\n    // Reference: https://bugs.chromium.org/p/chromium/issues/detail?id=608416\n    // We need to temporarily unset name to avoid disrupting radio button groups.\n    var name = node.name;\n    if (name !== '') {\n      node.name = '';\n    }\n    node.defaultChecked = !node.defaultChecked;\n    node.defaultChecked = !node.defaultChecked;\n    if (name !== '') {\n      node.name = name;\n    }\n  }\n};\n\nfunction _handleChange(event) {\n  var props = this._currentElement.props;\n\n  var returnValue = LinkedValueUtils.executeOnChange(props, event);\n\n  // Here we use asap to wait until all updates have propagated, which\n  // is important when using controlled components within layers:\n  // https://github.com/facebook/react/issues/1698\n  ReactUpdates.asap(forceUpdateIfMounted, this);\n\n  var name = props.name;\n  if (props.type === 'radio' && name != null) {\n    var rootNode = ReactDOMComponentTree.getNodeFromInstance(this);\n    var queryRoot = rootNode;\n\n    while (queryRoot.parentNode) {\n      queryRoot = queryRoot.parentNode;\n    }\n\n    // If `rootNode.form` was non-null, then we could try `form.elements`,\n    // but that sometimes behaves strangely in IE8. We could also try using\n    // `form.getElementsByName`, but that will only return direct children\n    // and won't include inputs that use the HTML5 `form=` attribute. Since\n    // the input might not even be in a form, let's just use the global\n    // `querySelectorAll` to ensure we don't miss anything.\n    var group = queryRoot.querySelectorAll('input[name=' + JSON.stringify('' + name) + '][type=\"radio\"]');\n\n    for (var i = 0; i < group.length; i++) {\n      var otherNode = group[i];\n      if (otherNode === rootNode || otherNode.form !== rootNode.form) {\n        continue;\n      }\n      // This will throw if radio buttons rendered by different copies of React\n      // and the same name are rendered into the same form (same as #1939).\n      // That's probably okay; we don't support it just as we don't support\n      // mixing React radio buttons with non-React ones.\n      var otherInstance = ReactDOMComponentTree.getInstanceFromNode(otherNode);\n      !otherInstance ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactDOMInput: Mixing React and non-React radio inputs with the same `name` is not supported.') : _prodInvariant('90') : void 0;\n      // If this is a controlled radio button group, forcing the input that\n      // was previously checked to update will cause it to be come re-checked\n      // as appropriate.\n      ReactUpdates.asap(forceUpdateIfMounted, otherInstance);\n    }\n  }\n\n  return returnValue;\n}\n\nmodule.exports = ReactDOMInput;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMInput.js\n ** module id = 119\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule LinkedValueUtils\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar ReactPropTypes = require('./ReactPropTypes');\nvar ReactPropTypeLocations = require('./ReactPropTypeLocations');\nvar ReactPropTypesSecret = require('./ReactPropTypesSecret');\n\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\nvar hasReadOnlyValue = {\n  'button': true,\n  'checkbox': true,\n  'image': true,\n  'hidden': true,\n  'radio': true,\n  'reset': true,\n  'submit': true\n};\n\nfunction _assertSingleLink(inputProps) {\n  !(inputProps.checkedLink == null || inputProps.valueLink == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Cannot provide a checkedLink and a valueLink. If you want to use checkedLink, you probably don\\'t want to use valueLink and vice versa.') : _prodInvariant('87') : void 0;\n}\nfunction _assertValueLink(inputProps) {\n  _assertSingleLink(inputProps);\n  !(inputProps.value == null && inputProps.onChange == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Cannot provide a valueLink and a value or onChange event. If you want to use value or onChange, you probably don\\'t want to use valueLink.') : _prodInvariant('88') : void 0;\n}\n\nfunction _assertCheckedLink(inputProps) {\n  _assertSingleLink(inputProps);\n  !(inputProps.checked == null && inputProps.onChange == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Cannot provide a checkedLink and a checked property or onChange event. If you want to use checked or onChange, you probably don\\'t want to use checkedLink') : _prodInvariant('89') : void 0;\n}\n\nvar propTypes = {\n  value: function (props, propName, componentName) {\n    if (!props[propName] || hasReadOnlyValue[props.type] || props.onChange || props.readOnly || props.disabled) {\n      return null;\n    }\n    return new Error('You provided a `value` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultValue`. Otherwise, ' + 'set either `onChange` or `readOnly`.');\n  },\n  checked: function (props, propName, componentName) {\n    if (!props[propName] || props.onChange || props.readOnly || props.disabled) {\n      return null;\n    }\n    return new Error('You provided a `checked` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultChecked`. Otherwise, ' + 'set either `onChange` or `readOnly`.');\n  },\n  onChange: ReactPropTypes.func\n};\n\nvar loggedTypeFailures = {};\nfunction getDeclarationErrorAddendum(owner) {\n  if (owner) {\n    var name = owner.getName();\n    if (name) {\n      return ' Check the render method of `' + name + '`.';\n    }\n  }\n  return '';\n}\n\n/**\n * Provide a linked `value` attribute for controlled forms. You should not use\n * this outside of the ReactDOM controlled form components.\n */\nvar LinkedValueUtils = {\n  checkPropTypes: function (tagName, props, owner) {\n    for (var propName in propTypes) {\n      if (propTypes.hasOwnProperty(propName)) {\n        var error = propTypes[propName](props, propName, tagName, ReactPropTypeLocations.prop, null, ReactPropTypesSecret);\n      }\n      if (error instanceof Error && !(error.message in loggedTypeFailures)) {\n        // Only monitor this failure once because there tends to be a lot of the\n        // same error.\n        loggedTypeFailures[error.message] = true;\n\n        var addendum = getDeclarationErrorAddendum(owner);\n        process.env.NODE_ENV !== 'production' ? warning(false, 'Failed form propType: %s%s', error.message, addendum) : void 0;\n      }\n    }\n  },\n\n  /**\n   * @param {object} inputProps Props for form component\n   * @return {*} current value of the input either from value prop or link.\n   */\n  getValue: function (inputProps) {\n    if (inputProps.valueLink) {\n      _assertValueLink(inputProps);\n      return inputProps.valueLink.value;\n    }\n    return inputProps.value;\n  },\n\n  /**\n   * @param {object} inputProps Props for form component\n   * @return {*} current checked status of the input either from checked prop\n   *             or link.\n   */\n  getChecked: function (inputProps) {\n    if (inputProps.checkedLink) {\n      _assertCheckedLink(inputProps);\n      return inputProps.checkedLink.value;\n    }\n    return inputProps.checked;\n  },\n\n  /**\n   * @param {object} inputProps Props for form component\n   * @param {SyntheticEvent} event change event to handle\n   */\n  executeOnChange: function (inputProps, event) {\n    if (inputProps.valueLink) {\n      _assertValueLink(inputProps);\n      return inputProps.valueLink.requestChange(event.target.value);\n    } else if (inputProps.checkedLink) {\n      _assertCheckedLink(inputProps);\n      return inputProps.checkedLink.requestChange(event.target.checked);\n    } else if (inputProps.onChange) {\n      return inputProps.onChange.call(undefined, event);\n    }\n  }\n};\n\nmodule.exports = LinkedValueUtils;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/LinkedValueUtils.js\n ** module id = 120\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMOption\n */\n\n'use strict';\n\nvar _assign = require('object-assign');\n\nvar ReactChildren = require('./ReactChildren');\nvar ReactDOMComponentTree = require('./ReactDOMComponentTree');\nvar ReactDOMSelect = require('./ReactDOMSelect');\n\nvar warning = require('fbjs/lib/warning');\nvar didWarnInvalidOptionChildren = false;\n\nfunction flattenChildren(children) {\n  var content = '';\n\n  // Flatten children and warn if they aren't strings or numbers;\n  // invalid types are ignored.\n  ReactChildren.forEach(children, function (child) {\n    if (child == null) {\n      return;\n    }\n    if (typeof child === 'string' || typeof child === 'number') {\n      content += child;\n    } else if (!didWarnInvalidOptionChildren) {\n      didWarnInvalidOptionChildren = true;\n      process.env.NODE_ENV !== 'production' ? warning(false, 'Only strings and numbers are supported as <option> children.') : void 0;\n    }\n  });\n\n  return content;\n}\n\n/**\n * Implements an <option> host component that warns when `selected` is set.\n */\nvar ReactDOMOption = {\n  mountWrapper: function (inst, props, hostParent) {\n    // TODO (yungsters): Remove support for `selected` in <option>.\n    if (process.env.NODE_ENV !== 'production') {\n      process.env.NODE_ENV !== 'production' ? warning(props.selected == null, 'Use the `defaultValue` or `value` props on <select> instead of ' + 'setting `selected` on <option>.') : void 0;\n    }\n\n    // Look up whether this option is 'selected'\n    var selectValue = null;\n    if (hostParent != null) {\n      var selectParent = hostParent;\n\n      if (selectParent._tag === 'optgroup') {\n        selectParent = selectParent._hostParent;\n      }\n\n      if (selectParent != null && selectParent._tag === 'select') {\n        selectValue = ReactDOMSelect.getSelectValueContext(selectParent);\n      }\n    }\n\n    // If the value is null (e.g., no specified value or after initial mount)\n    // or missing (e.g., for <datalist>), we don't change props.selected\n    var selected = null;\n    if (selectValue != null) {\n      var value;\n      if (props.value != null) {\n        value = props.value + '';\n      } else {\n        value = flattenChildren(props.children);\n      }\n      selected = false;\n      if (Array.isArray(selectValue)) {\n        // multiple\n        for (var i = 0; i < selectValue.length; i++) {\n          if ('' + selectValue[i] === value) {\n            selected = true;\n            break;\n          }\n        }\n      } else {\n        selected = '' + selectValue === value;\n      }\n    }\n\n    inst._wrapperState = { selected: selected };\n  },\n\n  postMountWrapper: function (inst) {\n    // value=\"\" should make a value attribute (#6219)\n    var props = inst._currentElement.props;\n    if (props.value != null) {\n      var node = ReactDOMComponentTree.getNodeFromInstance(inst);\n      node.setAttribute('value', props.value);\n    }\n  },\n\n  getHostProps: function (inst, props) {\n    var hostProps = _assign({ selected: undefined, children: undefined }, props);\n\n    // Read state only from initial mount because <select> updates value\n    // manually; we need the initial state only for server rendering\n    if (inst._wrapperState.selected != null) {\n      hostProps.selected = inst._wrapperState.selected;\n    }\n\n    var content = flattenChildren(props.children);\n\n    if (content) {\n      hostProps.children = content;\n    }\n\n    return hostProps;\n  }\n\n};\n\nmodule.exports = ReactDOMOption;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMOption.js\n ** module id = 121\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMSelect\n */\n\n'use strict';\n\nvar _assign = require('object-assign');\n\nvar DisabledInputUtils = require('./DisabledInputUtils');\nvar LinkedValueUtils = require('./LinkedValueUtils');\nvar ReactDOMComponentTree = require('./ReactDOMComponentTree');\nvar ReactUpdates = require('./ReactUpdates');\n\nvar warning = require('fbjs/lib/warning');\n\nvar didWarnValueLink = false;\nvar didWarnValueDefaultValue = false;\n\nfunction updateOptionsIfPendingUpdateAndMounted() {\n  if (this._rootNodeID && this._wrapperState.pendingUpdate) {\n    this._wrapperState.pendingUpdate = false;\n\n    var props = this._currentElement.props;\n    var value = LinkedValueUtils.getValue(props);\n\n    if (value != null) {\n      updateOptions(this, Boolean(props.multiple), value);\n    }\n  }\n}\n\nfunction getDeclarationErrorAddendum(owner) {\n  if (owner) {\n    var name = owner.getName();\n    if (name) {\n      return ' Check the render method of `' + name + '`.';\n    }\n  }\n  return '';\n}\n\nvar valuePropNames = ['value', 'defaultValue'];\n\n/**\n * Validation function for `value` and `defaultValue`.\n * @private\n */\nfunction checkSelectPropTypes(inst, props) {\n  var owner = inst._currentElement._owner;\n  LinkedValueUtils.checkPropTypes('select', props, owner);\n\n  if (props.valueLink !== undefined && !didWarnValueLink) {\n    process.env.NODE_ENV !== 'production' ? warning(false, '`valueLink` prop on `select` is deprecated; set `value` and `onChange` instead.') : void 0;\n    didWarnValueLink = true;\n  }\n\n  for (var i = 0; i < valuePropNames.length; i++) {\n    var propName = valuePropNames[i];\n    if (props[propName] == null) {\n      continue;\n    }\n    if (props.multiple) {\n      process.env.NODE_ENV !== 'production' ? warning(Array.isArray(props[propName]), 'The `%s` prop supplied to <select> must be an array if ' + '`multiple` is true.%s', propName, getDeclarationErrorAddendum(owner)) : void 0;\n    } else {\n      process.env.NODE_ENV !== 'production' ? warning(!Array.isArray(props[propName]), 'The `%s` prop supplied to <select> must be a scalar ' + 'value if `multiple` is false.%s', propName, getDeclarationErrorAddendum(owner)) : void 0;\n    }\n  }\n}\n\n/**\n * @param {ReactDOMComponent} inst\n * @param {boolean} multiple\n * @param {*} propValue A stringable (with `multiple`, a list of stringables).\n * @private\n */\nfunction updateOptions(inst, multiple, propValue) {\n  var selectedValue, i;\n  var options = ReactDOMComponentTree.getNodeFromInstance(inst).options;\n\n  if (multiple) {\n    selectedValue = {};\n    for (i = 0; i < propValue.length; i++) {\n      selectedValue['' + propValue[i]] = true;\n    }\n    for (i = 0; i < options.length; i++) {\n      var selected = selectedValue.hasOwnProperty(options[i].value);\n      if (options[i].selected !== selected) {\n        options[i].selected = selected;\n      }\n    }\n  } else {\n    // Do not set `select.value` as exact behavior isn't consistent across all\n    // browsers for all cases.\n    selectedValue = '' + propValue;\n    for (i = 0; i < options.length; i++) {\n      if (options[i].value === selectedValue) {\n        options[i].selected = true;\n        return;\n      }\n    }\n    if (options.length) {\n      options[0].selected = true;\n    }\n  }\n}\n\n/**\n * Implements a <select> host component that allows optionally setting the\n * props `value` and `defaultValue`. If `multiple` is false, the prop must be a\n * stringable. If `multiple` is true, the prop must be an array of stringables.\n *\n * If `value` is not supplied (or null/undefined), user actions that change the\n * selected option will trigger updates to the rendered options.\n *\n * If it is supplied (and not null/undefined), the rendered options will not\n * update in response to user actions. Instead, the `value` prop must change in\n * order for the rendered options to update.\n *\n * If `defaultValue` is provided, any options with the supplied values will be\n * selected.\n */\nvar ReactDOMSelect = {\n  getHostProps: function (inst, props) {\n    return _assign({}, DisabledInputUtils.getHostProps(inst, props), {\n      onChange: inst._wrapperState.onChange,\n      value: undefined\n    });\n  },\n\n  mountWrapper: function (inst, props) {\n    if (process.env.NODE_ENV !== 'production') {\n      checkSelectPropTypes(inst, props);\n    }\n\n    var value = LinkedValueUtils.getValue(props);\n    inst._wrapperState = {\n      pendingUpdate: false,\n      initialValue: value != null ? value : props.defaultValue,\n      listeners: null,\n      onChange: _handleChange.bind(inst),\n      wasMultiple: Boolean(props.multiple)\n    };\n\n    if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValueDefaultValue) {\n      process.env.NODE_ENV !== 'production' ? warning(false, 'Select elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled select ' + 'element and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components') : void 0;\n      didWarnValueDefaultValue = true;\n    }\n  },\n\n  getSelectValueContext: function (inst) {\n    // ReactDOMOption looks at this initial value so the initial generated\n    // markup has correct `selected` attributes\n    return inst._wrapperState.initialValue;\n  },\n\n  postUpdateWrapper: function (inst) {\n    var props = inst._currentElement.props;\n\n    // After the initial mount, we control selected-ness manually so don't pass\n    // this value down\n    inst._wrapperState.initialValue = undefined;\n\n    var wasMultiple = inst._wrapperState.wasMultiple;\n    inst._wrapperState.wasMultiple = Boolean(props.multiple);\n\n    var value = LinkedValueUtils.getValue(props);\n    if (value != null) {\n      inst._wrapperState.pendingUpdate = false;\n      updateOptions(inst, Boolean(props.multiple), value);\n    } else if (wasMultiple !== Boolean(props.multiple)) {\n      // For simplicity, reapply `defaultValue` if `multiple` is toggled.\n      if (props.defaultValue != null) {\n        updateOptions(inst, Boolean(props.multiple), props.defaultValue);\n      } else {\n        // Revert the select back to its default unselected state.\n        updateOptions(inst, Boolean(props.multiple), props.multiple ? [] : '');\n      }\n    }\n  }\n};\n\nfunction _handleChange(event) {\n  var props = this._currentElement.props;\n  var returnValue = LinkedValueUtils.executeOnChange(props, event);\n\n  if (this._rootNodeID) {\n    this._wrapperState.pendingUpdate = true;\n  }\n  ReactUpdates.asap(updateOptionsIfPendingUpdateAndMounted, this);\n  return returnValue;\n}\n\nmodule.exports = ReactDOMSelect;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMSelect.js\n ** module id = 122\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMTextarea\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant'),\n    _assign = require('object-assign');\n\nvar DisabledInputUtils = require('./DisabledInputUtils');\nvar LinkedValueUtils = require('./LinkedValueUtils');\nvar ReactDOMComponentTree = require('./ReactDOMComponentTree');\nvar ReactUpdates = require('./ReactUpdates');\n\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\nvar didWarnValueLink = false;\nvar didWarnValDefaultVal = false;\n\nfunction forceUpdateIfMounted() {\n  if (this._rootNodeID) {\n    // DOM component is still mounted; update\n    ReactDOMTextarea.updateWrapper(this);\n  }\n}\n\n/**\n * Implements a <textarea> host component that allows setting `value`, and\n * `defaultValue`. This differs from the traditional DOM API because value is\n * usually set as PCDATA children.\n *\n * If `value` is not supplied (or null/undefined), user actions that affect the\n * value will trigger updates to the element.\n *\n * If `value` is supplied (and not null/undefined), the rendered element will\n * not trigger updates to the element. Instead, the `value` prop must change in\n * order for the rendered element to be updated.\n *\n * The rendered element will be initialized with an empty value, the prop\n * `defaultValue` if specified, or the children content (deprecated).\n */\nvar ReactDOMTextarea = {\n  getHostProps: function (inst, props) {\n    !(props.dangerouslySetInnerHTML == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, '`dangerouslySetInnerHTML` does not make sense on <textarea>.') : _prodInvariant('91') : void 0;\n\n    // Always set children to the same thing. In IE9, the selection range will\n    // get reset if `textContent` is mutated.  We could add a check in setTextContent\n    // to only set the value if/when the value differs from the node value (which would\n    // completely solve this IE9 bug), but Sebastian+Ben seemed to like this solution.\n    // The value can be a boolean or object so that's why it's forced to be a string.\n    var hostProps = _assign({}, DisabledInputUtils.getHostProps(inst, props), {\n      value: undefined,\n      defaultValue: undefined,\n      children: '' + inst._wrapperState.initialValue,\n      onChange: inst._wrapperState.onChange\n    });\n\n    return hostProps;\n  },\n\n  mountWrapper: function (inst, props) {\n    if (process.env.NODE_ENV !== 'production') {\n      LinkedValueUtils.checkPropTypes('textarea', props, inst._currentElement._owner);\n      if (props.valueLink !== undefined && !didWarnValueLink) {\n        process.env.NODE_ENV !== 'production' ? warning(false, '`valueLink` prop on `textarea` is deprecated; set `value` and `onChange` instead.') : void 0;\n        didWarnValueLink = true;\n      }\n      if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValDefaultVal) {\n        process.env.NODE_ENV !== 'production' ? warning(false, 'Textarea elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled textarea ' + 'and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components') : void 0;\n        didWarnValDefaultVal = true;\n      }\n    }\n\n    var value = LinkedValueUtils.getValue(props);\n    var initialValue = value;\n\n    // Only bother fetching default value if we're going to use it\n    if (value == null) {\n      var defaultValue = props.defaultValue;\n      // TODO (yungsters): Remove support for children content in <textarea>.\n      var children = props.children;\n      if (children != null) {\n        if (process.env.NODE_ENV !== 'production') {\n          process.env.NODE_ENV !== 'production' ? warning(false, 'Use the `defaultValue` or `value` props instead of setting ' + 'children on <textarea>.') : void 0;\n        }\n        !(defaultValue == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'If you supply `defaultValue` on a <textarea>, do not pass children.') : _prodInvariant('92') : void 0;\n        if (Array.isArray(children)) {\n          !(children.length <= 1) ? process.env.NODE_ENV !== 'production' ? invariant(false, '<textarea> can only have at most one child.') : _prodInvariant('93') : void 0;\n          children = children[0];\n        }\n\n        defaultValue = '' + children;\n      }\n      if (defaultValue == null) {\n        defaultValue = '';\n      }\n      initialValue = defaultValue;\n    }\n\n    inst._wrapperState = {\n      initialValue: '' + initialValue,\n      listeners: null,\n      onChange: _handleChange.bind(inst)\n    };\n  },\n\n  updateWrapper: function (inst) {\n    var props = inst._currentElement.props;\n\n    var node = ReactDOMComponentTree.getNodeFromInstance(inst);\n    var value = LinkedValueUtils.getValue(props);\n    if (value != null) {\n      // Cast `value` to a string to ensure the value is set correctly. While\n      // browsers typically do this as necessary, jsdom doesn't.\n      var newValue = '' + value;\n\n      // To avoid side effects (such as losing text selection), only set value if changed\n      if (newValue !== node.value) {\n        node.value = newValue;\n      }\n      if (props.defaultValue == null) {\n        node.defaultValue = newValue;\n      }\n    }\n    if (props.defaultValue != null) {\n      node.defaultValue = props.defaultValue;\n    }\n  },\n\n  postMountWrapper: function (inst) {\n    // This is in postMount because we need access to the DOM node, which is not\n    // available until after the component has mounted.\n    var node = ReactDOMComponentTree.getNodeFromInstance(inst);\n\n    // Warning: node.value may be the empty string at this point (IE11) if placeholder is set.\n    node.value = node.textContent; // Detach value from defaultValue\n  }\n};\n\nfunction _handleChange(event) {\n  var props = this._currentElement.props;\n  var returnValue = LinkedValueUtils.executeOnChange(props, event);\n  ReactUpdates.asap(forceUpdateIfMounted, this);\n  return returnValue;\n}\n\nmodule.exports = ReactDOMTextarea;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMTextarea.js\n ** module id = 123\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactMultiChild\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar ReactComponentEnvironment = require('./ReactComponentEnvironment');\nvar ReactInstanceMap = require('./ReactInstanceMap');\nvar ReactInstrumentation = require('./ReactInstrumentation');\nvar ReactMultiChildUpdateTypes = require('./ReactMultiChildUpdateTypes');\n\nvar ReactCurrentOwner = require('./ReactCurrentOwner');\nvar ReactReconciler = require('./ReactReconciler');\nvar ReactChildReconciler = require('./ReactChildReconciler');\n\nvar emptyFunction = require('fbjs/lib/emptyFunction');\nvar flattenChildren = require('./flattenChildren');\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * Make an update for markup to be rendered and inserted at a supplied index.\n *\n * @param {string} markup Markup that renders into an element.\n * @param {number} toIndex Destination index.\n * @private\n */\nfunction makeInsertMarkup(markup, afterNode, toIndex) {\n  // NOTE: Null values reduce hidden classes.\n  return {\n    type: ReactMultiChildUpdateTypes.INSERT_MARKUP,\n    content: markup,\n    fromIndex: null,\n    fromNode: null,\n    toIndex: toIndex,\n    afterNode: afterNode\n  };\n}\n\n/**\n * Make an update for moving an existing element to another index.\n *\n * @param {number} fromIndex Source index of the existing element.\n * @param {number} toIndex Destination index of the element.\n * @private\n */\nfunction makeMove(child, afterNode, toIndex) {\n  // NOTE: Null values reduce hidden classes.\n  return {\n    type: ReactMultiChildUpdateTypes.MOVE_EXISTING,\n    content: null,\n    fromIndex: child._mountIndex,\n    fromNode: ReactReconciler.getHostNode(child),\n    toIndex: toIndex,\n    afterNode: afterNode\n  };\n}\n\n/**\n * Make an update for removing an element at an index.\n *\n * @param {number} fromIndex Index of the element to remove.\n * @private\n */\nfunction makeRemove(child, node) {\n  // NOTE: Null values reduce hidden classes.\n  return {\n    type: ReactMultiChildUpdateTypes.REMOVE_NODE,\n    content: null,\n    fromIndex: child._mountIndex,\n    fromNode: node,\n    toIndex: null,\n    afterNode: null\n  };\n}\n\n/**\n * Make an update for setting the markup of a node.\n *\n * @param {string} markup Markup that renders into an element.\n * @private\n */\nfunction makeSetMarkup(markup) {\n  // NOTE: Null values reduce hidden classes.\n  return {\n    type: ReactMultiChildUpdateTypes.SET_MARKUP,\n    content: markup,\n    fromIndex: null,\n    fromNode: null,\n    toIndex: null,\n    afterNode: null\n  };\n}\n\n/**\n * Make an update for setting the text content.\n *\n * @param {string} textContent Text content to set.\n * @private\n */\nfunction makeTextContent(textContent) {\n  // NOTE: Null values reduce hidden classes.\n  return {\n    type: ReactMultiChildUpdateTypes.TEXT_CONTENT,\n    content: textContent,\n    fromIndex: null,\n    fromNode: null,\n    toIndex: null,\n    afterNode: null\n  };\n}\n\n/**\n * Push an update, if any, onto the queue. Creates a new queue if none is\n * passed and always returns the queue. Mutative.\n */\nfunction enqueue(queue, update) {\n  if (update) {\n    queue = queue || [];\n    queue.push(update);\n  }\n  return queue;\n}\n\n/**\n * Processes any enqueued updates.\n *\n * @private\n */\nfunction processQueue(inst, updateQueue) {\n  ReactComponentEnvironment.processChildrenUpdates(inst, updateQueue);\n}\n\nvar setParentForInstrumentation = emptyFunction;\nvar setChildrenForInstrumentation = emptyFunction;\nif (process.env.NODE_ENV !== 'production') {\n  var getDebugID = function (inst) {\n    if (!inst._debugID) {\n      // Check for ART-like instances. TODO: This is silly/gross.\n      var internal;\n      if (internal = ReactInstanceMap.get(inst)) {\n        inst = internal;\n      }\n    }\n    return inst._debugID;\n  };\n  setParentForInstrumentation = function (child) {\n    if (child._debugID !== 0) {\n      ReactInstrumentation.debugTool.onSetParent(child._debugID, getDebugID(this));\n    }\n  };\n  setChildrenForInstrumentation = function (children) {\n    var debugID = getDebugID(this);\n    // TODO: React Native empty components are also multichild.\n    // This means they still get into this method but don't have _debugID.\n    if (debugID !== 0) {\n      ReactInstrumentation.debugTool.onSetChildren(debugID, children ? Object.keys(children).map(function (key) {\n        return children[key]._debugID;\n      }) : []);\n    }\n  };\n}\n\n/**\n * ReactMultiChild are capable of reconciling multiple children.\n *\n * @class ReactMultiChild\n * @internal\n */\nvar ReactMultiChild = {\n\n  /**\n   * Provides common functionality for components that must reconcile multiple\n   * children. This is used by `ReactDOMComponent` to mount, update, and\n   * unmount child components.\n   *\n   * @lends {ReactMultiChild.prototype}\n   */\n  Mixin: {\n\n    _reconcilerInstantiateChildren: function (nestedChildren, transaction, context) {\n      if (process.env.NODE_ENV !== 'production') {\n        if (this._currentElement) {\n          try {\n            ReactCurrentOwner.current = this._currentElement._owner;\n            return ReactChildReconciler.instantiateChildren(nestedChildren, transaction, context, this._debugID);\n          } finally {\n            ReactCurrentOwner.current = null;\n          }\n        }\n      }\n      return ReactChildReconciler.instantiateChildren(nestedChildren, transaction, context);\n    },\n\n    _reconcilerUpdateChildren: function (prevChildren, nextNestedChildrenElements, mountImages, removedNodes, transaction, context) {\n      var nextChildren;\n      if (process.env.NODE_ENV !== 'production') {\n        if (this._currentElement) {\n          try {\n            ReactCurrentOwner.current = this._currentElement._owner;\n            nextChildren = flattenChildren(nextNestedChildrenElements, this._debugID);\n          } finally {\n            ReactCurrentOwner.current = null;\n          }\n          ReactChildReconciler.updateChildren(prevChildren, nextChildren, mountImages, removedNodes, transaction, this, this._hostContainerInfo, context);\n          return nextChildren;\n        }\n      }\n      nextChildren = flattenChildren(nextNestedChildrenElements);\n      ReactChildReconciler.updateChildren(prevChildren, nextChildren, mountImages, removedNodes, transaction, this, this._hostContainerInfo, context);\n      return nextChildren;\n    },\n\n    /**\n     * Generates a \"mount image\" for each of the supplied children. In the case\n     * of `ReactDOMComponent`, a mount image is a string of markup.\n     *\n     * @param {?object} nestedChildren Nested child maps.\n     * @return {array} An array of mounted representations.\n     * @internal\n     */\n    mountChildren: function (nestedChildren, transaction, context) {\n      var children = this._reconcilerInstantiateChildren(nestedChildren, transaction, context);\n      this._renderedChildren = children;\n\n      var mountImages = [];\n      var index = 0;\n      for (var name in children) {\n        if (children.hasOwnProperty(name)) {\n          var child = children[name];\n          if (process.env.NODE_ENV !== 'production') {\n            setParentForInstrumentation.call(this, child);\n          }\n          var mountImage = ReactReconciler.mountComponent(child, transaction, this, this._hostContainerInfo, context);\n          child._mountIndex = index++;\n          mountImages.push(mountImage);\n        }\n      }\n\n      if (process.env.NODE_ENV !== 'production') {\n        setChildrenForInstrumentation.call(this, children);\n      }\n\n      return mountImages;\n    },\n\n    /**\n     * Replaces any rendered children with a text content string.\n     *\n     * @param {string} nextContent String of content.\n     * @internal\n     */\n    updateTextContent: function (nextContent) {\n      var prevChildren = this._renderedChildren;\n      // Remove any rendered children.\n      ReactChildReconciler.unmountChildren(prevChildren, false);\n      for (var name in prevChildren) {\n        if (prevChildren.hasOwnProperty(name)) {\n          !false ? process.env.NODE_ENV !== 'production' ? invariant(false, 'updateTextContent called on non-empty component.') : _prodInvariant('118') : void 0;\n        }\n      }\n      // Set new text content.\n      var updates = [makeTextContent(nextContent)];\n      processQueue(this, updates);\n    },\n\n    /**\n     * Replaces any rendered children with a markup string.\n     *\n     * @param {string} nextMarkup String of markup.\n     * @internal\n     */\n    updateMarkup: function (nextMarkup) {\n      var prevChildren = this._renderedChildren;\n      // Remove any rendered children.\n      ReactChildReconciler.unmountChildren(prevChildren, false);\n      for (var name in prevChildren) {\n        if (prevChildren.hasOwnProperty(name)) {\n          !false ? process.env.NODE_ENV !== 'production' ? invariant(false, 'updateTextContent called on non-empty component.') : _prodInvariant('118') : void 0;\n        }\n      }\n      var updates = [makeSetMarkup(nextMarkup)];\n      processQueue(this, updates);\n    },\n\n    /**\n     * Updates the rendered children with new children.\n     *\n     * @param {?object} nextNestedChildrenElements Nested child element maps.\n     * @param {ReactReconcileTransaction} transaction\n     * @internal\n     */\n    updateChildren: function (nextNestedChildrenElements, transaction, context) {\n      // Hook used by React ART\n      this._updateChildren(nextNestedChildrenElements, transaction, context);\n    },\n\n    /**\n     * @param {?object} nextNestedChildrenElements Nested child element maps.\n     * @param {ReactReconcileTransaction} transaction\n     * @final\n     * @protected\n     */\n    _updateChildren: function (nextNestedChildrenElements, transaction, context) {\n      var prevChildren = this._renderedChildren;\n      var removedNodes = {};\n      var mountImages = [];\n      var nextChildren = this._reconcilerUpdateChildren(prevChildren, nextNestedChildrenElements, mountImages, removedNodes, transaction, context);\n      if (!nextChildren && !prevChildren) {\n        return;\n      }\n      var updates = null;\n      var name;\n      // `nextIndex` will increment for each child in `nextChildren`, but\n      // `lastIndex` will be the last index visited in `prevChildren`.\n      var nextIndex = 0;\n      var lastIndex = 0;\n      // `nextMountIndex` will increment for each newly mounted child.\n      var nextMountIndex = 0;\n      var lastPlacedNode = null;\n      for (name in nextChildren) {\n        if (!nextChildren.hasOwnProperty(name)) {\n          continue;\n        }\n        var prevChild = prevChildren && prevChildren[name];\n        var nextChild = nextChildren[name];\n        if (prevChild === nextChild) {\n          updates = enqueue(updates, this.moveChild(prevChild, lastPlacedNode, nextIndex, lastIndex));\n          lastIndex = Math.max(prevChild._mountIndex, lastIndex);\n          prevChild._mountIndex = nextIndex;\n        } else {\n          if (prevChild) {\n            // Update `lastIndex` before `_mountIndex` gets unset by unmounting.\n            lastIndex = Math.max(prevChild._mountIndex, lastIndex);\n            // The `removedNodes` loop below will actually remove the child.\n          }\n          // The child must be instantiated before it's mounted.\n          updates = enqueue(updates, this._mountChildAtIndex(nextChild, mountImages[nextMountIndex], lastPlacedNode, nextIndex, transaction, context));\n          nextMountIndex++;\n        }\n        nextIndex++;\n        lastPlacedNode = ReactReconciler.getHostNode(nextChild);\n      }\n      // Remove children that are no longer present.\n      for (name in removedNodes) {\n        if (removedNodes.hasOwnProperty(name)) {\n          updates = enqueue(updates, this._unmountChild(prevChildren[name], removedNodes[name]));\n        }\n      }\n      if (updates) {\n        processQueue(this, updates);\n      }\n      this._renderedChildren = nextChildren;\n\n      if (process.env.NODE_ENV !== 'production') {\n        setChildrenForInstrumentation.call(this, nextChildren);\n      }\n    },\n\n    /**\n     * Unmounts all rendered children. This should be used to clean up children\n     * when this component is unmounted. It does not actually perform any\n     * backend operations.\n     *\n     * @internal\n     */\n    unmountChildren: function (safely) {\n      var renderedChildren = this._renderedChildren;\n      ReactChildReconciler.unmountChildren(renderedChildren, safely);\n      this._renderedChildren = null;\n    },\n\n    /**\n     * Moves a child component to the supplied index.\n     *\n     * @param {ReactComponent} child Component to move.\n     * @param {number} toIndex Destination index of the element.\n     * @param {number} lastIndex Last index visited of the siblings of `child`.\n     * @protected\n     */\n    moveChild: function (child, afterNode, toIndex, lastIndex) {\n      // If the index of `child` is less than `lastIndex`, then it needs to\n      // be moved. Otherwise, we do not need to move it because a child will be\n      // inserted or moved before `child`.\n      if (child._mountIndex < lastIndex) {\n        return makeMove(child, afterNode, toIndex);\n      }\n    },\n\n    /**\n     * Creates a child component.\n     *\n     * @param {ReactComponent} child Component to create.\n     * @param {string} mountImage Markup to insert.\n     * @protected\n     */\n    createChild: function (child, afterNode, mountImage) {\n      return makeInsertMarkup(mountImage, afterNode, child._mountIndex);\n    },\n\n    /**\n     * Removes a child component.\n     *\n     * @param {ReactComponent} child Child to remove.\n     * @protected\n     */\n    removeChild: function (child, node) {\n      return makeRemove(child, node);\n    },\n\n    /**\n     * Mounts a child with the supplied name.\n     *\n     * NOTE: This is part of `updateChildren` and is here for readability.\n     *\n     * @param {ReactComponent} child Component to mount.\n     * @param {string} name Name of the child.\n     * @param {number} index Index at which to insert the child.\n     * @param {ReactReconcileTransaction} transaction\n     * @private\n     */\n    _mountChildAtIndex: function (child, mountImage, afterNode, index, transaction, context) {\n      child._mountIndex = index;\n      return this.createChild(child, afterNode, mountImage);\n    },\n\n    /**\n     * Unmounts a rendered child.\n     *\n     * NOTE: This is part of `updateChildren` and is here for readability.\n     *\n     * @param {ReactComponent} child Component to unmount.\n     * @private\n     */\n    _unmountChild: function (child, node) {\n      var update = this.removeChild(child, node);\n      child._mountIndex = null;\n      return update;\n    }\n\n  }\n\n};\n\nmodule.exports = ReactMultiChild;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactMultiChild.js\n ** module id = 124\n ** module chunks = 4\n **/","/**\n * Copyright 2014-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactComponentEnvironment\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar invariant = require('fbjs/lib/invariant');\n\nvar injected = false;\n\nvar ReactComponentEnvironment = {\n\n  /**\n   * Optionally injectable environment dependent cleanup hook. (server vs.\n   * browser etc). Example: A browser system caches DOM nodes based on component\n   * ID and must remove that cache entry when this instance is unmounted.\n   */\n  unmountIDFromEnvironment: null,\n\n  /**\n   * Optionally injectable hook for swapping out mount images in the middle of\n   * the tree.\n   */\n  replaceNodeWithMarkup: null,\n\n  /**\n   * Optionally injectable hook for processing a queue of child updates. Will\n   * later move into MultiChildComponents.\n   */\n  processChildrenUpdates: null,\n\n  injection: {\n    injectEnvironment: function (environment) {\n      !!injected ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactCompositeComponent: injectEnvironment() can only be called once.') : _prodInvariant('104') : void 0;\n      ReactComponentEnvironment.unmountIDFromEnvironment = environment.unmountIDFromEnvironment;\n      ReactComponentEnvironment.replaceNodeWithMarkup = environment.replaceNodeWithMarkup;\n      ReactComponentEnvironment.processChildrenUpdates = environment.processChildrenUpdates;\n      injected = true;\n    }\n  }\n\n};\n\nmodule.exports = ReactComponentEnvironment;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactComponentEnvironment.js\n ** module id = 125\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactInstanceMap\n */\n\n'use strict';\n\n/**\n * `ReactInstanceMap` maintains a mapping from a public facing stateful\n * instance (key) and the internal representation (value). This allows public\n * methods to accept the user facing instance as an argument and map them back\n * to internal methods.\n */\n\n// TODO: Replace this with ES6: var ReactInstanceMap = new Map();\n\nvar ReactInstanceMap = {\n\n  /**\n   * This API should be called `delete` but we'd have to make sure to always\n   * transform these to strings for IE support. When this transform is fully\n   * supported we can rename it.\n   */\n  remove: function (key) {\n    key._reactInternalInstance = undefined;\n  },\n\n  get: function (key) {\n    return key._reactInternalInstance;\n  },\n\n  has: function (key) {\n    return key._reactInternalInstance !== undefined;\n  },\n\n  set: function (key, value) {\n    key._reactInternalInstance = value;\n  }\n\n};\n\nmodule.exports = ReactInstanceMap;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactInstanceMap.js\n ** module id = 126\n ** module chunks = 4\n **/","/**\n * Copyright 2014-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactChildReconciler\n */\n\n'use strict';\n\nvar ReactReconciler = require('./ReactReconciler');\n\nvar instantiateReactComponent = require('./instantiateReactComponent');\nvar KeyEscapeUtils = require('./KeyEscapeUtils');\nvar shouldUpdateReactComponent = require('./shouldUpdateReactComponent');\nvar traverseAllChildren = require('./traverseAllChildren');\nvar warning = require('fbjs/lib/warning');\n\nvar ReactComponentTreeDevtool;\n\nif (typeof process !== 'undefined' && process.env && process.env.NODE_ENV === 'test') {\n  // Temporary hack.\n  // Inline requires don't work well with Jest:\n  // https://github.com/facebook/react/issues/7240\n  // Remove the inline requires when we don't need them anymore:\n  // https://github.com/facebook/react/pull/7178\n  ReactComponentTreeDevtool = require('./ReactComponentTreeDevtool');\n}\n\nfunction instantiateChild(childInstances, child, name, selfDebugID) {\n  // We found a component instance.\n  var keyUnique = childInstances[name] === undefined;\n  if (process.env.NODE_ENV !== 'production') {\n    if (!ReactComponentTreeDevtool) {\n      ReactComponentTreeDevtool = require('./ReactComponentTreeDevtool');\n    }\n    process.env.NODE_ENV !== 'production' ? warning(keyUnique, 'flattenChildren(...): Encountered two children with the same key, ' + '`%s`. Child keys must be unique; when two children share a key, only ' + 'the first child will be used.%s', KeyEscapeUtils.unescape(name), ReactComponentTreeDevtool.getStackAddendumByID(selfDebugID)) : void 0;\n  }\n  if (child != null && keyUnique) {\n    childInstances[name] = instantiateReactComponent(child, true);\n  }\n}\n\n/**\n * ReactChildReconciler provides helpers for initializing or updating a set of\n * children. Its output is suitable for passing it onto ReactMultiChild which\n * does diffed reordering and insertion.\n */\nvar ReactChildReconciler = {\n  /**\n   * Generates a \"mount image\" for each of the supplied children. In the case\n   * of `ReactDOMComponent`, a mount image is a string of markup.\n   *\n   * @param {?object} nestedChildNodes Nested child maps.\n   * @return {?object} A set of child instances.\n   * @internal\n   */\n  instantiateChildren: function (nestedChildNodes, transaction, context, selfDebugID // __DEV__ only\n  ) {\n    if (nestedChildNodes == null) {\n      return null;\n    }\n    var childInstances = {};\n\n    if (process.env.NODE_ENV !== 'production') {\n      traverseAllChildren(nestedChildNodes, function (childInsts, child, name) {\n        return instantiateChild(childInsts, child, name, selfDebugID);\n      }, childInstances);\n    } else {\n      traverseAllChildren(nestedChildNodes, instantiateChild, childInstances);\n    }\n    return childInstances;\n  },\n\n  /**\n   * Updates the rendered children and returns a new set of children.\n   *\n   * @param {?object} prevChildren Previously initialized set of children.\n   * @param {?object} nextChildren Flat child element maps.\n   * @param {ReactReconcileTransaction} transaction\n   * @param {object} context\n   * @return {?object} A new set of child instances.\n   * @internal\n   */\n  updateChildren: function (prevChildren, nextChildren, mountImages, removedNodes, transaction, hostParent, hostContainerInfo, context) {\n    // We currently don't have a way to track moves here but if we use iterators\n    // instead of for..in we can zip the iterators and check if an item has\n    // moved.\n    // TODO: If nothing has changed, return the prevChildren object so that we\n    // can quickly bailout if nothing has changed.\n    if (!nextChildren && !prevChildren) {\n      return;\n    }\n    var name;\n    var prevChild;\n    for (name in nextChildren) {\n      if (!nextChildren.hasOwnProperty(name)) {\n        continue;\n      }\n      prevChild = prevChildren && prevChildren[name];\n      var prevElement = prevChild && prevChild._currentElement;\n      var nextElement = nextChildren[name];\n      if (prevChild != null && shouldUpdateReactComponent(prevElement, nextElement)) {\n        ReactReconciler.receiveComponent(prevChild, nextElement, transaction, context);\n        nextChildren[name] = prevChild;\n      } else {\n        if (prevChild) {\n          removedNodes[name] = ReactReconciler.getHostNode(prevChild);\n          ReactReconciler.unmountComponent(prevChild, false);\n        }\n        // The child must be instantiated before it's mounted.\n        var nextChildInstance = instantiateReactComponent(nextElement, true);\n        nextChildren[name] = nextChildInstance;\n        // Creating mount image now ensures refs are resolved in right order\n        // (see https://github.com/facebook/react/pull/7101 for explanation).\n        var nextChildMountImage = ReactReconciler.mountComponent(nextChildInstance, transaction, hostParent, hostContainerInfo, context);\n        mountImages.push(nextChildMountImage);\n      }\n    }\n    // Unmount children that are no longer present.\n    for (name in prevChildren) {\n      if (prevChildren.hasOwnProperty(name) && !(nextChildren && nextChildren.hasOwnProperty(name))) {\n        prevChild = prevChildren[name];\n        removedNodes[name] = ReactReconciler.getHostNode(prevChild);\n        ReactReconciler.unmountComponent(prevChild, false);\n      }\n    }\n  },\n\n  /**\n   * Unmounts all rendered children. This should be used to clean up children\n   * when this component is unmounted.\n   *\n   * @param {?object} renderedChildren Previously initialized set of children.\n   * @internal\n   */\n  unmountChildren: function (renderedChildren, safely) {\n    for (var name in renderedChildren) {\n      if (renderedChildren.hasOwnProperty(name)) {\n        var renderedChild = renderedChildren[name];\n        ReactReconciler.unmountComponent(renderedChild, safely);\n      }\n    }\n  }\n\n};\n\nmodule.exports = ReactChildReconciler;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactChildReconciler.js\n ** module id = 127\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule instantiateReactComponent\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant'),\n    _assign = require('object-assign');\n\nvar ReactCompositeComponent = require('./ReactCompositeComponent');\nvar ReactEmptyComponent = require('./ReactEmptyComponent');\nvar ReactHostComponent = require('./ReactHostComponent');\nvar ReactInstrumentation = require('./ReactInstrumentation');\n\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\n// To avoid a cyclic dependency, we create the final class in this module\nvar ReactCompositeComponentWrapper = function (element) {\n  this.construct(element);\n};\n_assign(ReactCompositeComponentWrapper.prototype, ReactCompositeComponent.Mixin, {\n  _instantiateReactComponent: instantiateReactComponent\n});\n\nfunction getDeclarationErrorAddendum(owner) {\n  if (owner) {\n    var name = owner.getName();\n    if (name) {\n      return ' Check the render method of `' + name + '`.';\n    }\n  }\n  return '';\n}\n\nfunction getDisplayName(instance) {\n  var element = instance._currentElement;\n  if (element == null) {\n    return '#empty';\n  } else if (typeof element === 'string' || typeof element === 'number') {\n    return '#text';\n  } else if (typeof element.type === 'string') {\n    return element.type;\n  } else if (instance.getName) {\n    return instance.getName() || 'Unknown';\n  } else {\n    return element.type.displayName || element.type.name || 'Unknown';\n  }\n}\n\n/**\n * Check if the type reference is a known internal type. I.e. not a user\n * provided composite type.\n *\n * @param {function} type\n * @return {boolean} Returns true if this is a valid internal type.\n */\nfunction isInternalComponentType(type) {\n  return typeof type === 'function' && typeof type.prototype !== 'undefined' && typeof type.prototype.mountComponent === 'function' && typeof type.prototype.receiveComponent === 'function';\n}\n\nvar nextDebugID = 1;\n\n/**\n * Given a ReactNode, create an instance that will actually be mounted.\n *\n * @param {ReactNode} node\n * @param {boolean} shouldHaveDebugID\n * @return {object} A new instance of the element's constructor.\n * @protected\n */\nfunction instantiateReactComponent(node, shouldHaveDebugID) {\n  var instance;\n\n  if (node === null || node === false) {\n    instance = ReactEmptyComponent.create(instantiateReactComponent);\n  } else if (typeof node === 'object') {\n    var element = node;\n    !(element && (typeof element.type === 'function' || typeof element.type === 'string')) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s', element.type == null ? element.type : typeof element.type, getDeclarationErrorAddendum(element._owner)) : _prodInvariant('130', element.type == null ? element.type : typeof element.type, getDeclarationErrorAddendum(element._owner)) : void 0;\n\n    // Special case string values\n    if (typeof element.type === 'string') {\n      instance = ReactHostComponent.createInternalComponent(element);\n    } else if (isInternalComponentType(element.type)) {\n      // This is temporarily available for custom components that are not string\n      // representations. I.e. ART. Once those are updated to use the string\n      // representation, we can drop this code path.\n      instance = new element.type(element);\n\n      // We renamed this. Allow the old name for compat. :(\n      if (!instance.getHostNode) {\n        instance.getHostNode = instance.getNativeNode;\n      }\n    } else {\n      instance = new ReactCompositeComponentWrapper(element);\n    }\n  } else if (typeof node === 'string' || typeof node === 'number') {\n    instance = ReactHostComponent.createInstanceForText(node);\n  } else {\n    !false ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Encountered invalid React node of type %s', typeof node) : _prodInvariant('131', typeof node) : void 0;\n  }\n\n  if (process.env.NODE_ENV !== 'production') {\n    process.env.NODE_ENV !== 'production' ? warning(typeof instance.mountComponent === 'function' && typeof instance.receiveComponent === 'function' && typeof instance.getHostNode === 'function' && typeof instance.unmountComponent === 'function', 'Only React Components can be mounted.') : void 0;\n  }\n\n  // These two fields are used by the DOM and ART diffing algorithms\n  // respectively. Instead of using expandos on components, we should be\n  // storing the state needed by the diffing algorithms elsewhere.\n  instance._mountIndex = 0;\n  instance._mountImage = null;\n\n  if (process.env.NODE_ENV !== 'production') {\n    if (shouldHaveDebugID) {\n      var debugID = nextDebugID++;\n      instance._debugID = debugID;\n      var displayName = getDisplayName(instance);\n      ReactInstrumentation.debugTool.onSetDisplayName(debugID, displayName);\n      var owner = node && node._owner;\n      if (owner) {\n        ReactInstrumentation.debugTool.onSetOwner(debugID, owner._debugID);\n      }\n    } else {\n      instance._debugID = 0;\n    }\n  }\n\n  // Internal instances should fully constructed at this point, so they should\n  // not get any new fields added to them at this point.\n  if (process.env.NODE_ENV !== 'production') {\n    if (Object.preventExtensions) {\n      Object.preventExtensions(instance);\n    }\n  }\n\n  return instance;\n}\n\nmodule.exports = instantiateReactComponent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/instantiateReactComponent.js\n ** module id = 128\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactCompositeComponent\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant'),\n    _assign = require('object-assign');\n\nvar ReactComponentEnvironment = require('./ReactComponentEnvironment');\nvar ReactCurrentOwner = require('./ReactCurrentOwner');\nvar ReactElement = require('./ReactElement');\nvar ReactErrorUtils = require('./ReactErrorUtils');\nvar ReactInstanceMap = require('./ReactInstanceMap');\nvar ReactInstrumentation = require('./ReactInstrumentation');\nvar ReactNodeTypes = require('./ReactNodeTypes');\nvar ReactPropTypeLocations = require('./ReactPropTypeLocations');\nvar ReactReconciler = require('./ReactReconciler');\n\nvar checkReactTypeSpec = require('./checkReactTypeSpec');\nvar emptyObject = require('fbjs/lib/emptyObject');\nvar invariant = require('fbjs/lib/invariant');\nvar shallowEqual = require('fbjs/lib/shallowEqual');\nvar shouldUpdateReactComponent = require('./shouldUpdateReactComponent');\nvar warning = require('fbjs/lib/warning');\n\nvar CompositeTypes = {\n  ImpureClass: 0,\n  PureClass: 1,\n  StatelessFunctional: 2\n};\n\nfunction StatelessComponent(Component) {}\nStatelessComponent.prototype.render = function () {\n  var Component = ReactInstanceMap.get(this)._currentElement.type;\n  var element = Component(this.props, this.context, this.updater);\n  warnIfInvalidElement(Component, element);\n  return element;\n};\n\nfunction warnIfInvalidElement(Component, element) {\n  if (process.env.NODE_ENV !== 'production') {\n    process.env.NODE_ENV !== 'production' ? warning(element === null || element === false || ReactElement.isValidElement(element), '%s(...): A valid React element (or null) must be returned. You may have ' + 'returned undefined, an array or some other invalid object.', Component.displayName || Component.name || 'Component') : void 0;\n    process.env.NODE_ENV !== 'production' ? warning(!Component.childContextTypes, '%s(...): childContextTypes cannot be defined on a functional component.', Component.displayName || Component.name || 'Component') : void 0;\n  }\n}\n\nfunction invokeComponentDidMountWithTimer() {\n  var publicInstance = this._instance;\n  if (this._debugID !== 0) {\n    ReactInstrumentation.debugTool.onBeginLifeCycleTimer(this._debugID, 'componentDidMount');\n  }\n  publicInstance.componentDidMount();\n  if (this._debugID !== 0) {\n    ReactInstrumentation.debugTool.onEndLifeCycleTimer(this._debugID, 'componentDidMount');\n  }\n}\n\nfunction invokeComponentDidUpdateWithTimer(prevProps, prevState, prevContext) {\n  var publicInstance = this._instance;\n  if (this._debugID !== 0) {\n    ReactInstrumentation.debugTool.onBeginLifeCycleTimer(this._debugID, 'componentDidUpdate');\n  }\n  publicInstance.componentDidUpdate(prevProps, prevState, prevContext);\n  if (this._debugID !== 0) {\n    ReactInstrumentation.debugTool.onEndLifeCycleTimer(this._debugID, 'componentDidUpdate');\n  }\n}\n\nfunction shouldConstruct(Component) {\n  return !!(Component.prototype && Component.prototype.isReactComponent);\n}\n\nfunction isPureComponent(Component) {\n  return !!(Component.prototype && Component.prototype.isPureReactComponent);\n}\n\n/**\n * ------------------ The Life-Cycle of a Composite Component ------------------\n *\n * - constructor: Initialization of state. The instance is now retained.\n *   - componentWillMount\n *   - render\n *   - [children's constructors]\n *     - [children's componentWillMount and render]\n *     - [children's componentDidMount]\n *     - componentDidMount\n *\n *       Update Phases:\n *       - componentWillReceiveProps (only called if parent updated)\n *       - shouldComponentUpdate\n *         - componentWillUpdate\n *           - render\n *           - [children's constructors or receive props phases]\n *         - componentDidUpdate\n *\n *     - componentWillUnmount\n *     - [children's componentWillUnmount]\n *   - [children destroyed]\n * - (destroyed): The instance is now blank, released by React and ready for GC.\n *\n * -----------------------------------------------------------------------------\n */\n\n/**\n * An incrementing ID assigned to each component when it is mounted. This is\n * used to enforce the order in which `ReactUpdates` updates dirty components.\n *\n * @private\n */\nvar nextMountID = 1;\n\n/**\n * @lends {ReactCompositeComponent.prototype}\n */\nvar ReactCompositeComponentMixin = {\n\n  /**\n   * Base constructor for all composite component.\n   *\n   * @param {ReactElement} element\n   * @final\n   * @internal\n   */\n  construct: function (element) {\n    this._currentElement = element;\n    this._rootNodeID = null;\n    this._compositeType = null;\n    this._instance = null;\n    this._hostParent = null;\n    this._hostContainerInfo = null;\n\n    // See ReactUpdateQueue\n    this._updateBatchNumber = null;\n    this._pendingElement = null;\n    this._pendingStateQueue = null;\n    this._pendingReplaceState = false;\n    this._pendingForceUpdate = false;\n\n    this._renderedNodeType = null;\n    this._renderedComponent = null;\n    this._context = null;\n    this._mountOrder = 0;\n    this._topLevelWrapper = null;\n\n    // See ReactUpdates and ReactUpdateQueue.\n    this._pendingCallbacks = null;\n\n    // ComponentWillUnmount shall only be called once\n    this._calledComponentWillUnmount = false;\n\n    if (process.env.NODE_ENV !== 'production') {\n      this._warnedAboutRefsInRender = false;\n    }\n  },\n\n  /**\n   * Initializes the component, renders markup, and registers event listeners.\n   *\n   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\n   * @param {?object} hostParent\n   * @param {?object} hostContainerInfo\n   * @param {?object} context\n   * @return {?string} Rendered markup to be inserted into the DOM.\n   * @final\n   * @internal\n   */\n  mountComponent: function (transaction, hostParent, hostContainerInfo, context) {\n    var _this = this;\n\n    this._context = context;\n    this._mountOrder = nextMountID++;\n    this._hostParent = hostParent;\n    this._hostContainerInfo = hostContainerInfo;\n\n    var publicProps = this._currentElement.props;\n    var publicContext = this._processContext(context);\n\n    var Component = this._currentElement.type;\n\n    var updateQueue = transaction.getUpdateQueue();\n\n    // Initialize the public class\n    var doConstruct = shouldConstruct(Component);\n    var inst = this._constructComponent(doConstruct, publicProps, publicContext, updateQueue);\n    var renderedElement;\n\n    // Support functional components\n    if (!doConstruct && (inst == null || inst.render == null)) {\n      renderedElement = inst;\n      warnIfInvalidElement(Component, renderedElement);\n      !(inst === null || inst === false || ReactElement.isValidElement(inst)) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s(...): A valid React element (or null) must be returned. You may have returned undefined, an array or some other invalid object.', Component.displayName || Component.name || 'Component') : _prodInvariant('105', Component.displayName || Component.name || 'Component') : void 0;\n      inst = new StatelessComponent(Component);\n      this._compositeType = CompositeTypes.StatelessFunctional;\n    } else {\n      if (isPureComponent(Component)) {\n        this._compositeType = CompositeTypes.PureClass;\n      } else {\n        this._compositeType = CompositeTypes.ImpureClass;\n      }\n    }\n\n    if (process.env.NODE_ENV !== 'production') {\n      // This will throw later in _renderValidatedComponent, but add an early\n      // warning now to help debugging\n      if (inst.render == null) {\n        process.env.NODE_ENV !== 'production' ? warning(false, '%s(...): No `render` method found on the returned component ' + 'instance: you may have forgotten to define `render`.', Component.displayName || Component.name || 'Component') : void 0;\n      }\n\n      var propsMutated = inst.props !== publicProps;\n      var componentName = Component.displayName || Component.name || 'Component';\n\n      process.env.NODE_ENV !== 'production' ? warning(inst.props === undefined || !propsMutated, '%s(...): When calling super() in `%s`, make sure to pass ' + 'up the same props that your component\\'s constructor was passed.', componentName, componentName) : void 0;\n    }\n\n    // These should be set up in the constructor, but as a convenience for\n    // simpler class abstractions, we set them up after the fact.\n    inst.props = publicProps;\n    inst.context = publicContext;\n    inst.refs = emptyObject;\n    inst.updater = updateQueue;\n\n    this._instance = inst;\n\n    // Store a reference from the instance back to the internal representation\n    ReactInstanceMap.set(inst, this);\n\n    if (process.env.NODE_ENV !== 'production') {\n      // Since plain JS classes are defined without any special initialization\n      // logic, we can not catch common errors early. Therefore, we have to\n      // catch them here, at initialization time, instead.\n      process.env.NODE_ENV !== 'production' ? warning(!inst.getInitialState || inst.getInitialState.isReactClassApproved, 'getInitialState was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Did you mean to define a state property instead?', this.getName() || 'a component') : void 0;\n      process.env.NODE_ENV !== 'production' ? warning(!inst.getDefaultProps || inst.getDefaultProps.isReactClassApproved, 'getDefaultProps was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Use a static property to define defaultProps instead.', this.getName() || 'a component') : void 0;\n      process.env.NODE_ENV !== 'production' ? warning(!inst.propTypes, 'propTypes was defined as an instance property on %s. Use a static ' + 'property to define propTypes instead.', this.getName() || 'a component') : void 0;\n      process.env.NODE_ENV !== 'production' ? warning(!inst.contextTypes, 'contextTypes was defined as an instance property on %s. Use a ' + 'static property to define contextTypes instead.', this.getName() || 'a component') : void 0;\n      process.env.NODE_ENV !== 'production' ? warning(typeof inst.componentShouldUpdate !== 'function', '%s has a method called ' + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 'The name is phrased as a question because the function is ' + 'expected to return a value.', this.getName() || 'A component') : void 0;\n      process.env.NODE_ENV !== 'production' ? warning(typeof inst.componentDidUnmount !== 'function', '%s has a method called ' + 'componentDidUnmount(). But there is no such lifecycle method. ' + 'Did you mean componentWillUnmount()?', this.getName() || 'A component') : void 0;\n      process.env.NODE_ENV !== 'production' ? warning(typeof inst.componentWillRecieveProps !== 'function', '%s has a method called ' + 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?', this.getName() || 'A component') : void 0;\n    }\n\n    var initialState = inst.state;\n    if (initialState === undefined) {\n      inst.state = initialState = null;\n    }\n    !(typeof initialState === 'object' && !Array.isArray(initialState)) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.state: must be set to an object or null', this.getName() || 'ReactCompositeComponent') : _prodInvariant('106', this.getName() || 'ReactCompositeComponent') : void 0;\n\n    this._pendingStateQueue = null;\n    this._pendingReplaceState = false;\n    this._pendingForceUpdate = false;\n\n    var markup;\n    if (inst.unstable_handleError) {\n      markup = this.performInitialMountWithErrorHandling(renderedElement, hostParent, hostContainerInfo, transaction, context);\n    } else {\n      markup = this.performInitialMount(renderedElement, hostParent, hostContainerInfo, transaction, context);\n    }\n\n    if (inst.componentDidMount) {\n      if (process.env.NODE_ENV !== 'production') {\n        transaction.getReactMountReady().enqueue(invokeComponentDidMountWithTimer, this);\n      } else {\n        transaction.getReactMountReady().enqueue(inst.componentDidMount, inst);\n      }\n    }\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (this._debugID) {\n        var callback = function (component) {\n          return ReactInstrumentation.debugTool.onComponentHasMounted(_this._debugID);\n        };\n        transaction.getReactMountReady().enqueue(callback, this);\n      }\n    }\n\n    return markup;\n  },\n\n  _constructComponent: function (doConstruct, publicProps, publicContext, updateQueue) {\n    if (process.env.NODE_ENV !== 'production') {\n      ReactCurrentOwner.current = this;\n      try {\n        return this._constructComponentWithoutOwner(doConstruct, publicProps, publicContext, updateQueue);\n      } finally {\n        ReactCurrentOwner.current = null;\n      }\n    } else {\n      return this._constructComponentWithoutOwner(doConstruct, publicProps, publicContext, updateQueue);\n    }\n  },\n\n  _constructComponentWithoutOwner: function (doConstruct, publicProps, publicContext, updateQueue) {\n    var Component = this._currentElement.type;\n    var instanceOrElement;\n    if (doConstruct) {\n      if (process.env.NODE_ENV !== 'production') {\n        if (this._debugID !== 0) {\n          ReactInstrumentation.debugTool.onBeginLifeCycleTimer(this._debugID, 'ctor');\n        }\n      }\n      instanceOrElement = new Component(publicProps, publicContext, updateQueue);\n      if (process.env.NODE_ENV !== 'production') {\n        if (this._debugID !== 0) {\n          ReactInstrumentation.debugTool.onEndLifeCycleTimer(this._debugID, 'ctor');\n        }\n      }\n    } else {\n      // This can still be an instance in case of factory components\n      // but we'll count this as time spent rendering as the more common case.\n      if (process.env.NODE_ENV !== 'production') {\n        if (this._debugID !== 0) {\n          ReactInstrumentation.debugTool.onBeginLifeCycleTimer(this._debugID, 'render');\n        }\n      }\n      instanceOrElement = Component(publicProps, publicContext, updateQueue);\n      if (process.env.NODE_ENV !== 'production') {\n        if (this._debugID !== 0) {\n          ReactInstrumentation.debugTool.onEndLifeCycleTimer(this._debugID, 'render');\n        }\n      }\n    }\n    return instanceOrElement;\n  },\n\n  performInitialMountWithErrorHandling: function (renderedElement, hostParent, hostContainerInfo, transaction, context) {\n    var markup;\n    var checkpoint = transaction.checkpoint();\n    try {\n      markup = this.performInitialMount(renderedElement, hostParent, hostContainerInfo, transaction, context);\n    } catch (e) {\n      if (process.env.NODE_ENV !== 'production') {\n        if (this._debugID !== 0) {\n          ReactInstrumentation.debugTool.onError();\n        }\n      }\n      // Roll back to checkpoint, handle error (which may add items to the transaction), and take a new checkpoint\n      transaction.rollback(checkpoint);\n      this._instance.unstable_handleError(e);\n      if (this._pendingStateQueue) {\n        this._instance.state = this._processPendingState(this._instance.props, this._instance.context);\n      }\n      checkpoint = transaction.checkpoint();\n\n      this._renderedComponent.unmountComponent(true);\n      transaction.rollback(checkpoint);\n\n      // Try again - we've informed the component about the error, so they can render an error message this time.\n      // If this throws again, the error will bubble up (and can be caught by a higher error boundary).\n      markup = this.performInitialMount(renderedElement, hostParent, hostContainerInfo, transaction, context);\n    }\n    return markup;\n  },\n\n  performInitialMount: function (renderedElement, hostParent, hostContainerInfo, transaction, context) {\n    var inst = this._instance;\n    if (inst.componentWillMount) {\n      if (process.env.NODE_ENV !== 'production') {\n        if (this._debugID !== 0) {\n          ReactInstrumentation.debugTool.onBeginLifeCycleTimer(this._debugID, 'componentWillMount');\n        }\n      }\n      inst.componentWillMount();\n      if (process.env.NODE_ENV !== 'production') {\n        if (this._debugID !== 0) {\n          ReactInstrumentation.debugTool.onEndLifeCycleTimer(this._debugID, 'componentWillMount');\n        }\n      }\n      // When mounting, calls to `setState` by `componentWillMount` will set\n      // `this._pendingStateQueue` without triggering a re-render.\n      if (this._pendingStateQueue) {\n        inst.state = this._processPendingState(inst.props, inst.context);\n      }\n    }\n\n    // If not a stateless component, we now render\n    if (renderedElement === undefined) {\n      renderedElement = this._renderValidatedComponent();\n    }\n\n    var nodeType = ReactNodeTypes.getType(renderedElement);\n    this._renderedNodeType = nodeType;\n    var child = this._instantiateReactComponent(renderedElement, nodeType !== ReactNodeTypes.EMPTY /* shouldHaveDebugID */\n    );\n    this._renderedComponent = child;\n    if (process.env.NODE_ENV !== 'production') {\n      if (child._debugID !== 0 && this._debugID !== 0) {\n        ReactInstrumentation.debugTool.onSetParent(child._debugID, this._debugID);\n      }\n    }\n\n    var markup = ReactReconciler.mountComponent(child, transaction, hostParent, hostContainerInfo, this._processChildContext(context));\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (this._debugID !== 0) {\n        ReactInstrumentation.debugTool.onSetChildren(this._debugID, child._debugID !== 0 ? [child._debugID] : []);\n      }\n    }\n\n    return markup;\n  },\n\n  getHostNode: function () {\n    return ReactReconciler.getHostNode(this._renderedComponent);\n  },\n\n  /**\n   * Releases any resources allocated by `mountComponent`.\n   *\n   * @final\n   * @internal\n   */\n  unmountComponent: function (safely) {\n    if (!this._renderedComponent) {\n      return;\n    }\n    var inst = this._instance;\n\n    if (inst.componentWillUnmount && !inst._calledComponentWillUnmount) {\n      inst._calledComponentWillUnmount = true;\n      if (process.env.NODE_ENV !== 'production') {\n        if (this._debugID !== 0) {\n          ReactInstrumentation.debugTool.onBeginLifeCycleTimer(this._debugID, 'componentWillUnmount');\n        }\n      }\n      if (safely) {\n        var name = this.getName() + '.componentWillUnmount()';\n        ReactErrorUtils.invokeGuardedCallback(name, inst.componentWillUnmount.bind(inst));\n      } else {\n        inst.componentWillUnmount();\n      }\n      if (process.env.NODE_ENV !== 'production') {\n        if (this._debugID !== 0) {\n          ReactInstrumentation.debugTool.onEndLifeCycleTimer(this._debugID, 'componentWillUnmount');\n        }\n      }\n    }\n\n    if (this._renderedComponent) {\n      ReactReconciler.unmountComponent(this._renderedComponent, safely);\n      this._renderedNodeType = null;\n      this._renderedComponent = null;\n      this._instance = null;\n    }\n\n    // Reset pending fields\n    // Even if this component is scheduled for another update in ReactUpdates,\n    // it would still be ignored because these fields are reset.\n    this._pendingStateQueue = null;\n    this._pendingReplaceState = false;\n    this._pendingForceUpdate = false;\n    this._pendingCallbacks = null;\n    this._pendingElement = null;\n\n    // These fields do not really need to be reset since this object is no\n    // longer accessible.\n    this._context = null;\n    this._rootNodeID = null;\n    this._topLevelWrapper = null;\n\n    // Delete the reference from the instance to this internal representation\n    // which allow the internals to be properly cleaned up even if the user\n    // leaks a reference to the public instance.\n    ReactInstanceMap.remove(inst);\n\n    // Some existing components rely on inst.props even after they've been\n    // destroyed (in event handlers).\n    // TODO: inst.props = null;\n    // TODO: inst.state = null;\n    // TODO: inst.context = null;\n  },\n\n  /**\n   * Filters the context object to only contain keys specified in\n   * `contextTypes`\n   *\n   * @param {object} context\n   * @return {?object}\n   * @private\n   */\n  _maskContext: function (context) {\n    var Component = this._currentElement.type;\n    var contextTypes = Component.contextTypes;\n    if (!contextTypes) {\n      return emptyObject;\n    }\n    var maskedContext = {};\n    for (var contextName in contextTypes) {\n      maskedContext[contextName] = context[contextName];\n    }\n    return maskedContext;\n  },\n\n  /**\n   * Filters the context object to only contain keys specified in\n   * `contextTypes`, and asserts that they are valid.\n   *\n   * @param {object} context\n   * @return {?object}\n   * @private\n   */\n  _processContext: function (context) {\n    var maskedContext = this._maskContext(context);\n    if (process.env.NODE_ENV !== 'production') {\n      var Component = this._currentElement.type;\n      if (Component.contextTypes) {\n        this._checkContextTypes(Component.contextTypes, maskedContext, ReactPropTypeLocations.context);\n      }\n    }\n    return maskedContext;\n  },\n\n  /**\n   * @param {object} currentContext\n   * @return {object}\n   * @private\n   */\n  _processChildContext: function (currentContext) {\n    var Component = this._currentElement.type;\n    var inst = this._instance;\n    if (process.env.NODE_ENV !== 'production') {\n      ReactInstrumentation.debugTool.onBeginProcessingChildContext();\n    }\n    var childContext = inst.getChildContext && inst.getChildContext();\n    if (process.env.NODE_ENV !== 'production') {\n      ReactInstrumentation.debugTool.onEndProcessingChildContext();\n    }\n    if (childContext) {\n      !(typeof Component.childContextTypes === 'object') ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.getChildContext(): childContextTypes must be defined in order to use getChildContext().', this.getName() || 'ReactCompositeComponent') : _prodInvariant('107', this.getName() || 'ReactCompositeComponent') : void 0;\n      if (process.env.NODE_ENV !== 'production') {\n        this._checkContextTypes(Component.childContextTypes, childContext, ReactPropTypeLocations.childContext);\n      }\n      for (var name in childContext) {\n        !(name in Component.childContextTypes) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.getChildContext(): key \"%s\" is not defined in childContextTypes.', this.getName() || 'ReactCompositeComponent', name) : _prodInvariant('108', this.getName() || 'ReactCompositeComponent', name) : void 0;\n      }\n      return _assign({}, currentContext, childContext);\n    }\n    return currentContext;\n  },\n\n  /**\n   * Assert that the context types are valid\n   *\n   * @param {object} typeSpecs Map of context field to a ReactPropType\n   * @param {object} values Runtime values that need to be type-checked\n   * @param {string} location e.g. \"prop\", \"context\", \"child context\"\n   * @private\n   */\n  _checkContextTypes: function (typeSpecs, values, location) {\n    checkReactTypeSpec(typeSpecs, values, location, this.getName(), null, this._debugID);\n  },\n\n  receiveComponent: function (nextElement, transaction, nextContext) {\n    var prevElement = this._currentElement;\n    var prevContext = this._context;\n\n    this._pendingElement = null;\n\n    this.updateComponent(transaction, prevElement, nextElement, prevContext, nextContext);\n  },\n\n  /**\n   * If any of `_pendingElement`, `_pendingStateQueue`, or `_pendingForceUpdate`\n   * is set, update the component.\n   *\n   * @param {ReactReconcileTransaction} transaction\n   * @internal\n   */\n  performUpdateIfNecessary: function (transaction) {\n    if (this._pendingElement != null) {\n      ReactReconciler.receiveComponent(this, this._pendingElement, transaction, this._context);\n    } else if (this._pendingStateQueue !== null || this._pendingForceUpdate) {\n      this.updateComponent(transaction, this._currentElement, this._currentElement, this._context, this._context);\n    } else {\n      this._updateBatchNumber = null;\n    }\n  },\n\n  /**\n   * Perform an update to a mounted component. The componentWillReceiveProps and\n   * shouldComponentUpdate methods are called, then (assuming the update isn't\n   * skipped) the remaining update lifecycle methods are called and the DOM\n   * representation is updated.\n   *\n   * By default, this implements React's rendering and reconciliation algorithm.\n   * Sophisticated clients may wish to override this.\n   *\n   * @param {ReactReconcileTransaction} transaction\n   * @param {ReactElement} prevParentElement\n   * @param {ReactElement} nextParentElement\n   * @internal\n   * @overridable\n   */\n  updateComponent: function (transaction, prevParentElement, nextParentElement, prevUnmaskedContext, nextUnmaskedContext) {\n    var inst = this._instance;\n    !(inst != null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Attempted to update component `%s` that has already been unmounted (or failed to mount).', this.getName() || 'ReactCompositeComponent') : _prodInvariant('136', this.getName() || 'ReactCompositeComponent') : void 0;\n\n    var willReceive = false;\n    var nextContext;\n\n    // Determine if the context has changed or not\n    if (this._context === nextUnmaskedContext) {\n      nextContext = inst.context;\n    } else {\n      nextContext = this._processContext(nextUnmaskedContext);\n      willReceive = true;\n    }\n\n    var prevProps = prevParentElement.props;\n    var nextProps = nextParentElement.props;\n\n    // Not a simple state update but a props update\n    if (prevParentElement !== nextParentElement) {\n      willReceive = true;\n    }\n\n    // An update here will schedule an update but immediately set\n    // _pendingStateQueue which will ensure that any state updates gets\n    // immediately reconciled instead of waiting for the next batch.\n    if (willReceive && inst.componentWillReceiveProps) {\n      if (process.env.NODE_ENV !== 'production') {\n        if (this._debugID !== 0) {\n          ReactInstrumentation.debugTool.onBeginLifeCycleTimer(this._debugID, 'componentWillReceiveProps');\n        }\n      }\n      inst.componentWillReceiveProps(nextProps, nextContext);\n      if (process.env.NODE_ENV !== 'production') {\n        if (this._debugID !== 0) {\n          ReactInstrumentation.debugTool.onEndLifeCycleTimer(this._debugID, 'componentWillReceiveProps');\n        }\n      }\n    }\n\n    var nextState = this._processPendingState(nextProps, nextContext);\n    var shouldUpdate = true;\n\n    if (!this._pendingForceUpdate) {\n      if (inst.shouldComponentUpdate) {\n        if (process.env.NODE_ENV !== 'production') {\n          if (this._debugID !== 0) {\n            ReactInstrumentation.debugTool.onBeginLifeCycleTimer(this._debugID, 'shouldComponentUpdate');\n          }\n        }\n        shouldUpdate = inst.shouldComponentUpdate(nextProps, nextState, nextContext);\n        if (process.env.NODE_ENV !== 'production') {\n          if (this._debugID !== 0) {\n            ReactInstrumentation.debugTool.onEndLifeCycleTimer(this._debugID, 'shouldComponentUpdate');\n          }\n        }\n      } else {\n        if (this._compositeType === CompositeTypes.PureClass) {\n          shouldUpdate = !shallowEqual(prevProps, nextProps) || !shallowEqual(inst.state, nextState);\n        }\n      }\n    }\n\n    if (process.env.NODE_ENV !== 'production') {\n      process.env.NODE_ENV !== 'production' ? warning(shouldUpdate !== undefined, '%s.shouldComponentUpdate(): Returned undefined instead of a ' + 'boolean value. Make sure to return true or false.', this.getName() || 'ReactCompositeComponent') : void 0;\n    }\n\n    this._updateBatchNumber = null;\n    if (shouldUpdate) {\n      this._pendingForceUpdate = false;\n      // Will set `this.props`, `this.state` and `this.context`.\n      this._performComponentUpdate(nextParentElement, nextProps, nextState, nextContext, transaction, nextUnmaskedContext);\n    } else {\n      // If it's determined that a component should not update, we still want\n      // to set props and state but we shortcut the rest of the update.\n      this._currentElement = nextParentElement;\n      this._context = nextUnmaskedContext;\n      inst.props = nextProps;\n      inst.state = nextState;\n      inst.context = nextContext;\n    }\n  },\n\n  _processPendingState: function (props, context) {\n    var inst = this._instance;\n    var queue = this._pendingStateQueue;\n    var replace = this._pendingReplaceState;\n    this._pendingReplaceState = false;\n    this._pendingStateQueue = null;\n\n    if (!queue) {\n      return inst.state;\n    }\n\n    if (replace && queue.length === 1) {\n      return queue[0];\n    }\n\n    var nextState = _assign({}, replace ? queue[0] : inst.state);\n    for (var i = replace ? 1 : 0; i < queue.length; i++) {\n      var partial = queue[i];\n      _assign(nextState, typeof partial === 'function' ? partial.call(inst, nextState, props, context) : partial);\n    }\n\n    return nextState;\n  },\n\n  /**\n   * Merges new props and state, notifies delegate methods of update and\n   * performs update.\n   *\n   * @param {ReactElement} nextElement Next element\n   * @param {object} nextProps Next public object to set as properties.\n   * @param {?object} nextState Next object to set as state.\n   * @param {?object} nextContext Next public object to set as context.\n   * @param {ReactReconcileTransaction} transaction\n   * @param {?object} unmaskedContext\n   * @private\n   */\n  _performComponentUpdate: function (nextElement, nextProps, nextState, nextContext, transaction, unmaskedContext) {\n    var _this2 = this;\n\n    var inst = this._instance;\n\n    var hasComponentDidUpdate = Boolean(inst.componentDidUpdate);\n    var prevProps;\n    var prevState;\n    var prevContext;\n    if (hasComponentDidUpdate) {\n      prevProps = inst.props;\n      prevState = inst.state;\n      prevContext = inst.context;\n    }\n\n    if (inst.componentWillUpdate) {\n      if (process.env.NODE_ENV !== 'production') {\n        if (this._debugID !== 0) {\n          ReactInstrumentation.debugTool.onBeginLifeCycleTimer(this._debugID, 'componentWillUpdate');\n        }\n      }\n      inst.componentWillUpdate(nextProps, nextState, nextContext);\n      if (process.env.NODE_ENV !== 'production') {\n        if (this._debugID !== 0) {\n          ReactInstrumentation.debugTool.onEndLifeCycleTimer(this._debugID, 'componentWillUpdate');\n        }\n      }\n    }\n\n    this._currentElement = nextElement;\n    this._context = unmaskedContext;\n    inst.props = nextProps;\n    inst.state = nextState;\n    inst.context = nextContext;\n\n    this._updateRenderedComponent(transaction, unmaskedContext);\n\n    if (hasComponentDidUpdate) {\n      if (process.env.NODE_ENV !== 'production') {\n        transaction.getReactMountReady().enqueue(invokeComponentDidUpdateWithTimer.bind(this, prevProps, prevState, prevContext), this);\n      } else {\n        transaction.getReactMountReady().enqueue(inst.componentDidUpdate.bind(inst, prevProps, prevState, prevContext), inst);\n      }\n    }\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (this._debugID) {\n        var callback = function () {\n          return ReactInstrumentation.debugTool.onComponentHasUpdated(_this2._debugID);\n        };\n        transaction.getReactMountReady().enqueue(callback, this);\n      }\n    }\n  },\n\n  /**\n   * Call the component's `render` method and update the DOM accordingly.\n   *\n   * @param {ReactReconcileTransaction} transaction\n   * @internal\n   */\n  _updateRenderedComponent: function (transaction, context) {\n    var prevComponentInstance = this._renderedComponent;\n    var prevRenderedElement = prevComponentInstance._currentElement;\n    var nextRenderedElement = this._renderValidatedComponent();\n    if (shouldUpdateReactComponent(prevRenderedElement, nextRenderedElement)) {\n      ReactReconciler.receiveComponent(prevComponentInstance, nextRenderedElement, transaction, this._processChildContext(context));\n    } else {\n      var oldHostNode = ReactReconciler.getHostNode(prevComponentInstance);\n      ReactReconciler.unmountComponent(prevComponentInstance, false);\n\n      var nodeType = ReactNodeTypes.getType(nextRenderedElement);\n      this._renderedNodeType = nodeType;\n      var child = this._instantiateReactComponent(nextRenderedElement, nodeType !== ReactNodeTypes.EMPTY /* shouldHaveDebugID */\n      );\n      this._renderedComponent = child;\n      if (process.env.NODE_ENV !== 'production') {\n        if (child._debugID !== 0 && this._debugID !== 0) {\n          ReactInstrumentation.debugTool.onSetParent(child._debugID, this._debugID);\n        }\n      }\n\n      var nextMarkup = ReactReconciler.mountComponent(child, transaction, this._hostParent, this._hostContainerInfo, this._processChildContext(context));\n\n      if (process.env.NODE_ENV !== 'production') {\n        if (this._debugID !== 0) {\n          ReactInstrumentation.debugTool.onSetChildren(this._debugID, child._debugID !== 0 ? [child._debugID] : []);\n        }\n      }\n\n      this._replaceNodeWithMarkup(oldHostNode, nextMarkup, prevComponentInstance);\n    }\n  },\n\n  /**\n   * Overridden in shallow rendering.\n   *\n   * @protected\n   */\n  _replaceNodeWithMarkup: function (oldHostNode, nextMarkup, prevInstance) {\n    ReactComponentEnvironment.replaceNodeWithMarkup(oldHostNode, nextMarkup, prevInstance);\n  },\n\n  /**\n   * @protected\n   */\n  _renderValidatedComponentWithoutOwnerOrContext: function () {\n    var inst = this._instance;\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (this._debugID !== 0) {\n        ReactInstrumentation.debugTool.onBeginLifeCycleTimer(this._debugID, 'render');\n      }\n    }\n    var renderedComponent = inst.render();\n    if (process.env.NODE_ENV !== 'production') {\n      if (this._debugID !== 0) {\n        ReactInstrumentation.debugTool.onEndLifeCycleTimer(this._debugID, 'render');\n      }\n    }\n\n    if (process.env.NODE_ENV !== 'production') {\n      // We allow auto-mocks to proceed as if they're returning null.\n      if (renderedComponent === undefined && inst.render._isMockFunction) {\n        // This is probably bad practice. Consider warning here and\n        // deprecating this convenience.\n        renderedComponent = null;\n      }\n    }\n\n    return renderedComponent;\n  },\n\n  /**\n   * @private\n   */\n  _renderValidatedComponent: function () {\n    var renderedComponent;\n    if (process.env.NODE_ENV !== 'production' || this._compositeType !== CompositeTypes.StatelessFunctional) {\n      ReactCurrentOwner.current = this;\n      try {\n        renderedComponent = this._renderValidatedComponentWithoutOwnerOrContext();\n      } finally {\n        ReactCurrentOwner.current = null;\n      }\n    } else {\n      renderedComponent = this._renderValidatedComponentWithoutOwnerOrContext();\n    }\n    !(\n    // TODO: An `isValidNode` function would probably be more appropriate\n    renderedComponent === null || renderedComponent === false || ReactElement.isValidElement(renderedComponent)) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.render(): A valid React element (or null) must be returned. You may have returned undefined, an array or some other invalid object.', this.getName() || 'ReactCompositeComponent') : _prodInvariant('109', this.getName() || 'ReactCompositeComponent') : void 0;\n\n    return renderedComponent;\n  },\n\n  /**\n   * Lazily allocates the refs object and stores `component` as `ref`.\n   *\n   * @param {string} ref Reference name.\n   * @param {component} component Component to store as `ref`.\n   * @final\n   * @private\n   */\n  attachRef: function (ref, component) {\n    var inst = this.getPublicInstance();\n    !(inst != null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Stateless function components cannot have refs.') : _prodInvariant('110') : void 0;\n    var publicComponentInstance = component.getPublicInstance();\n    if (process.env.NODE_ENV !== 'production') {\n      var componentName = component && component.getName ? component.getName() : 'a component';\n      process.env.NODE_ENV !== 'production' ? warning(publicComponentInstance != null, 'Stateless function components cannot be given refs ' + '(See ref \"%s\" in %s created by %s). ' + 'Attempts to access this ref will fail.', ref, componentName, this.getName()) : void 0;\n    }\n    var refs = inst.refs === emptyObject ? inst.refs = {} : inst.refs;\n    refs[ref] = publicComponentInstance;\n  },\n\n  /**\n   * Detaches a reference name.\n   *\n   * @param {string} ref Name to dereference.\n   * @final\n   * @private\n   */\n  detachRef: function (ref) {\n    var refs = this.getPublicInstance().refs;\n    delete refs[ref];\n  },\n\n  /**\n   * Get a text description of the component that can be used to identify it\n   * in error messages.\n   * @return {string} The name or null.\n   * @internal\n   */\n  getName: function () {\n    var type = this._currentElement.type;\n    var constructor = this._instance && this._instance.constructor;\n    return type.displayName || constructor && constructor.displayName || type.name || constructor && constructor.name || null;\n  },\n\n  /**\n   * Get the publicly accessible representation of this component - i.e. what\n   * is exposed by refs and returned by render. Can be null for stateless\n   * components.\n   *\n   * @return {ReactComponent} the public component instance.\n   * @internal\n   */\n  getPublicInstance: function () {\n    var inst = this._instance;\n    if (this._compositeType === CompositeTypes.StatelessFunctional) {\n      return null;\n    }\n    return inst;\n  },\n\n  // Stub\n  _instantiateReactComponent: null\n\n};\n\nvar ReactCompositeComponent = {\n\n  Mixin: ReactCompositeComponentMixin\n\n};\n\nmodule.exports = ReactCompositeComponent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactCompositeComponent.js\n ** module id = 129\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactNodeTypes\n * \n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar ReactElement = require('./ReactElement');\n\nvar invariant = require('fbjs/lib/invariant');\n\nvar ReactNodeTypes = {\n  HOST: 0,\n  COMPOSITE: 1,\n  EMPTY: 2,\n\n  getType: function (node) {\n    if (node === null || node === false) {\n      return ReactNodeTypes.EMPTY;\n    } else if (ReactElement.isValidElement(node)) {\n      if (typeof node.type === 'function') {\n        return ReactNodeTypes.COMPOSITE;\n      } else {\n        return ReactNodeTypes.HOST;\n      }\n    }\n    !false ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Unexpected node: %s', node) : _prodInvariant('26', node) : void 0;\n  }\n};\n\nmodule.exports = ReactNodeTypes;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactNodeTypes.js\n ** module id = 130\n ** module chunks = 4\n **/","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @typechecks\n * \n */\n\n/*eslint-disable no-self-compare */\n\n'use strict';\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\n/**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\nfunction is(x, y) {\n  // SameValue algorithm\n  if (x === y) {\n    // Steps 1-5, 7-10\n    // Steps 6.b-6.e: +0 != -0\n    return x !== 0 || 1 / x === 1 / y;\n  } else {\n    // Step 6.a: NaN == NaN\n    return x !== x && y !== y;\n  }\n}\n\n/**\n * Performs equality by iterating through keys on an object and returning false\n * when any key has values which are not strictly equal between the arguments.\n * Returns true when the values of all keys are strictly equal.\n */\nfunction shallowEqual(objA, objB) {\n  if (is(objA, objB)) {\n    return true;\n  }\n\n  if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {\n    return false;\n  }\n\n  var keysA = Object.keys(objA);\n  var keysB = Object.keys(objB);\n\n  if (keysA.length !== keysB.length) {\n    return false;\n  }\n\n  // Test for A's keys different from B.\n  for (var i = 0; i < keysA.length; i++) {\n    if (!hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nmodule.exports = shallowEqual;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/fbjs/lib/shallowEqual.js\n ** module id = 131\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule shouldUpdateReactComponent\n */\n\n'use strict';\n\n/**\n * Given a `prevElement` and `nextElement`, determines if the existing\n * instance should be updated as opposed to being destroyed or replaced by a new\n * instance. Both arguments are elements. This ensures that this logic can\n * operate on stateless trees without any backing instance.\n *\n * @param {?object} prevElement\n * @param {?object} nextElement\n * @return {boolean} True if the existing instance should be updated.\n * @protected\n */\n\nfunction shouldUpdateReactComponent(prevElement, nextElement) {\n  var prevEmpty = prevElement === null || prevElement === false;\n  var nextEmpty = nextElement === null || nextElement === false;\n  if (prevEmpty || nextEmpty) {\n    return prevEmpty === nextEmpty;\n  }\n\n  var prevType = typeof prevElement;\n  var nextType = typeof nextElement;\n  if (prevType === 'string' || prevType === 'number') {\n    return nextType === 'string' || nextType === 'number';\n  } else {\n    return nextType === 'object' && prevElement.type === nextElement.type && prevElement.key === nextElement.key;\n  }\n}\n\nmodule.exports = shouldUpdateReactComponent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/shouldUpdateReactComponent.js\n ** module id = 132\n ** module chunks = 4\n **/","/**\n * Copyright 2014-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactEmptyComponent\n */\n\n'use strict';\n\nvar emptyComponentFactory;\n\nvar ReactEmptyComponentInjection = {\n  injectEmptyComponentFactory: function (factory) {\n    emptyComponentFactory = factory;\n  }\n};\n\nvar ReactEmptyComponent = {\n  create: function (instantiate) {\n    return emptyComponentFactory(instantiate);\n  }\n};\n\nReactEmptyComponent.injection = ReactEmptyComponentInjection;\n\nmodule.exports = ReactEmptyComponent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactEmptyComponent.js\n ** module id = 133\n ** module chunks = 4\n **/","/**\n * Copyright 2014-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactHostComponent\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant'),\n    _assign = require('object-assign');\n\nvar invariant = require('fbjs/lib/invariant');\n\nvar genericComponentClass = null;\n// This registry keeps track of wrapper classes around host tags.\nvar tagToComponentClass = {};\nvar textComponentClass = null;\n\nvar ReactHostComponentInjection = {\n  // This accepts a class that receives the tag string. This is a catch all\n  // that can render any kind of tag.\n  injectGenericComponentClass: function (componentClass) {\n    genericComponentClass = componentClass;\n  },\n  // This accepts a text component class that takes the text string to be\n  // rendered as props.\n  injectTextComponentClass: function (componentClass) {\n    textComponentClass = componentClass;\n  },\n  // This accepts a keyed object with classes as values. Each key represents a\n  // tag. That particular tag will use this class instead of the generic one.\n  injectComponentClasses: function (componentClasses) {\n    _assign(tagToComponentClass, componentClasses);\n  }\n};\n\n/**\n * Get a host internal component class for a specific tag.\n *\n * @param {ReactElement} element The element to create.\n * @return {function} The internal class constructor function.\n */\nfunction createInternalComponent(element) {\n  !genericComponentClass ? process.env.NODE_ENV !== 'production' ? invariant(false, 'There is no registered component for the tag %s', element.type) : _prodInvariant('111', element.type) : void 0;\n  return new genericComponentClass(element);\n}\n\n/**\n * @param {ReactText} text\n * @return {ReactComponent}\n */\nfunction createInstanceForText(text) {\n  return new textComponentClass(text);\n}\n\n/**\n * @param {ReactComponent} component\n * @return {boolean}\n */\nfunction isTextComponent(component) {\n  return component instanceof textComponentClass;\n}\n\nvar ReactHostComponent = {\n  createInternalComponent: createInternalComponent,\n  createInstanceForText: createInstanceForText,\n  isTextComponent: isTextComponent,\n  injection: ReactHostComponentInjection\n};\n\nmodule.exports = ReactHostComponent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactHostComponent.js\n ** module id = 134\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule flattenChildren\n * \n */\n\n'use strict';\n\nvar KeyEscapeUtils = require('./KeyEscapeUtils');\nvar traverseAllChildren = require('./traverseAllChildren');\nvar warning = require('fbjs/lib/warning');\n\nvar ReactComponentTreeDevtool;\n\nif (typeof process !== 'undefined' && process.env && process.env.NODE_ENV === 'test') {\n  // Temporary hack.\n  // Inline requires don't work well with Jest:\n  // https://github.com/facebook/react/issues/7240\n  // Remove the inline requires when we don't need them anymore:\n  // https://github.com/facebook/react/pull/7178\n  ReactComponentTreeDevtool = require('./ReactComponentTreeDevtool');\n}\n\n/**\n * @param {function} traverseContext Context passed through traversal.\n * @param {?ReactComponent} child React child component.\n * @param {!string} name String name of key path to child.\n * @param {number=} selfDebugID Optional debugID of the current internal instance.\n */\nfunction flattenSingleChildIntoContext(traverseContext, child, name, selfDebugID) {\n  // We found a component instance.\n  if (traverseContext && typeof traverseContext === 'object') {\n    var result = traverseContext;\n    var keyUnique = result[name] === undefined;\n    if (process.env.NODE_ENV !== 'production') {\n      if (!ReactComponentTreeDevtool) {\n        ReactComponentTreeDevtool = require('./ReactComponentTreeDevtool');\n      }\n      process.env.NODE_ENV !== 'production' ? warning(keyUnique, 'flattenChildren(...): Encountered two children with the same key, ' + '`%s`. Child keys must be unique; when two children share a key, only ' + 'the first child will be used.%s', KeyEscapeUtils.unescape(name), ReactComponentTreeDevtool.getStackAddendumByID(selfDebugID)) : void 0;\n    }\n    if (keyUnique && child != null) {\n      result[name] = child;\n    }\n  }\n}\n\n/**\n * Flattens children that are typically specified as `props.children`. Any null\n * children will not be included in the resulting object.\n * @return {!object} flattened children keyed by name.\n */\nfunction flattenChildren(children, selfDebugID) {\n  if (children == null) {\n    return children;\n  }\n  var result = {};\n\n  if (process.env.NODE_ENV !== 'production') {\n    traverseAllChildren(children, function (traverseContext, child, name) {\n      return flattenSingleChildIntoContext(traverseContext, child, name, selfDebugID);\n    }, result);\n  } else {\n    traverseAllChildren(children, flattenSingleChildIntoContext, result);\n  }\n  return result;\n}\n\nmodule.exports = flattenChildren;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/flattenChildren.js\n ** module id = 135\n ** module chunks = 4\n **/","/**\n * Copyright 2014-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactServerRenderingTransaction\n */\n\n'use strict';\n\nvar _assign = require('object-assign');\n\nvar PooledClass = require('./PooledClass');\nvar Transaction = require('./Transaction');\nvar ReactInstrumentation = require('./ReactInstrumentation');\nvar ReactServerUpdateQueue = require('./ReactServerUpdateQueue');\n\n/**\n * Executed within the scope of the `Transaction` instance. Consider these as\n * being member methods, but with an implied ordering while being isolated from\n * each other.\n */\nvar TRANSACTION_WRAPPERS = [];\n\nif (process.env.NODE_ENV !== 'production') {\n  TRANSACTION_WRAPPERS.push({\n    initialize: ReactInstrumentation.debugTool.onBeginFlush,\n    close: ReactInstrumentation.debugTool.onEndFlush\n  });\n}\n\nvar noopCallbackQueue = {\n  enqueue: function () {}\n};\n\n/**\n * @class ReactServerRenderingTransaction\n * @param {boolean} renderToStaticMarkup\n */\nfunction ReactServerRenderingTransaction(renderToStaticMarkup) {\n  this.reinitializeTransaction();\n  this.renderToStaticMarkup = renderToStaticMarkup;\n  this.useCreateElement = false;\n  this.updateQueue = new ReactServerUpdateQueue(this);\n}\n\nvar Mixin = {\n  /**\n   * @see Transaction\n   * @abstract\n   * @final\n   * @return {array} Empty list of operation wrap procedures.\n   */\n  getTransactionWrappers: function () {\n    return TRANSACTION_WRAPPERS;\n  },\n\n  /**\n   * @return {object} The queue to collect `onDOMReady` callbacks with.\n   */\n  getReactMountReady: function () {\n    return noopCallbackQueue;\n  },\n\n  /**\n   * @return {object} The queue to collect React async events.\n   */\n  getUpdateQueue: function () {\n    return this.updateQueue;\n  },\n\n  /**\n   * `PooledClass` looks for this, and will invoke this before allowing this\n   * instance to be reused.\n   */\n  destructor: function () {},\n\n  checkpoint: function () {},\n\n  rollback: function () {}\n};\n\n_assign(ReactServerRenderingTransaction.prototype, Transaction.Mixin, Mixin);\n\nPooledClass.addPoolingTo(ReactServerRenderingTransaction);\n\nmodule.exports = ReactServerRenderingTransaction;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactServerRenderingTransaction.js\n ** module id = 136\n ** module chunks = 4\n **/","/**\n * Copyright 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactServerUpdateQueue\n * \n */\n\n'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar ReactUpdateQueue = require('./ReactUpdateQueue');\nvar Transaction = require('./Transaction');\nvar warning = require('fbjs/lib/warning');\n\nfunction warnNoop(publicInstance, callerName) {\n  if (process.env.NODE_ENV !== 'production') {\n    var constructor = publicInstance.constructor;\n    process.env.NODE_ENV !== 'production' ? warning(false, '%s(...): Can only update a mounting component. ' + 'This usually means you called %s() outside componentWillMount() on the server. ' + 'This is a no-op. Please check the code for the %s component.', callerName, callerName, constructor && (constructor.displayName || constructor.name) || 'ReactClass') : void 0;\n  }\n}\n\n/**\n * This is the update queue used for server rendering.\n * It delegates to ReactUpdateQueue while server rendering is in progress and\n * switches to ReactNoopUpdateQueue after the transaction has completed.\n * @class ReactServerUpdateQueue\n * @param {Transaction} transaction\n */\n\nvar ReactServerUpdateQueue = function () {\n  /* :: transaction: Transaction; */\n\n  function ReactServerUpdateQueue(transaction) {\n    _classCallCheck(this, ReactServerUpdateQueue);\n\n    this.transaction = transaction;\n  }\n\n  /**\n   * Checks whether or not this composite component is mounted.\n   * @param {ReactClass} publicInstance The instance we want to test.\n   * @return {boolean} True if mounted, false otherwise.\n   * @protected\n   * @final\n   */\n\n\n  ReactServerUpdateQueue.prototype.isMounted = function isMounted(publicInstance) {\n    return false;\n  };\n\n  /**\n   * Enqueue a callback that will be executed after all the pending updates\n   * have processed.\n   *\n   * @param {ReactClass} publicInstance The instance to use as `this` context.\n   * @param {?function} callback Called after state is updated.\n   * @internal\n   */\n\n\n  ReactServerUpdateQueue.prototype.enqueueCallback = function enqueueCallback(publicInstance, callback, callerName) {\n    if (this.transaction.isInTransaction()) {\n      ReactUpdateQueue.enqueueCallback(publicInstance, callback, callerName);\n    }\n  };\n\n  /**\n   * Forces an update. This should only be invoked when it is known with\n   * certainty that we are **not** in a DOM transaction.\n   *\n   * You may want to call this when you know that some deeper aspect of the\n   * component's state has changed but `setState` was not called.\n   *\n   * This will not invoke `shouldComponentUpdate`, but it will invoke\n   * `componentWillUpdate` and `componentDidUpdate`.\n   *\n   * @param {ReactClass} publicInstance The instance that should rerender.\n   * @internal\n   */\n\n\n  ReactServerUpdateQueue.prototype.enqueueForceUpdate = function enqueueForceUpdate(publicInstance) {\n    if (this.transaction.isInTransaction()) {\n      ReactUpdateQueue.enqueueForceUpdate(publicInstance);\n    } else {\n      warnNoop(publicInstance, 'forceUpdate');\n    }\n  };\n\n  /**\n   * Replaces all of the state. Always use this or `setState` to mutate state.\n   * You should treat `this.state` as immutable.\n   *\n   * There is no guarantee that `this.state` will be immediately updated, so\n   * accessing `this.state` after calling this method may return the old value.\n   *\n   * @param {ReactClass} publicInstance The instance that should rerender.\n   * @param {object|function} completeState Next state.\n   * @internal\n   */\n\n\n  ReactServerUpdateQueue.prototype.enqueueReplaceState = function enqueueReplaceState(publicInstance, completeState) {\n    if (this.transaction.isInTransaction()) {\n      ReactUpdateQueue.enqueueReplaceState(publicInstance, completeState);\n    } else {\n      warnNoop(publicInstance, 'replaceState');\n    }\n  };\n\n  /**\n   * Sets a subset of the state. This only exists because _pendingState is\n   * internal. This provides a merging strategy that is not available to deep\n   * properties which is confusing. TODO: Expose pendingState or don't use it\n   * during the merge.\n   *\n   * @param {ReactClass} publicInstance The instance that should rerender.\n   * @param {object|function} partialState Next partial state to be merged with state.\n   * @internal\n   */\n\n\n  ReactServerUpdateQueue.prototype.enqueueSetState = function enqueueSetState(publicInstance, partialState) {\n    if (this.transaction.isInTransaction()) {\n      ReactUpdateQueue.enqueueSetState(publicInstance, partialState);\n    } else {\n      warnNoop(publicInstance, 'setState');\n    }\n  };\n\n  return ReactServerUpdateQueue;\n}();\n\nmodule.exports = ReactServerUpdateQueue;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactServerUpdateQueue.js\n ** module id = 137\n ** module chunks = 4\n **/","/**\n * Copyright 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactUpdateQueue\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar ReactCurrentOwner = require('./ReactCurrentOwner');\nvar ReactInstanceMap = require('./ReactInstanceMap');\nvar ReactInstrumentation = require('./ReactInstrumentation');\nvar ReactUpdates = require('./ReactUpdates');\n\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\nfunction enqueueUpdate(internalInstance) {\n  ReactUpdates.enqueueUpdate(internalInstance);\n}\n\nfunction formatUnexpectedArgument(arg) {\n  var type = typeof arg;\n  if (type !== 'object') {\n    return type;\n  }\n  var displayName = arg.constructor && arg.constructor.name || type;\n  var keys = Object.keys(arg);\n  if (keys.length > 0 && keys.length < 20) {\n    return displayName + ' (keys: ' + keys.join(', ') + ')';\n  }\n  return displayName;\n}\n\nfunction getInternalInstanceReadyForUpdate(publicInstance, callerName) {\n  var internalInstance = ReactInstanceMap.get(publicInstance);\n  if (!internalInstance) {\n    if (process.env.NODE_ENV !== 'production') {\n      var ctor = publicInstance.constructor;\n      // Only warn when we have a callerName. Otherwise we should be silent.\n      // We're probably calling from enqueueCallback. We don't want to warn\n      // there because we already warned for the corresponding lifecycle method.\n      process.env.NODE_ENV !== 'production' ? warning(!callerName, '%s(...): Can only update a mounted or mounting component. ' + 'This usually means you called %s() on an unmounted component. ' + 'This is a no-op. Please check the code for the %s component.', callerName, callerName, ctor && (ctor.displayName || ctor.name) || 'ReactClass') : void 0;\n    }\n    return null;\n  }\n\n  if (process.env.NODE_ENV !== 'production') {\n    process.env.NODE_ENV !== 'production' ? warning(ReactCurrentOwner.current == null, '%s(...): Cannot update during an existing state transition (such as ' + 'within `render` or another component\\'s constructor). Render methods ' + 'should be a pure function of props and state; constructor ' + 'side-effects are an anti-pattern, but can be moved to ' + '`componentWillMount`.', callerName) : void 0;\n  }\n\n  return internalInstance;\n}\n\n/**\n * ReactUpdateQueue allows for state updates to be scheduled into a later\n * reconciliation step.\n */\nvar ReactUpdateQueue = {\n\n  /**\n   * Checks whether or not this composite component is mounted.\n   * @param {ReactClass} publicInstance The instance we want to test.\n   * @return {boolean} True if mounted, false otherwise.\n   * @protected\n   * @final\n   */\n  isMounted: function (publicInstance) {\n    if (process.env.NODE_ENV !== 'production') {\n      var owner = ReactCurrentOwner.current;\n      if (owner !== null) {\n        process.env.NODE_ENV !== 'production' ? warning(owner._warnedAboutRefsInRender, '%s is accessing isMounted inside its render() function. ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', owner.getName() || 'A component') : void 0;\n        owner._warnedAboutRefsInRender = true;\n      }\n    }\n    var internalInstance = ReactInstanceMap.get(publicInstance);\n    if (internalInstance) {\n      // During componentWillMount and render this will still be null but after\n      // that will always render to something. At least for now. So we can use\n      // this hack.\n      return !!internalInstance._renderedComponent;\n    } else {\n      return false;\n    }\n  },\n\n  /**\n   * Enqueue a callback that will be executed after all the pending updates\n   * have processed.\n   *\n   * @param {ReactClass} publicInstance The instance to use as `this` context.\n   * @param {?function} callback Called after state is updated.\n   * @param {string} callerName Name of the calling function in the public API.\n   * @internal\n   */\n  enqueueCallback: function (publicInstance, callback, callerName) {\n    ReactUpdateQueue.validateCallback(callback, callerName);\n    var internalInstance = getInternalInstanceReadyForUpdate(publicInstance);\n\n    // Previously we would throw an error if we didn't have an internal\n    // instance. Since we want to make it a no-op instead, we mirror the same\n    // behavior we have in other enqueue* methods.\n    // We also need to ignore callbacks in componentWillMount. See\n    // enqueueUpdates.\n    if (!internalInstance) {\n      return null;\n    }\n\n    if (internalInstance._pendingCallbacks) {\n      internalInstance._pendingCallbacks.push(callback);\n    } else {\n      internalInstance._pendingCallbacks = [callback];\n    }\n    // TODO: The callback here is ignored when setState is called from\n    // componentWillMount. Either fix it or disallow doing so completely in\n    // favor of getInitialState. Alternatively, we can disallow\n    // componentWillMount during server-side rendering.\n    enqueueUpdate(internalInstance);\n  },\n\n  enqueueCallbackInternal: function (internalInstance, callback) {\n    if (internalInstance._pendingCallbacks) {\n      internalInstance._pendingCallbacks.push(callback);\n    } else {\n      internalInstance._pendingCallbacks = [callback];\n    }\n    enqueueUpdate(internalInstance);\n  },\n\n  /**\n   * Forces an update. This should only be invoked when it is known with\n   * certainty that we are **not** in a DOM transaction.\n   *\n   * You may want to call this when you know that some deeper aspect of the\n   * component's state has changed but `setState` was not called.\n   *\n   * This will not invoke `shouldComponentUpdate`, but it will invoke\n   * `componentWillUpdate` and `componentDidUpdate`.\n   *\n   * @param {ReactClass} publicInstance The instance that should rerender.\n   * @internal\n   */\n  enqueueForceUpdate: function (publicInstance) {\n    var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'forceUpdate');\n\n    if (!internalInstance) {\n      return;\n    }\n\n    internalInstance._pendingForceUpdate = true;\n\n    enqueueUpdate(internalInstance);\n  },\n\n  /**\n   * Replaces all of the state. Always use this or `setState` to mutate state.\n   * You should treat `this.state` as immutable.\n   *\n   * There is no guarantee that `this.state` will be immediately updated, so\n   * accessing `this.state` after calling this method may return the old value.\n   *\n   * @param {ReactClass} publicInstance The instance that should rerender.\n   * @param {object} completeState Next state.\n   * @internal\n   */\n  enqueueReplaceState: function (publicInstance, completeState) {\n    var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'replaceState');\n\n    if (!internalInstance) {\n      return;\n    }\n\n    internalInstance._pendingStateQueue = [completeState];\n    internalInstance._pendingReplaceState = true;\n\n    enqueueUpdate(internalInstance);\n  },\n\n  /**\n   * Sets a subset of the state. This only exists because _pendingState is\n   * internal. This provides a merging strategy that is not available to deep\n   * properties which is confusing. TODO: Expose pendingState or don't use it\n   * during the merge.\n   *\n   * @param {ReactClass} publicInstance The instance that should rerender.\n   * @param {object} partialState Next partial state to be merged with state.\n   * @internal\n   */\n  enqueueSetState: function (publicInstance, partialState) {\n    if (process.env.NODE_ENV !== 'production') {\n      ReactInstrumentation.debugTool.onSetState();\n      process.env.NODE_ENV !== 'production' ? warning(partialState != null, 'setState(...): You passed an undefined or null state object; ' + 'instead, use forceUpdate().') : void 0;\n    }\n\n    var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'setState');\n\n    if (!internalInstance) {\n      return;\n    }\n\n    var queue = internalInstance._pendingStateQueue || (internalInstance._pendingStateQueue = []);\n    queue.push(partialState);\n\n    enqueueUpdate(internalInstance);\n  },\n\n  enqueueElementInternal: function (internalInstance, nextElement, nextContext) {\n    internalInstance._pendingElement = nextElement;\n    // TODO: introduce _pendingContext instead of setting it directly.\n    internalInstance._context = nextContext;\n    enqueueUpdate(internalInstance);\n  },\n\n  validateCallback: function (callback, callerName) {\n    !(!callback || typeof callback === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s(...): Expected the last optional `callback` argument to be a function. Instead received: %s.', callerName, formatUnexpectedArgument(callback)) : _prodInvariant('122', callerName, formatUnexpectedArgument(callback)) : void 0;\n  }\n\n};\n\nmodule.exports = ReactUpdateQueue;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactUpdateQueue.js\n ** module id = 138\n ** module chunks = 4\n **/","/**\n * Copyright 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule validateDOMNesting\n */\n\n'use strict';\n\nvar _assign = require('object-assign');\n\nvar emptyFunction = require('fbjs/lib/emptyFunction');\nvar warning = require('fbjs/lib/warning');\n\nvar validateDOMNesting = emptyFunction;\n\nif (process.env.NODE_ENV !== 'production') {\n  // This validation code was written based on the HTML5 parsing spec:\n  // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope\n  //\n  // Note: this does not catch all invalid nesting, nor does it try to (as it's\n  // not clear what practical benefit doing so provides); instead, we warn only\n  // for cases where the parser will give a parse tree differing from what React\n  // intended. For example, <b><div></div></b> is invalid but we don't warn\n  // because it still parses correctly; we do warn for other cases like nested\n  // <p> tags where the beginning of the second element implicitly closes the\n  // first, causing a confusing mess.\n\n  // https://html.spec.whatwg.org/multipage/syntax.html#special\n  var specialTags = ['address', 'applet', 'area', 'article', 'aside', 'base', 'basefont', 'bgsound', 'blockquote', 'body', 'br', 'button', 'caption', 'center', 'col', 'colgroup', 'dd', 'details', 'dir', 'div', 'dl', 'dt', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'frame', 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'iframe', 'img', 'input', 'isindex', 'li', 'link', 'listing', 'main', 'marquee', 'menu', 'menuitem', 'meta', 'nav', 'noembed', 'noframes', 'noscript', 'object', 'ol', 'p', 'param', 'plaintext', 'pre', 'script', 'section', 'select', 'source', 'style', 'summary', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'title', 'tr', 'track', 'ul', 'wbr', 'xmp'];\n\n  // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope\n  var inScopeTags = ['applet', 'caption', 'html', 'table', 'td', 'th', 'marquee', 'object', 'template',\n\n  // https://html.spec.whatwg.org/multipage/syntax.html#html-integration-point\n  // TODO: Distinguish by namespace here -- for <title>, including it here\n  // errs on the side of fewer warnings\n  'foreignObject', 'desc', 'title'];\n\n  // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-button-scope\n  var buttonScopeTags = inScopeTags.concat(['button']);\n\n  // https://html.spec.whatwg.org/multipage/syntax.html#generate-implied-end-tags\n  var impliedEndTags = ['dd', 'dt', 'li', 'option', 'optgroup', 'p', 'rp', 'rt'];\n\n  var emptyAncestorInfo = {\n    current: null,\n\n    formTag: null,\n    aTagInScope: null,\n    buttonTagInScope: null,\n    nobrTagInScope: null,\n    pTagInButtonScope: null,\n\n    listItemTagAutoclosing: null,\n    dlItemTagAutoclosing: null\n  };\n\n  var updatedAncestorInfo = function (oldInfo, tag, instance) {\n    var ancestorInfo = _assign({}, oldInfo || emptyAncestorInfo);\n    var info = { tag: tag, instance: instance };\n\n    if (inScopeTags.indexOf(tag) !== -1) {\n      ancestorInfo.aTagInScope = null;\n      ancestorInfo.buttonTagInScope = null;\n      ancestorInfo.nobrTagInScope = null;\n    }\n    if (buttonScopeTags.indexOf(tag) !== -1) {\n      ancestorInfo.pTagInButtonScope = null;\n    }\n\n    // See rules for 'li', 'dd', 'dt' start tags in\n    // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody\n    if (specialTags.indexOf(tag) !== -1 && tag !== 'address' && tag !== 'div' && tag !== 'p') {\n      ancestorInfo.listItemTagAutoclosing = null;\n      ancestorInfo.dlItemTagAutoclosing = null;\n    }\n\n    ancestorInfo.current = info;\n\n    if (tag === 'form') {\n      ancestorInfo.formTag = info;\n    }\n    if (tag === 'a') {\n      ancestorInfo.aTagInScope = info;\n    }\n    if (tag === 'button') {\n      ancestorInfo.buttonTagInScope = info;\n    }\n    if (tag === 'nobr') {\n      ancestorInfo.nobrTagInScope = info;\n    }\n    if (tag === 'p') {\n      ancestorInfo.pTagInButtonScope = info;\n    }\n    if (tag === 'li') {\n      ancestorInfo.listItemTagAutoclosing = info;\n    }\n    if (tag === 'dd' || tag === 'dt') {\n      ancestorInfo.dlItemTagAutoclosing = info;\n    }\n\n    return ancestorInfo;\n  };\n\n  /**\n   * Returns whether\n   */\n  var isTagValidWithParent = function (tag, parentTag) {\n    // First, let's check if we're in an unusual parsing mode...\n    switch (parentTag) {\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inselect\n      case 'select':\n        return tag === 'option' || tag === 'optgroup' || tag === '#text';\n      case 'optgroup':\n        return tag === 'option' || tag === '#text';\n      // Strictly speaking, seeing an <option> doesn't mean we're in a <select>\n      // but\n      case 'option':\n        return tag === '#text';\n\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intd\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incaption\n      // No special behavior since these rules fall back to \"in body\" mode for\n      // all except special table nodes which cause bad parsing behavior anyway.\n\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intr\n      case 'tr':\n        return tag === 'th' || tag === 'td' || tag === 'style' || tag === 'script' || tag === 'template';\n\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intbody\n      case 'tbody':\n      case 'thead':\n      case 'tfoot':\n        return tag === 'tr' || tag === 'style' || tag === 'script' || tag === 'template';\n\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incolgroup\n      case 'colgroup':\n        return tag === 'col' || tag === 'template';\n\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intable\n      case 'table':\n        return tag === 'caption' || tag === 'colgroup' || tag === 'tbody' || tag === 'tfoot' || tag === 'thead' || tag === 'style' || tag === 'script' || tag === 'template';\n\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inhead\n      case 'head':\n        return tag === 'base' || tag === 'basefont' || tag === 'bgsound' || tag === 'link' || tag === 'meta' || tag === 'title' || tag === 'noscript' || tag === 'noframes' || tag === 'style' || tag === 'script' || tag === 'template';\n\n      // https://html.spec.whatwg.org/multipage/semantics.html#the-html-element\n      case 'html':\n        return tag === 'head' || tag === 'body';\n      case '#document':\n        return tag === 'html';\n    }\n\n    // Probably in the \"in body\" parsing mode, so we outlaw only tag combos\n    // where the parsing rules cause implicit opens or closes to be added.\n    // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody\n    switch (tag) {\n      case 'h1':\n      case 'h2':\n      case 'h3':\n      case 'h4':\n      case 'h5':\n      case 'h6':\n        return parentTag !== 'h1' && parentTag !== 'h2' && parentTag !== 'h3' && parentTag !== 'h4' && parentTag !== 'h5' && parentTag !== 'h6';\n\n      case 'rp':\n      case 'rt':\n        return impliedEndTags.indexOf(parentTag) === -1;\n\n      case 'body':\n      case 'caption':\n      case 'col':\n      case 'colgroup':\n      case 'frame':\n      case 'head':\n      case 'html':\n      case 'tbody':\n      case 'td':\n      case 'tfoot':\n      case 'th':\n      case 'thead':\n      case 'tr':\n        // These tags are only valid with a few parents that have special child\n        // parsing rules -- if we're down here, then none of those matched and\n        // so we allow it only if we don't know what the parent is, as all other\n        // cases are invalid.\n        return parentTag == null;\n    }\n\n    return true;\n  };\n\n  /**\n   * Returns whether\n   */\n  var findInvalidAncestorForTag = function (tag, ancestorInfo) {\n    switch (tag) {\n      case 'address':\n      case 'article':\n      case 'aside':\n      case 'blockquote':\n      case 'center':\n      case 'details':\n      case 'dialog':\n      case 'dir':\n      case 'div':\n      case 'dl':\n      case 'fieldset':\n      case 'figcaption':\n      case 'figure':\n      case 'footer':\n      case 'header':\n      case 'hgroup':\n      case 'main':\n      case 'menu':\n      case 'nav':\n      case 'ol':\n      case 'p':\n      case 'section':\n      case 'summary':\n      case 'ul':\n\n      case 'pre':\n      case 'listing':\n\n      case 'table':\n\n      case 'hr':\n\n      case 'xmp':\n\n      case 'h1':\n      case 'h2':\n      case 'h3':\n      case 'h4':\n      case 'h5':\n      case 'h6':\n        return ancestorInfo.pTagInButtonScope;\n\n      case 'form':\n        return ancestorInfo.formTag || ancestorInfo.pTagInButtonScope;\n\n      case 'li':\n        return ancestorInfo.listItemTagAutoclosing;\n\n      case 'dd':\n      case 'dt':\n        return ancestorInfo.dlItemTagAutoclosing;\n\n      case 'button':\n        return ancestorInfo.buttonTagInScope;\n\n      case 'a':\n        // Spec says something about storing a list of markers, but it sounds\n        // equivalent to this check.\n        return ancestorInfo.aTagInScope;\n\n      case 'nobr':\n        return ancestorInfo.nobrTagInScope;\n    }\n\n    return null;\n  };\n\n  /**\n   * Given a ReactCompositeComponent instance, return a list of its recursive\n   * owners, starting at the root and ending with the instance itself.\n   */\n  var findOwnerStack = function (instance) {\n    if (!instance) {\n      return [];\n    }\n\n    var stack = [];\n    do {\n      stack.push(instance);\n    } while (instance = instance._currentElement._owner);\n    stack.reverse();\n    return stack;\n  };\n\n  var didWarn = {};\n\n  validateDOMNesting = function (childTag, childInstance, ancestorInfo) {\n    ancestorInfo = ancestorInfo || emptyAncestorInfo;\n    var parentInfo = ancestorInfo.current;\n    var parentTag = parentInfo && parentInfo.tag;\n\n    var invalidParent = isTagValidWithParent(childTag, parentTag) ? null : parentInfo;\n    var invalidAncestor = invalidParent ? null : findInvalidAncestorForTag(childTag, ancestorInfo);\n    var problematic = invalidParent || invalidAncestor;\n\n    if (problematic) {\n      var ancestorTag = problematic.tag;\n      var ancestorInstance = problematic.instance;\n\n      var childOwner = childInstance && childInstance._currentElement._owner;\n      var ancestorOwner = ancestorInstance && ancestorInstance._currentElement._owner;\n\n      var childOwners = findOwnerStack(childOwner);\n      var ancestorOwners = findOwnerStack(ancestorOwner);\n\n      var minStackLen = Math.min(childOwners.length, ancestorOwners.length);\n      var i;\n\n      var deepestCommon = -1;\n      for (i = 0; i < minStackLen; i++) {\n        if (childOwners[i] === ancestorOwners[i]) {\n          deepestCommon = i;\n        } else {\n          break;\n        }\n      }\n\n      var UNKNOWN = '(unknown)';\n      var childOwnerNames = childOwners.slice(deepestCommon + 1).map(function (inst) {\n        return inst.getName() || UNKNOWN;\n      });\n      var ancestorOwnerNames = ancestorOwners.slice(deepestCommon + 1).map(function (inst) {\n        return inst.getName() || UNKNOWN;\n      });\n      var ownerInfo = [].concat(\n      // If the parent and child instances have a common owner ancestor, start\n      // with that -- otherwise we just start with the parent's owners.\n      deepestCommon !== -1 ? childOwners[deepestCommon].getName() || UNKNOWN : [], ancestorOwnerNames, ancestorTag,\n      // If we're warning about an invalid (non-parent) ancestry, add '...'\n      invalidAncestor ? ['...'] : [], childOwnerNames, childTag).join(' > ');\n\n      var warnKey = !!invalidParent + '|' + childTag + '|' + ancestorTag + '|' + ownerInfo;\n      if (didWarn[warnKey]) {\n        return;\n      }\n      didWarn[warnKey] = true;\n\n      var tagDisplayName = childTag;\n      if (childTag !== '#text') {\n        tagDisplayName = '<' + childTag + '>';\n      }\n\n      if (invalidParent) {\n        var info = '';\n        if (ancestorTag === 'table' && childTag === 'tr') {\n          info += ' Add a <tbody> to your code to match the DOM tree generated by ' + 'the browser.';\n        }\n        process.env.NODE_ENV !== 'production' ? warning(false, 'validateDOMNesting(...): %s cannot appear as a child of <%s>. ' + 'See %s.%s', tagDisplayName, ancestorTag, ownerInfo, info) : void 0;\n      } else {\n        process.env.NODE_ENV !== 'production' ? warning(false, 'validateDOMNesting(...): %s cannot appear as a descendant of ' + '<%s>. See %s.', tagDisplayName, ancestorTag, ownerInfo) : void 0;\n      }\n    }\n  };\n\n  validateDOMNesting.updatedAncestorInfo = updatedAncestorInfo;\n\n  // For testing\n  validateDOMNesting.isTagValidInContext = function (tag, ancestorInfo) {\n    ancestorInfo = ancestorInfo || emptyAncestorInfo;\n    var parentInfo = ancestorInfo.current;\n    var parentTag = parentInfo && parentInfo.tag;\n    return isTagValidWithParent(tag, parentTag) && !findInvalidAncestorForTag(tag, ancestorInfo);\n  };\n}\n\nmodule.exports = validateDOMNesting;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/validateDOMNesting.js\n ** module id = 139\n ** module chunks = 4\n **/","/**\n * Copyright 2014-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMEmptyComponent\n */\n\n'use strict';\n\nvar _assign = require('object-assign');\n\nvar DOMLazyTree = require('./DOMLazyTree');\nvar ReactDOMComponentTree = require('./ReactDOMComponentTree');\n\nvar ReactDOMEmptyComponent = function (instantiate) {\n  // ReactCompositeComponent uses this:\n  this._currentElement = null;\n  // ReactDOMComponentTree uses these:\n  this._hostNode = null;\n  this._hostParent = null;\n  this._hostContainerInfo = null;\n  this._domID = null;\n};\n_assign(ReactDOMEmptyComponent.prototype, {\n  mountComponent: function (transaction, hostParent, hostContainerInfo, context) {\n    var domID = hostContainerInfo._idCounter++;\n    this._domID = domID;\n    this._hostParent = hostParent;\n    this._hostContainerInfo = hostContainerInfo;\n\n    var nodeValue = ' react-empty: ' + this._domID + ' ';\n    if (transaction.useCreateElement) {\n      var ownerDocument = hostContainerInfo._ownerDocument;\n      var node = ownerDocument.createComment(nodeValue);\n      ReactDOMComponentTree.precacheNode(this, node);\n      return DOMLazyTree(node);\n    } else {\n      if (transaction.renderToStaticMarkup) {\n        // Normally we'd insert a comment node, but since this is a situation\n        // where React won't take over (static pages), we can simply return\n        // nothing.\n        return '';\n      }\n      return '<!--' + nodeValue + '-->';\n    }\n  },\n  receiveComponent: function () {},\n  getHostNode: function () {\n    return ReactDOMComponentTree.getNodeFromInstance(this);\n  },\n  unmountComponent: function () {\n    ReactDOMComponentTree.uncacheNode(this);\n  }\n});\n\nmodule.exports = ReactDOMEmptyComponent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMEmptyComponent.js\n ** module id = 140\n ** module chunks = 4\n **/","/**\n * Copyright 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMTreeTraversal\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * Return the lowest common ancestor of A and B, or null if they are in\n * different trees.\n */\nfunction getLowestCommonAncestor(instA, instB) {\n  !('_hostNode' in instA) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'getNodeFromInstance: Invalid argument.') : _prodInvariant('33') : void 0;\n  !('_hostNode' in instB) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'getNodeFromInstance: Invalid argument.') : _prodInvariant('33') : void 0;\n\n  var depthA = 0;\n  for (var tempA = instA; tempA; tempA = tempA._hostParent) {\n    depthA++;\n  }\n  var depthB = 0;\n  for (var tempB = instB; tempB; tempB = tempB._hostParent) {\n    depthB++;\n  }\n\n  // If A is deeper, crawl up.\n  while (depthA - depthB > 0) {\n    instA = instA._hostParent;\n    depthA--;\n  }\n\n  // If B is deeper, crawl up.\n  while (depthB - depthA > 0) {\n    instB = instB._hostParent;\n    depthB--;\n  }\n\n  // Walk in lockstep until we find a match.\n  var depth = depthA;\n  while (depth--) {\n    if (instA === instB) {\n      return instA;\n    }\n    instA = instA._hostParent;\n    instB = instB._hostParent;\n  }\n  return null;\n}\n\n/**\n * Return if A is an ancestor of B.\n */\nfunction isAncestor(instA, instB) {\n  !('_hostNode' in instA) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'isAncestor: Invalid argument.') : _prodInvariant('35') : void 0;\n  !('_hostNode' in instB) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'isAncestor: Invalid argument.') : _prodInvariant('35') : void 0;\n\n  while (instB) {\n    if (instB === instA) {\n      return true;\n    }\n    instB = instB._hostParent;\n  }\n  return false;\n}\n\n/**\n * Return the parent instance of the passed-in instance.\n */\nfunction getParentInstance(inst) {\n  !('_hostNode' in inst) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'getParentInstance: Invalid argument.') : _prodInvariant('36') : void 0;\n\n  return inst._hostParent;\n}\n\n/**\n * Simulates the traversal of a two-phase, capture/bubble event dispatch.\n */\nfunction traverseTwoPhase(inst, fn, arg) {\n  var path = [];\n  while (inst) {\n    path.push(inst);\n    inst = inst._hostParent;\n  }\n  var i;\n  for (i = path.length; i-- > 0;) {\n    fn(path[i], false, arg);\n  }\n  for (i = 0; i < path.length; i++) {\n    fn(path[i], true, arg);\n  }\n}\n\n/**\n * Traverses the ID hierarchy and invokes the supplied `cb` on any IDs that\n * should would receive a `mouseEnter` or `mouseLeave` event.\n *\n * Does not invoke the callback on the nearest common ancestor because nothing\n * \"entered\" or \"left\" that element.\n */\nfunction traverseEnterLeave(from, to, fn, argFrom, argTo) {\n  var common = from && to ? getLowestCommonAncestor(from, to) : null;\n  var pathFrom = [];\n  while (from && from !== common) {\n    pathFrom.push(from);\n    from = from._hostParent;\n  }\n  var pathTo = [];\n  while (to && to !== common) {\n    pathTo.push(to);\n    to = to._hostParent;\n  }\n  var i;\n  for (i = 0; i < pathFrom.length; i++) {\n    fn(pathFrom[i], true, argFrom);\n  }\n  for (i = pathTo.length; i-- > 0;) {\n    fn(pathTo[i], false, argTo);\n  }\n}\n\nmodule.exports = {\n  isAncestor: isAncestor,\n  getLowestCommonAncestor: getLowestCommonAncestor,\n  getParentInstance: getParentInstance,\n  traverseTwoPhase: traverseTwoPhase,\n  traverseEnterLeave: traverseEnterLeave\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMTreeTraversal.js\n ** module id = 141\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMTextComponent\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant'),\n    _assign = require('object-assign');\n\nvar DOMChildrenOperations = require('./DOMChildrenOperations');\nvar DOMLazyTree = require('./DOMLazyTree');\nvar ReactDOMComponentTree = require('./ReactDOMComponentTree');\nvar ReactInstrumentation = require('./ReactInstrumentation');\n\nvar escapeTextContentForBrowser = require('./escapeTextContentForBrowser');\nvar invariant = require('fbjs/lib/invariant');\nvar validateDOMNesting = require('./validateDOMNesting');\n\n/**\n * Text nodes violate a couple assumptions that React makes about components:\n *\n *  - When mounting text into the DOM, adjacent text nodes are merged.\n *  - Text nodes cannot be assigned a React root ID.\n *\n * This component is used to wrap strings between comment nodes so that they\n * can undergo the same reconciliation that is applied to elements.\n *\n * TODO: Investigate representing React components in the DOM with text nodes.\n *\n * @class ReactDOMTextComponent\n * @extends ReactComponent\n * @internal\n */\nvar ReactDOMTextComponent = function (text) {\n  // TODO: This is really a ReactText (ReactNode), not a ReactElement\n  this._currentElement = text;\n  this._stringText = '' + text;\n  // ReactDOMComponentTree uses these:\n  this._hostNode = null;\n  this._hostParent = null;\n\n  // Properties\n  this._domID = null;\n  this._mountIndex = 0;\n  this._closingComment = null;\n  this._commentNodes = null;\n};\n\n_assign(ReactDOMTextComponent.prototype, {\n\n  /**\n   * Creates the markup for this text node. This node is not intended to have\n   * any features besides containing text content.\n   *\n   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\n   * @return {string} Markup for this text node.\n   * @internal\n   */\n  mountComponent: function (transaction, hostParent, hostContainerInfo, context) {\n    if (process.env.NODE_ENV !== 'production') {\n      ReactInstrumentation.debugTool.onSetText(this._debugID, this._stringText);\n\n      var parentInfo;\n      if (hostParent != null) {\n        parentInfo = hostParent._ancestorInfo;\n      } else if (hostContainerInfo != null) {\n        parentInfo = hostContainerInfo._ancestorInfo;\n      }\n      if (parentInfo) {\n        // parentInfo should always be present except for the top-level\n        // component when server rendering\n        validateDOMNesting('#text', this, parentInfo);\n      }\n    }\n\n    var domID = hostContainerInfo._idCounter++;\n    var openingValue = ' react-text: ' + domID + ' ';\n    var closingValue = ' /react-text ';\n    this._domID = domID;\n    this._hostParent = hostParent;\n    if (transaction.useCreateElement) {\n      var ownerDocument = hostContainerInfo._ownerDocument;\n      var openingComment = ownerDocument.createComment(openingValue);\n      var closingComment = ownerDocument.createComment(closingValue);\n      var lazyTree = DOMLazyTree(ownerDocument.createDocumentFragment());\n      DOMLazyTree.queueChild(lazyTree, DOMLazyTree(openingComment));\n      if (this._stringText) {\n        DOMLazyTree.queueChild(lazyTree, DOMLazyTree(ownerDocument.createTextNode(this._stringText)));\n      }\n      DOMLazyTree.queueChild(lazyTree, DOMLazyTree(closingComment));\n      ReactDOMComponentTree.precacheNode(this, openingComment);\n      this._closingComment = closingComment;\n      return lazyTree;\n    } else {\n      var escapedText = escapeTextContentForBrowser(this._stringText);\n\n      if (transaction.renderToStaticMarkup) {\n        // Normally we'd wrap this between comment nodes for the reasons stated\n        // above, but since this is a situation where React won't take over\n        // (static pages), we can simply return the text as it is.\n        return escapedText;\n      }\n\n      return '<!--' + openingValue + '-->' + escapedText + '<!--' + closingValue + '-->';\n    }\n  },\n\n  /**\n   * Updates this component by updating the text content.\n   *\n   * @param {ReactText} nextText The next text content\n   * @param {ReactReconcileTransaction} transaction\n   * @internal\n   */\n  receiveComponent: function (nextText, transaction) {\n    if (nextText !== this._currentElement) {\n      this._currentElement = nextText;\n      var nextStringText = '' + nextText;\n      if (nextStringText !== this._stringText) {\n        // TODO: Save this as pending props and use performUpdateIfNecessary\n        // and/or updateComponent to do the actual update for consistency with\n        // other component types?\n        this._stringText = nextStringText;\n        var commentNodes = this.getHostNode();\n        DOMChildrenOperations.replaceDelimitedText(commentNodes[0], commentNodes[1], nextStringText);\n\n        if (process.env.NODE_ENV !== 'production') {\n          ReactInstrumentation.debugTool.onSetText(this._debugID, nextStringText);\n        }\n      }\n    }\n  },\n\n  getHostNode: function () {\n    var hostNode = this._commentNodes;\n    if (hostNode) {\n      return hostNode;\n    }\n    if (!this._closingComment) {\n      var openingComment = ReactDOMComponentTree.getNodeFromInstance(this);\n      var node = openingComment.nextSibling;\n      while (true) {\n        !(node != null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Missing closing comment for text component %s', this._domID) : _prodInvariant('67', this._domID) : void 0;\n        if (node.nodeType === 8 && node.nodeValue === ' /react-text ') {\n          this._closingComment = node;\n          break;\n        }\n        node = node.nextSibling;\n      }\n    }\n    hostNode = [this._hostNode, this._closingComment];\n    this._commentNodes = hostNode;\n    return hostNode;\n  },\n\n  unmountComponent: function () {\n    this._closingComment = null;\n    this._commentNodes = null;\n    ReactDOMComponentTree.uncacheNode(this);\n  }\n\n});\n\nmodule.exports = ReactDOMTextComponent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMTextComponent.js\n ** module id = 142\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDefaultBatchingStrategy\n */\n\n'use strict';\n\nvar _assign = require('object-assign');\n\nvar ReactUpdates = require('./ReactUpdates');\nvar Transaction = require('./Transaction');\n\nvar emptyFunction = require('fbjs/lib/emptyFunction');\n\nvar RESET_BATCHED_UPDATES = {\n  initialize: emptyFunction,\n  close: function () {\n    ReactDefaultBatchingStrategy.isBatchingUpdates = false;\n  }\n};\n\nvar FLUSH_BATCHED_UPDATES = {\n  initialize: emptyFunction,\n  close: ReactUpdates.flushBatchedUpdates.bind(ReactUpdates)\n};\n\nvar TRANSACTION_WRAPPERS = [FLUSH_BATCHED_UPDATES, RESET_BATCHED_UPDATES];\n\nfunction ReactDefaultBatchingStrategyTransaction() {\n  this.reinitializeTransaction();\n}\n\n_assign(ReactDefaultBatchingStrategyTransaction.prototype, Transaction.Mixin, {\n  getTransactionWrappers: function () {\n    return TRANSACTION_WRAPPERS;\n  }\n});\n\nvar transaction = new ReactDefaultBatchingStrategyTransaction();\n\nvar ReactDefaultBatchingStrategy = {\n  isBatchingUpdates: false,\n\n  /**\n   * Call the provided function in a context within which calls to `setState`\n   * and friends are batched such that components aren't updated unnecessarily.\n   */\n  batchedUpdates: function (callback, a, b, c, d, e) {\n    var alreadyBatchingUpdates = ReactDefaultBatchingStrategy.isBatchingUpdates;\n\n    ReactDefaultBatchingStrategy.isBatchingUpdates = true;\n\n    // The code is written this way to avoid extra allocations\n    if (alreadyBatchingUpdates) {\n      callback(a, b, c, d, e);\n    } else {\n      transaction.perform(callback, null, a, b, c, d, e);\n    }\n  }\n};\n\nmodule.exports = ReactDefaultBatchingStrategy;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDefaultBatchingStrategy.js\n ** module id = 143\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactEventListener\n */\n\n'use strict';\n\nvar _assign = require('object-assign');\n\nvar EventListener = require('fbjs/lib/EventListener');\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\nvar PooledClass = require('./PooledClass');\nvar ReactDOMComponentTree = require('./ReactDOMComponentTree');\nvar ReactUpdates = require('./ReactUpdates');\n\nvar getEventTarget = require('./getEventTarget');\nvar getUnboundedScrollPosition = require('fbjs/lib/getUnboundedScrollPosition');\n\n/**\n * Find the deepest React component completely containing the root of the\n * passed-in instance (for use when entire React trees are nested within each\n * other). If React trees are not nested, returns null.\n */\nfunction findParent(inst) {\n  // TODO: It may be a good idea to cache this to prevent unnecessary DOM\n  // traversal, but caching is difficult to do correctly without using a\n  // mutation observer to listen for all DOM changes.\n  while (inst._hostParent) {\n    inst = inst._hostParent;\n  }\n  var rootNode = ReactDOMComponentTree.getNodeFromInstance(inst);\n  var container = rootNode.parentNode;\n  return ReactDOMComponentTree.getClosestInstanceFromNode(container);\n}\n\n// Used to store ancestor hierarchy in top level callback\nfunction TopLevelCallbackBookKeeping(topLevelType, nativeEvent) {\n  this.topLevelType = topLevelType;\n  this.nativeEvent = nativeEvent;\n  this.ancestors = [];\n}\n_assign(TopLevelCallbackBookKeeping.prototype, {\n  destructor: function () {\n    this.topLevelType = null;\n    this.nativeEvent = null;\n    this.ancestors.length = 0;\n  }\n});\nPooledClass.addPoolingTo(TopLevelCallbackBookKeeping, PooledClass.twoArgumentPooler);\n\nfunction handleTopLevelImpl(bookKeeping) {\n  var nativeEventTarget = getEventTarget(bookKeeping.nativeEvent);\n  var targetInst = ReactDOMComponentTree.getClosestInstanceFromNode(nativeEventTarget);\n\n  // Loop through the hierarchy, in case there's any nested components.\n  // It's important that we build the array of ancestors before calling any\n  // event handlers, because event handlers can modify the DOM, leading to\n  // inconsistencies with ReactMount's node cache. See #1105.\n  var ancestor = targetInst;\n  do {\n    bookKeeping.ancestors.push(ancestor);\n    ancestor = ancestor && findParent(ancestor);\n  } while (ancestor);\n\n  for (var i = 0; i < bookKeeping.ancestors.length; i++) {\n    targetInst = bookKeeping.ancestors[i];\n    ReactEventListener._handleTopLevel(bookKeeping.topLevelType, targetInst, bookKeeping.nativeEvent, getEventTarget(bookKeeping.nativeEvent));\n  }\n}\n\nfunction scrollValueMonitor(cb) {\n  var scrollPosition = getUnboundedScrollPosition(window);\n  cb(scrollPosition);\n}\n\nvar ReactEventListener = {\n  _enabled: true,\n  _handleTopLevel: null,\n\n  WINDOW_HANDLE: ExecutionEnvironment.canUseDOM ? window : null,\n\n  setHandleTopLevel: function (handleTopLevel) {\n    ReactEventListener._handleTopLevel = handleTopLevel;\n  },\n\n  setEnabled: function (enabled) {\n    ReactEventListener._enabled = !!enabled;\n  },\n\n  isEnabled: function () {\n    return ReactEventListener._enabled;\n  },\n\n  /**\n   * Traps top-level events by using event bubbling.\n   *\n   * @param {string} topLevelType Record from `EventConstants`.\n   * @param {string} handlerBaseName Event name (e.g. \"click\").\n   * @param {object} handle Element on which to attach listener.\n   * @return {?object} An object with a remove function which will forcefully\n   *                  remove the listener.\n   * @internal\n   */\n  trapBubbledEvent: function (topLevelType, handlerBaseName, handle) {\n    var element = handle;\n    if (!element) {\n      return null;\n    }\n    return EventListener.listen(element, handlerBaseName, ReactEventListener.dispatchEvent.bind(null, topLevelType));\n  },\n\n  /**\n   * Traps a top-level event by using event capturing.\n   *\n   * @param {string} topLevelType Record from `EventConstants`.\n   * @param {string} handlerBaseName Event name (e.g. \"click\").\n   * @param {object} handle Element on which to attach listener.\n   * @return {?object} An object with a remove function which will forcefully\n   *                  remove the listener.\n   * @internal\n   */\n  trapCapturedEvent: function (topLevelType, handlerBaseName, handle) {\n    var element = handle;\n    if (!element) {\n      return null;\n    }\n    return EventListener.capture(element, handlerBaseName, ReactEventListener.dispatchEvent.bind(null, topLevelType));\n  },\n\n  monitorScrollValue: function (refresh) {\n    var callback = scrollValueMonitor.bind(null, refresh);\n    EventListener.listen(window, 'scroll', callback);\n  },\n\n  dispatchEvent: function (topLevelType, nativeEvent) {\n    if (!ReactEventListener._enabled) {\n      return;\n    }\n\n    var bookKeeping = TopLevelCallbackBookKeeping.getPooled(topLevelType, nativeEvent);\n    try {\n      // Event queue being processed in the same cycle allows\n      // `preventDefault`.\n      ReactUpdates.batchedUpdates(handleTopLevelImpl, bookKeeping);\n    } finally {\n      TopLevelCallbackBookKeeping.release(bookKeeping);\n    }\n  }\n};\n\nmodule.exports = ReactEventListener;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactEventListener.js\n ** module id = 144\n ** module chunks = 4\n **/","'use strict';\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * @typechecks\n */\n\nvar emptyFunction = require('./emptyFunction');\n\n/**\n * Upstream version of event listener. Does not take into account specific\n * nature of platform.\n */\nvar EventListener = {\n  /**\n   * Listen to DOM events during the bubble phase.\n   *\n   * @param {DOMEventTarget} target DOM element to register listener on.\n   * @param {string} eventType Event type, e.g. 'click' or 'mouseover'.\n   * @param {function} callback Callback function.\n   * @return {object} Object with a `remove` method.\n   */\n  listen: function listen(target, eventType, callback) {\n    if (target.addEventListener) {\n      target.addEventListener(eventType, callback, false);\n      return {\n        remove: function remove() {\n          target.removeEventListener(eventType, callback, false);\n        }\n      };\n    } else if (target.attachEvent) {\n      target.attachEvent('on' + eventType, callback);\n      return {\n        remove: function remove() {\n          target.detachEvent('on' + eventType, callback);\n        }\n      };\n    }\n  },\n\n  /**\n   * Listen to DOM events during the capture phase.\n   *\n   * @param {DOMEventTarget} target DOM element to register listener on.\n   * @param {string} eventType Event type, e.g. 'click' or 'mouseover'.\n   * @param {function} callback Callback function.\n   * @return {object} Object with a `remove` method.\n   */\n  capture: function capture(target, eventType, callback) {\n    if (target.addEventListener) {\n      target.addEventListener(eventType, callback, true);\n      return {\n        remove: function remove() {\n          target.removeEventListener(eventType, callback, true);\n        }\n      };\n    } else {\n      if (process.env.NODE_ENV !== 'production') {\n        console.error('Attempted to listen to events during the capture phase on a ' + 'browser that does not support the capture phase. Your application ' + 'will not receive some events.');\n      }\n      return {\n        remove: emptyFunction\n      };\n    }\n  },\n\n  registerDefault: function registerDefault() {}\n};\n\nmodule.exports = EventListener;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/fbjs/lib/EventListener.js\n ** module id = 145\n ** module chunks = 4\n **/","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @typechecks\n */\n\n'use strict';\n\n/**\n * Gets the scroll position of the supplied element or window.\n *\n * The return values are unbounded, unlike `getScrollPosition`. This means they\n * may be negative or exceed the element boundaries (which is possible using\n * inertial scrolling).\n *\n * @param {DOMWindow|DOMElement} scrollable\n * @return {object} Map with `x` and `y` keys.\n */\n\nfunction getUnboundedScrollPosition(scrollable) {\n  if (scrollable === window) {\n    return {\n      x: window.pageXOffset || document.documentElement.scrollLeft,\n      y: window.pageYOffset || document.documentElement.scrollTop\n    };\n  }\n  return {\n    x: scrollable.scrollLeft,\n    y: scrollable.scrollTop\n  };\n}\n\nmodule.exports = getUnboundedScrollPosition;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/fbjs/lib/getUnboundedScrollPosition.js\n ** module id = 146\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactInjection\n */\n\n'use strict';\n\nvar DOMProperty = require('./DOMProperty');\nvar EventPluginHub = require('./EventPluginHub');\nvar EventPluginUtils = require('./EventPluginUtils');\nvar ReactComponentEnvironment = require('./ReactComponentEnvironment');\nvar ReactClass = require('./ReactClass');\nvar ReactEmptyComponent = require('./ReactEmptyComponent');\nvar ReactBrowserEventEmitter = require('./ReactBrowserEventEmitter');\nvar ReactHostComponent = require('./ReactHostComponent');\nvar ReactUpdates = require('./ReactUpdates');\n\nvar ReactInjection = {\n  Component: ReactComponentEnvironment.injection,\n  Class: ReactClass.injection,\n  DOMProperty: DOMProperty.injection,\n  EmptyComponent: ReactEmptyComponent.injection,\n  EventPluginHub: EventPluginHub.injection,\n  EventPluginUtils: EventPluginUtils.injection,\n  EventEmitter: ReactBrowserEventEmitter.injection,\n  HostComponent: ReactHostComponent.injection,\n  Updates: ReactUpdates.injection\n};\n\nmodule.exports = ReactInjection;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactInjection.js\n ** module id = 147\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactReconcileTransaction\n */\n\n'use strict';\n\nvar _assign = require('object-assign');\n\nvar CallbackQueue = require('./CallbackQueue');\nvar PooledClass = require('./PooledClass');\nvar ReactBrowserEventEmitter = require('./ReactBrowserEventEmitter');\nvar ReactInputSelection = require('./ReactInputSelection');\nvar ReactInstrumentation = require('./ReactInstrumentation');\nvar Transaction = require('./Transaction');\nvar ReactUpdateQueue = require('./ReactUpdateQueue');\n\n/**\n * Ensures that, when possible, the selection range (currently selected text\n * input) is not disturbed by performing the transaction.\n */\nvar SELECTION_RESTORATION = {\n  /**\n   * @return {Selection} Selection information.\n   */\n  initialize: ReactInputSelection.getSelectionInformation,\n  /**\n   * @param {Selection} sel Selection information returned from `initialize`.\n   */\n  close: ReactInputSelection.restoreSelection\n};\n\n/**\n * Suppresses events (blur/focus) that could be inadvertently dispatched due to\n * high level DOM manipulations (like temporarily removing a text input from the\n * DOM).\n */\nvar EVENT_SUPPRESSION = {\n  /**\n   * @return {boolean} The enabled status of `ReactBrowserEventEmitter` before\n   * the reconciliation.\n   */\n  initialize: function () {\n    var currentlyEnabled = ReactBrowserEventEmitter.isEnabled();\n    ReactBrowserEventEmitter.setEnabled(false);\n    return currentlyEnabled;\n  },\n\n  /**\n   * @param {boolean} previouslyEnabled Enabled status of\n   *   `ReactBrowserEventEmitter` before the reconciliation occurred. `close`\n   *   restores the previous value.\n   */\n  close: function (previouslyEnabled) {\n    ReactBrowserEventEmitter.setEnabled(previouslyEnabled);\n  }\n};\n\n/**\n * Provides a queue for collecting `componentDidMount` and\n * `componentDidUpdate` callbacks during the transaction.\n */\nvar ON_DOM_READY_QUEUEING = {\n  /**\n   * Initializes the internal `onDOMReady` queue.\n   */\n  initialize: function () {\n    this.reactMountReady.reset();\n  },\n\n  /**\n   * After DOM is flushed, invoke all registered `onDOMReady` callbacks.\n   */\n  close: function () {\n    this.reactMountReady.notifyAll();\n  }\n};\n\n/**\n * Executed within the scope of the `Transaction` instance. Consider these as\n * being member methods, but with an implied ordering while being isolated from\n * each other.\n */\nvar TRANSACTION_WRAPPERS = [SELECTION_RESTORATION, EVENT_SUPPRESSION, ON_DOM_READY_QUEUEING];\n\nif (process.env.NODE_ENV !== 'production') {\n  TRANSACTION_WRAPPERS.push({\n    initialize: ReactInstrumentation.debugTool.onBeginFlush,\n    close: ReactInstrumentation.debugTool.onEndFlush\n  });\n}\n\n/**\n * Currently:\n * - The order that these are listed in the transaction is critical:\n * - Suppresses events.\n * - Restores selection range.\n *\n * Future:\n * - Restore document/overflow scroll positions that were unintentionally\n *   modified via DOM insertions above the top viewport boundary.\n * - Implement/integrate with customized constraint based layout system and keep\n *   track of which dimensions must be remeasured.\n *\n * @class ReactReconcileTransaction\n */\nfunction ReactReconcileTransaction(useCreateElement) {\n  this.reinitializeTransaction();\n  // Only server-side rendering really needs this option (see\n  // `ReactServerRendering`), but server-side uses\n  // `ReactServerRenderingTransaction` instead. This option is here so that it's\n  // accessible and defaults to false when `ReactDOMComponent` and\n  // `ReactDOMTextComponent` checks it in `mountComponent`.`\n  this.renderToStaticMarkup = false;\n  this.reactMountReady = CallbackQueue.getPooled(null);\n  this.useCreateElement = useCreateElement;\n}\n\nvar Mixin = {\n  /**\n   * @see Transaction\n   * @abstract\n   * @final\n   * @return {array<object>} List of operation wrap procedures.\n   *   TODO: convert to array<TransactionWrapper>\n   */\n  getTransactionWrappers: function () {\n    return TRANSACTION_WRAPPERS;\n  },\n\n  /**\n   * @return {object} The queue to collect `onDOMReady` callbacks with.\n   */\n  getReactMountReady: function () {\n    return this.reactMountReady;\n  },\n\n  /**\n   * @return {object} The queue to collect React async events.\n   */\n  getUpdateQueue: function () {\n    return ReactUpdateQueue;\n  },\n\n  /**\n   * Save current transaction state -- if the return value from this method is\n   * passed to `rollback`, the transaction will be reset to that state.\n   */\n  checkpoint: function () {\n    // reactMountReady is the our only stateful wrapper\n    return this.reactMountReady.checkpoint();\n  },\n\n  rollback: function (checkpoint) {\n    this.reactMountReady.rollback(checkpoint);\n  },\n\n  /**\n   * `PooledClass` looks for this, and will invoke this before allowing this\n   * instance to be reused.\n   */\n  destructor: function () {\n    CallbackQueue.release(this.reactMountReady);\n    this.reactMountReady = null;\n  }\n};\n\n_assign(ReactReconcileTransaction.prototype, Transaction.Mixin, Mixin);\n\nPooledClass.addPoolingTo(ReactReconcileTransaction);\n\nmodule.exports = ReactReconcileTransaction;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactReconcileTransaction.js\n ** module id = 148\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactInputSelection\n */\n\n'use strict';\n\nvar ReactDOMSelection = require('./ReactDOMSelection');\n\nvar containsNode = require('fbjs/lib/containsNode');\nvar focusNode = require('fbjs/lib/focusNode');\nvar getActiveElement = require('fbjs/lib/getActiveElement');\n\nfunction isInDocument(node) {\n  return containsNode(document.documentElement, node);\n}\n\n/**\n * @ReactInputSelection: React input selection module. Based on Selection.js,\n * but modified to be suitable for react and has a couple of bug fixes (doesn't\n * assume buttons have range selections allowed).\n * Input selection module for React.\n */\nvar ReactInputSelection = {\n\n  hasSelectionCapabilities: function (elem) {\n    var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n    return nodeName && (nodeName === 'input' && elem.type === 'text' || nodeName === 'textarea' || elem.contentEditable === 'true');\n  },\n\n  getSelectionInformation: function () {\n    var focusedElem = getActiveElement();\n    return {\n      focusedElem: focusedElem,\n      selectionRange: ReactInputSelection.hasSelectionCapabilities(focusedElem) ? ReactInputSelection.getSelection(focusedElem) : null\n    };\n  },\n\n  /**\n   * @restoreSelection: If any selection information was potentially lost,\n   * restore it. This is useful when performing operations that could remove dom\n   * nodes and place them back in, resulting in focus being lost.\n   */\n  restoreSelection: function (priorSelectionInformation) {\n    var curFocusedElem = getActiveElement();\n    var priorFocusedElem = priorSelectionInformation.focusedElem;\n    var priorSelectionRange = priorSelectionInformation.selectionRange;\n    if (curFocusedElem !== priorFocusedElem && isInDocument(priorFocusedElem)) {\n      if (ReactInputSelection.hasSelectionCapabilities(priorFocusedElem)) {\n        ReactInputSelection.setSelection(priorFocusedElem, priorSelectionRange);\n      }\n      focusNode(priorFocusedElem);\n    }\n  },\n\n  /**\n   * @getSelection: Gets the selection bounds of a focused textarea, input or\n   * contentEditable node.\n   * -@input: Look up selection bounds of this input\n   * -@return {start: selectionStart, end: selectionEnd}\n   */\n  getSelection: function (input) {\n    var selection;\n\n    if ('selectionStart' in input) {\n      // Modern browser with input or textarea.\n      selection = {\n        start: input.selectionStart,\n        end: input.selectionEnd\n      };\n    } else if (document.selection && input.nodeName && input.nodeName.toLowerCase() === 'input') {\n      // IE8 input.\n      var range = document.selection.createRange();\n      // There can only be one selection per document in IE, so it must\n      // be in our element.\n      if (range.parentElement() === input) {\n        selection = {\n          start: -range.moveStart('character', -input.value.length),\n          end: -range.moveEnd('character', -input.value.length)\n        };\n      }\n    } else {\n      // Content editable or old IE textarea.\n      selection = ReactDOMSelection.getOffsets(input);\n    }\n\n    return selection || { start: 0, end: 0 };\n  },\n\n  /**\n   * @setSelection: Sets the selection bounds of a textarea or input and focuses\n   * the input.\n   * -@input     Set selection bounds of this input or textarea\n   * -@offsets   Object of same form that is returned from get*\n   */\n  setSelection: function (input, offsets) {\n    var start = offsets.start;\n    var end = offsets.end;\n    if (end === undefined) {\n      end = start;\n    }\n\n    if ('selectionStart' in input) {\n      input.selectionStart = start;\n      input.selectionEnd = Math.min(end, input.value.length);\n    } else if (document.selection && input.nodeName && input.nodeName.toLowerCase() === 'input') {\n      var range = input.createTextRange();\n      range.collapse(true);\n      range.moveStart('character', start);\n      range.moveEnd('character', end - start);\n      range.select();\n    } else {\n      ReactDOMSelection.setOffsets(input, offsets);\n    }\n  }\n};\n\nmodule.exports = ReactInputSelection;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactInputSelection.js\n ** module id = 149\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMSelection\n */\n\n'use strict';\n\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\n\nvar getNodeForCharacterOffset = require('./getNodeForCharacterOffset');\nvar getTextContentAccessor = require('./getTextContentAccessor');\n\n/**\n * While `isCollapsed` is available on the Selection object and `collapsed`\n * is available on the Range object, IE11 sometimes gets them wrong.\n * If the anchor/focus nodes and offsets are the same, the range is collapsed.\n */\nfunction isCollapsed(anchorNode, anchorOffset, focusNode, focusOffset) {\n  return anchorNode === focusNode && anchorOffset === focusOffset;\n}\n\n/**\n * Get the appropriate anchor and focus node/offset pairs for IE.\n *\n * The catch here is that IE's selection API doesn't provide information\n * about whether the selection is forward or backward, so we have to\n * behave as though it's always forward.\n *\n * IE text differs from modern selection in that it behaves as though\n * block elements end with a new line. This means character offsets will\n * differ between the two APIs.\n *\n * @param {DOMElement} node\n * @return {object}\n */\nfunction getIEOffsets(node) {\n  var selection = document.selection;\n  var selectedRange = selection.createRange();\n  var selectedLength = selectedRange.text.length;\n\n  // Duplicate selection so we can move range without breaking user selection.\n  var fromStart = selectedRange.duplicate();\n  fromStart.moveToElementText(node);\n  fromStart.setEndPoint('EndToStart', selectedRange);\n\n  var startOffset = fromStart.text.length;\n  var endOffset = startOffset + selectedLength;\n\n  return {\n    start: startOffset,\n    end: endOffset\n  };\n}\n\n/**\n * @param {DOMElement} node\n * @return {?object}\n */\nfunction getModernOffsets(node) {\n  var selection = window.getSelection && window.getSelection();\n\n  if (!selection || selection.rangeCount === 0) {\n    return null;\n  }\n\n  var anchorNode = selection.anchorNode;\n  var anchorOffset = selection.anchorOffset;\n  var focusNode = selection.focusNode;\n  var focusOffset = selection.focusOffset;\n\n  var currentRange = selection.getRangeAt(0);\n\n  // In Firefox, range.startContainer and range.endContainer can be \"anonymous\n  // divs\", e.g. the up/down buttons on an <input type=\"number\">. Anonymous\n  // divs do not seem to expose properties, triggering a \"Permission denied\n  // error\" if any of its properties are accessed. The only seemingly possible\n  // way to avoid erroring is to access a property that typically works for\n  // non-anonymous divs and catch any error that may otherwise arise. See\n  // https://bugzilla.mozilla.org/show_bug.cgi?id=208427\n  try {\n    /* eslint-disable no-unused-expressions */\n    currentRange.startContainer.nodeType;\n    currentRange.endContainer.nodeType;\n    /* eslint-enable no-unused-expressions */\n  } catch (e) {\n    return null;\n  }\n\n  // If the node and offset values are the same, the selection is collapsed.\n  // `Selection.isCollapsed` is available natively, but IE sometimes gets\n  // this value wrong.\n  var isSelectionCollapsed = isCollapsed(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n  var rangeLength = isSelectionCollapsed ? 0 : currentRange.toString().length;\n\n  var tempRange = currentRange.cloneRange();\n  tempRange.selectNodeContents(node);\n  tempRange.setEnd(currentRange.startContainer, currentRange.startOffset);\n\n  var isTempRangeCollapsed = isCollapsed(tempRange.startContainer, tempRange.startOffset, tempRange.endContainer, tempRange.endOffset);\n\n  var start = isTempRangeCollapsed ? 0 : tempRange.toString().length;\n  var end = start + rangeLength;\n\n  // Detect whether the selection is backward.\n  var detectionRange = document.createRange();\n  detectionRange.setStart(anchorNode, anchorOffset);\n  detectionRange.setEnd(focusNode, focusOffset);\n  var isBackward = detectionRange.collapsed;\n\n  return {\n    start: isBackward ? end : start,\n    end: isBackward ? start : end\n  };\n}\n\n/**\n * @param {DOMElement|DOMTextNode} node\n * @param {object} offsets\n */\nfunction setIEOffsets(node, offsets) {\n  var range = document.selection.createRange().duplicate();\n  var start, end;\n\n  if (offsets.end === undefined) {\n    start = offsets.start;\n    end = start;\n  } else if (offsets.start > offsets.end) {\n    start = offsets.end;\n    end = offsets.start;\n  } else {\n    start = offsets.start;\n    end = offsets.end;\n  }\n\n  range.moveToElementText(node);\n  range.moveStart('character', start);\n  range.setEndPoint('EndToStart', range);\n  range.moveEnd('character', end - start);\n  range.select();\n}\n\n/**\n * In modern non-IE browsers, we can support both forward and backward\n * selections.\n *\n * Note: IE10+ supports the Selection object, but it does not support\n * the `extend` method, which means that even in modern IE, it's not possible\n * to programmatically create a backward selection. Thus, for all IE\n * versions, we use the old IE API to create our selections.\n *\n * @param {DOMElement|DOMTextNode} node\n * @param {object} offsets\n */\nfunction setModernOffsets(node, offsets) {\n  if (!window.getSelection) {\n    return;\n  }\n\n  var selection = window.getSelection();\n  var length = node[getTextContentAccessor()].length;\n  var start = Math.min(offsets.start, length);\n  var end = offsets.end === undefined ? start : Math.min(offsets.end, length);\n\n  // IE 11 uses modern selection, but doesn't support the extend method.\n  // Flip backward selections, so we can set with a single range.\n  if (!selection.extend && start > end) {\n    var temp = end;\n    end = start;\n    start = temp;\n  }\n\n  var startMarker = getNodeForCharacterOffset(node, start);\n  var endMarker = getNodeForCharacterOffset(node, end);\n\n  if (startMarker && endMarker) {\n    var range = document.createRange();\n    range.setStart(startMarker.node, startMarker.offset);\n    selection.removeAllRanges();\n\n    if (start > end) {\n      selection.addRange(range);\n      selection.extend(endMarker.node, endMarker.offset);\n    } else {\n      range.setEnd(endMarker.node, endMarker.offset);\n      selection.addRange(range);\n    }\n  }\n}\n\nvar useIEOffsets = ExecutionEnvironment.canUseDOM && 'selection' in document && !('getSelection' in window);\n\nvar ReactDOMSelection = {\n  /**\n   * @param {DOMElement} node\n   */\n  getOffsets: useIEOffsets ? getIEOffsets : getModernOffsets,\n\n  /**\n   * @param {DOMElement|DOMTextNode} node\n   * @param {object} offsets\n   */\n  setOffsets: useIEOffsets ? setIEOffsets : setModernOffsets\n};\n\nmodule.exports = ReactDOMSelection;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMSelection.js\n ** module id = 150\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getNodeForCharacterOffset\n */\n\n'use strict';\n\n/**\n * Given any node return the first leaf node without children.\n *\n * @param {DOMElement|DOMTextNode} node\n * @return {DOMElement|DOMTextNode}\n */\n\nfunction getLeafNode(node) {\n  while (node && node.firstChild) {\n    node = node.firstChild;\n  }\n  return node;\n}\n\n/**\n * Get the next sibling within a container. This will walk up the\n * DOM if a node's siblings have been exhausted.\n *\n * @param {DOMElement|DOMTextNode} node\n * @return {?DOMElement|DOMTextNode}\n */\nfunction getSiblingNode(node) {\n  while (node) {\n    if (node.nextSibling) {\n      return node.nextSibling;\n    }\n    node = node.parentNode;\n  }\n}\n\n/**\n * Get object describing the nodes which contain characters at offset.\n *\n * @param {DOMElement|DOMTextNode} root\n * @param {number} offset\n * @return {?object}\n */\nfunction getNodeForCharacterOffset(root, offset) {\n  var node = getLeafNode(root);\n  var nodeStart = 0;\n  var nodeEnd = 0;\n\n  while (node) {\n    if (node.nodeType === 3) {\n      nodeEnd = nodeStart + node.textContent.length;\n\n      if (nodeStart <= offset && nodeEnd >= offset) {\n        return {\n          node: node,\n          offset: offset - nodeStart\n        };\n      }\n\n      nodeStart = nodeEnd;\n    }\n\n    node = getLeafNode(getSiblingNode(node));\n  }\n}\n\nmodule.exports = getNodeForCharacterOffset;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/getNodeForCharacterOffset.js\n ** module id = 151\n ** module chunks = 4\n **/","'use strict';\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * \n */\n\nvar isTextNode = require('./isTextNode');\n\n/*eslint-disable no-bitwise */\n\n/**\n * Checks if a given DOM node contains or is another DOM node.\n */\nfunction containsNode(outerNode, innerNode) {\n  if (!outerNode || !innerNode) {\n    return false;\n  } else if (outerNode === innerNode) {\n    return true;\n  } else if (isTextNode(outerNode)) {\n    return false;\n  } else if (isTextNode(innerNode)) {\n    return containsNode(outerNode, innerNode.parentNode);\n  } else if ('contains' in outerNode) {\n    return outerNode.contains(innerNode);\n  } else if (outerNode.compareDocumentPosition) {\n    return !!(outerNode.compareDocumentPosition(innerNode) & 16);\n  } else {\n    return false;\n  }\n}\n\nmodule.exports = containsNode;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/fbjs/lib/containsNode.js\n ** module id = 152\n ** module chunks = 4\n **/","'use strict';\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @typechecks\n */\n\nvar isNode = require('./isNode');\n\n/**\n * @param {*} object The object to check.\n * @return {boolean} Whether or not the object is a DOM text node.\n */\nfunction isTextNode(object) {\n  return isNode(object) && object.nodeType == 3;\n}\n\nmodule.exports = isTextNode;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/fbjs/lib/isTextNode.js\n ** module id = 153\n ** module chunks = 4\n **/","'use strict';\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @typechecks\n */\n\n/**\n * @param {*} object The object to check.\n * @return {boolean} Whether or not the object is a DOM node.\n */\nfunction isNode(object) {\n  return !!(object && (typeof Node === 'function' ? object instanceof Node : typeof object === 'object' && typeof object.nodeType === 'number' && typeof object.nodeName === 'string'));\n}\n\nmodule.exports = isNode;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/fbjs/lib/isNode.js\n ** module id = 154\n ** module chunks = 4\n **/","'use strict';\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @typechecks\n */\n\n/* eslint-disable fb-www/typeof-undefined */\n\n/**\n * Same as document.activeElement but wraps in a try-catch block. In IE it is\n * not safe to call document.activeElement if there is nothing focused.\n *\n * The activeElement will be null only if the document or document body is not\n * yet defined.\n */\nfunction getActiveElement() /*?DOMElement*/{\n  if (typeof document === 'undefined') {\n    return null;\n  }\n  try {\n    return document.activeElement || document.body;\n  } catch (e) {\n    return document.body;\n  }\n}\n\nmodule.exports = getActiveElement;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/fbjs/lib/getActiveElement.js\n ** module id = 155\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SVGDOMPropertyConfig\n */\n\n'use strict';\n\nvar NS = {\n  xlink: 'http://www.w3.org/1999/xlink',\n  xml: 'http://www.w3.org/XML/1998/namespace'\n};\n\n// We use attributes for everything SVG so let's avoid some duplication and run\n// code instead.\n// The following are all specified in the HTML config already so we exclude here.\n// - class (as className)\n// - color\n// - height\n// - id\n// - lang\n// - max\n// - media\n// - method\n// - min\n// - name\n// - style\n// - target\n// - type\n// - width\nvar ATTRS = {\n  accentHeight: 'accent-height',\n  accumulate: 0,\n  additive: 0,\n  alignmentBaseline: 'alignment-baseline',\n  allowReorder: 'allowReorder',\n  alphabetic: 0,\n  amplitude: 0,\n  arabicForm: 'arabic-form',\n  ascent: 0,\n  attributeName: 'attributeName',\n  attributeType: 'attributeType',\n  autoReverse: 'autoReverse',\n  azimuth: 0,\n  baseFrequency: 'baseFrequency',\n  baseProfile: 'baseProfile',\n  baselineShift: 'baseline-shift',\n  bbox: 0,\n  begin: 0,\n  bias: 0,\n  by: 0,\n  calcMode: 'calcMode',\n  capHeight: 'cap-height',\n  clip: 0,\n  clipPath: 'clip-path',\n  clipRule: 'clip-rule',\n  clipPathUnits: 'clipPathUnits',\n  colorInterpolation: 'color-interpolation',\n  colorInterpolationFilters: 'color-interpolation-filters',\n  colorProfile: 'color-profile',\n  colorRendering: 'color-rendering',\n  contentScriptType: 'contentScriptType',\n  contentStyleType: 'contentStyleType',\n  cursor: 0,\n  cx: 0,\n  cy: 0,\n  d: 0,\n  decelerate: 0,\n  descent: 0,\n  diffuseConstant: 'diffuseConstant',\n  direction: 0,\n  display: 0,\n  divisor: 0,\n  dominantBaseline: 'dominant-baseline',\n  dur: 0,\n  dx: 0,\n  dy: 0,\n  edgeMode: 'edgeMode',\n  elevation: 0,\n  enableBackground: 'enable-background',\n  end: 0,\n  exponent: 0,\n  externalResourcesRequired: 'externalResourcesRequired',\n  fill: 0,\n  fillOpacity: 'fill-opacity',\n  fillRule: 'fill-rule',\n  filter: 0,\n  filterRes: 'filterRes',\n  filterUnits: 'filterUnits',\n  floodColor: 'flood-color',\n  floodOpacity: 'flood-opacity',\n  focusable: 0,\n  fontFamily: 'font-family',\n  fontSize: 'font-size',\n  fontSizeAdjust: 'font-size-adjust',\n  fontStretch: 'font-stretch',\n  fontStyle: 'font-style',\n  fontVariant: 'font-variant',\n  fontWeight: 'font-weight',\n  format: 0,\n  from: 0,\n  fx: 0,\n  fy: 0,\n  g1: 0,\n  g2: 0,\n  glyphName: 'glyph-name',\n  glyphOrientationHorizontal: 'glyph-orientation-horizontal',\n  glyphOrientationVertical: 'glyph-orientation-vertical',\n  glyphRef: 'glyphRef',\n  gradientTransform: 'gradientTransform',\n  gradientUnits: 'gradientUnits',\n  hanging: 0,\n  horizAdvX: 'horiz-adv-x',\n  horizOriginX: 'horiz-origin-x',\n  ideographic: 0,\n  imageRendering: 'image-rendering',\n  'in': 0,\n  in2: 0,\n  intercept: 0,\n  k: 0,\n  k1: 0,\n  k2: 0,\n  k3: 0,\n  k4: 0,\n  kernelMatrix: 'kernelMatrix',\n  kernelUnitLength: 'kernelUnitLength',\n  kerning: 0,\n  keyPoints: 'keyPoints',\n  keySplines: 'keySplines',\n  keyTimes: 'keyTimes',\n  lengthAdjust: 'lengthAdjust',\n  letterSpacing: 'letter-spacing',\n  lightingColor: 'lighting-color',\n  limitingConeAngle: 'limitingConeAngle',\n  local: 0,\n  markerEnd: 'marker-end',\n  markerMid: 'marker-mid',\n  markerStart: 'marker-start',\n  markerHeight: 'markerHeight',\n  markerUnits: 'markerUnits',\n  markerWidth: 'markerWidth',\n  mask: 0,\n  maskContentUnits: 'maskContentUnits',\n  maskUnits: 'maskUnits',\n  mathematical: 0,\n  mode: 0,\n  numOctaves: 'numOctaves',\n  offset: 0,\n  opacity: 0,\n  operator: 0,\n  order: 0,\n  orient: 0,\n  orientation: 0,\n  origin: 0,\n  overflow: 0,\n  overlinePosition: 'overline-position',\n  overlineThickness: 'overline-thickness',\n  paintOrder: 'paint-order',\n  panose1: 'panose-1',\n  pathLength: 'pathLength',\n  patternContentUnits: 'patternContentUnits',\n  patternTransform: 'patternTransform',\n  patternUnits: 'patternUnits',\n  pointerEvents: 'pointer-events',\n  points: 0,\n  pointsAtX: 'pointsAtX',\n  pointsAtY: 'pointsAtY',\n  pointsAtZ: 'pointsAtZ',\n  preserveAlpha: 'preserveAlpha',\n  preserveAspectRatio: 'preserveAspectRatio',\n  primitiveUnits: 'primitiveUnits',\n  r: 0,\n  radius: 0,\n  refX: 'refX',\n  refY: 'refY',\n  renderingIntent: 'rendering-intent',\n  repeatCount: 'repeatCount',\n  repeatDur: 'repeatDur',\n  requiredExtensions: 'requiredExtensions',\n  requiredFeatures: 'requiredFeatures',\n  restart: 0,\n  result: 0,\n  rotate: 0,\n  rx: 0,\n  ry: 0,\n  scale: 0,\n  seed: 0,\n  shapeRendering: 'shape-rendering',\n  slope: 0,\n  spacing: 0,\n  specularConstant: 'specularConstant',\n  specularExponent: 'specularExponent',\n  speed: 0,\n  spreadMethod: 'spreadMethod',\n  startOffset: 'startOffset',\n  stdDeviation: 'stdDeviation',\n  stemh: 0,\n  stemv: 0,\n  stitchTiles: 'stitchTiles',\n  stopColor: 'stop-color',\n  stopOpacity: 'stop-opacity',\n  strikethroughPosition: 'strikethrough-position',\n  strikethroughThickness: 'strikethrough-thickness',\n  string: 0,\n  stroke: 0,\n  strokeDasharray: 'stroke-dasharray',\n  strokeDashoffset: 'stroke-dashoffset',\n  strokeLinecap: 'stroke-linecap',\n  strokeLinejoin: 'stroke-linejoin',\n  strokeMiterlimit: 'stroke-miterlimit',\n  strokeOpacity: 'stroke-opacity',\n  strokeWidth: 'stroke-width',\n  surfaceScale: 'surfaceScale',\n  systemLanguage: 'systemLanguage',\n  tableValues: 'tableValues',\n  targetX: 'targetX',\n  targetY: 'targetY',\n  textAnchor: 'text-anchor',\n  textDecoration: 'text-decoration',\n  textRendering: 'text-rendering',\n  textLength: 'textLength',\n  to: 0,\n  transform: 0,\n  u1: 0,\n  u2: 0,\n  underlinePosition: 'underline-position',\n  underlineThickness: 'underline-thickness',\n  unicode: 0,\n  unicodeBidi: 'unicode-bidi',\n  unicodeRange: 'unicode-range',\n  unitsPerEm: 'units-per-em',\n  vAlphabetic: 'v-alphabetic',\n  vHanging: 'v-hanging',\n  vIdeographic: 'v-ideographic',\n  vMathematical: 'v-mathematical',\n  values: 0,\n  vectorEffect: 'vector-effect',\n  version: 0,\n  vertAdvY: 'vert-adv-y',\n  vertOriginX: 'vert-origin-x',\n  vertOriginY: 'vert-origin-y',\n  viewBox: 'viewBox',\n  viewTarget: 'viewTarget',\n  visibility: 0,\n  widths: 0,\n  wordSpacing: 'word-spacing',\n  writingMode: 'writing-mode',\n  x: 0,\n  xHeight: 'x-height',\n  x1: 0,\n  x2: 0,\n  xChannelSelector: 'xChannelSelector',\n  xlinkActuate: 'xlink:actuate',\n  xlinkArcrole: 'xlink:arcrole',\n  xlinkHref: 'xlink:href',\n  xlinkRole: 'xlink:role',\n  xlinkShow: 'xlink:show',\n  xlinkTitle: 'xlink:title',\n  xlinkType: 'xlink:type',\n  xmlBase: 'xml:base',\n  xmlns: 0,\n  xmlnsXlink: 'xmlns:xlink',\n  xmlLang: 'xml:lang',\n  xmlSpace: 'xml:space',\n  y: 0,\n  y1: 0,\n  y2: 0,\n  yChannelSelector: 'yChannelSelector',\n  z: 0,\n  zoomAndPan: 'zoomAndPan'\n};\n\nvar SVGDOMPropertyConfig = {\n  Properties: {},\n  DOMAttributeNamespaces: {\n    xlinkActuate: NS.xlink,\n    xlinkArcrole: NS.xlink,\n    xlinkHref: NS.xlink,\n    xlinkRole: NS.xlink,\n    xlinkShow: NS.xlink,\n    xlinkTitle: NS.xlink,\n    xlinkType: NS.xlink,\n    xmlBase: NS.xml,\n    xmlLang: NS.xml,\n    xmlSpace: NS.xml\n  },\n  DOMAttributeNames: {}\n};\n\nObject.keys(ATTRS).forEach(function (key) {\n  SVGDOMPropertyConfig.Properties[key] = 0;\n  if (ATTRS[key]) {\n    SVGDOMPropertyConfig.DOMAttributeNames[key] = ATTRS[key];\n  }\n});\n\nmodule.exports = SVGDOMPropertyConfig;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SVGDOMPropertyConfig.js\n ** module id = 156\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SelectEventPlugin\n */\n\n'use strict';\n\nvar EventConstants = require('./EventConstants');\nvar EventPropagators = require('./EventPropagators');\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\nvar ReactDOMComponentTree = require('./ReactDOMComponentTree');\nvar ReactInputSelection = require('./ReactInputSelection');\nvar SyntheticEvent = require('./SyntheticEvent');\n\nvar getActiveElement = require('fbjs/lib/getActiveElement');\nvar isTextInputElement = require('./isTextInputElement');\nvar keyOf = require('fbjs/lib/keyOf');\nvar shallowEqual = require('fbjs/lib/shallowEqual');\n\nvar topLevelTypes = EventConstants.topLevelTypes;\n\nvar skipSelectionChangeEvent = ExecutionEnvironment.canUseDOM && 'documentMode' in document && document.documentMode <= 11;\n\nvar eventTypes = {\n  select: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onSelect: null }),\n      captured: keyOf({ onSelectCapture: null })\n    },\n    dependencies: [topLevelTypes.topBlur, topLevelTypes.topContextMenu, topLevelTypes.topFocus, topLevelTypes.topKeyDown, topLevelTypes.topMouseDown, topLevelTypes.topMouseUp, topLevelTypes.topSelectionChange]\n  }\n};\n\nvar activeElement = null;\nvar activeElementInst = null;\nvar lastSelection = null;\nvar mouseDown = false;\n\n// Track whether a listener exists for this plugin. If none exist, we do\n// not extract events. See #3639.\nvar hasListener = false;\nvar ON_SELECT_KEY = keyOf({ onSelect: null });\n\n/**\n * Get an object which is a unique representation of the current selection.\n *\n * The return value will not be consistent across nodes or browsers, but\n * two identical selections on the same node will return identical objects.\n *\n * @param {DOMElement} node\n * @return {object}\n */\nfunction getSelection(node) {\n  if ('selectionStart' in node && ReactInputSelection.hasSelectionCapabilities(node)) {\n    return {\n      start: node.selectionStart,\n      end: node.selectionEnd\n    };\n  } else if (window.getSelection) {\n    var selection = window.getSelection();\n    return {\n      anchorNode: selection.anchorNode,\n      anchorOffset: selection.anchorOffset,\n      focusNode: selection.focusNode,\n      focusOffset: selection.focusOffset\n    };\n  } else if (document.selection) {\n    var range = document.selection.createRange();\n    return {\n      parentElement: range.parentElement(),\n      text: range.text,\n      top: range.boundingTop,\n      left: range.boundingLeft\n    };\n  }\n}\n\n/**\n * Poll selection to see whether it's changed.\n *\n * @param {object} nativeEvent\n * @return {?SyntheticEvent}\n */\nfunction constructSelectEvent(nativeEvent, nativeEventTarget) {\n  // Ensure we have the right element, and that the user is not dragging a\n  // selection (this matches native `select` event behavior). In HTML5, select\n  // fires only on input and textarea thus if there's no focused element we\n  // won't dispatch.\n  if (mouseDown || activeElement == null || activeElement !== getActiveElement()) {\n    return null;\n  }\n\n  // Only fire when selection has actually changed.\n  var currentSelection = getSelection(activeElement);\n  if (!lastSelection || !shallowEqual(lastSelection, currentSelection)) {\n    lastSelection = currentSelection;\n\n    var syntheticEvent = SyntheticEvent.getPooled(eventTypes.select, activeElementInst, nativeEvent, nativeEventTarget);\n\n    syntheticEvent.type = 'select';\n    syntheticEvent.target = activeElement;\n\n    EventPropagators.accumulateTwoPhaseDispatches(syntheticEvent);\n\n    return syntheticEvent;\n  }\n\n  return null;\n}\n\n/**\n * This plugin creates an `onSelect` event that normalizes select events\n * across form elements.\n *\n * Supported elements are:\n * - input (see `isTextInputElement`)\n * - textarea\n * - contentEditable\n *\n * This differs from native browser implementations in the following ways:\n * - Fires on contentEditable fields as well as inputs.\n * - Fires for collapsed selection.\n * - Fires after user input.\n */\nvar SelectEventPlugin = {\n\n  eventTypes: eventTypes,\n\n  extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n    if (!hasListener) {\n      return null;\n    }\n\n    var targetNode = targetInst ? ReactDOMComponentTree.getNodeFromInstance(targetInst) : window;\n\n    switch (topLevelType) {\n      // Track the input node that has focus.\n      case topLevelTypes.topFocus:\n        if (isTextInputElement(targetNode) || targetNode.contentEditable === 'true') {\n          activeElement = targetNode;\n          activeElementInst = targetInst;\n          lastSelection = null;\n        }\n        break;\n      case topLevelTypes.topBlur:\n        activeElement = null;\n        activeElementInst = null;\n        lastSelection = null;\n        break;\n\n      // Don't fire the event while the user is dragging. This matches the\n      // semantics of the native select event.\n      case topLevelTypes.topMouseDown:\n        mouseDown = true;\n        break;\n      case topLevelTypes.topContextMenu:\n      case topLevelTypes.topMouseUp:\n        mouseDown = false;\n        return constructSelectEvent(nativeEvent, nativeEventTarget);\n\n      // Chrome and IE fire non-standard event when selection is changed (and\n      // sometimes when it hasn't). IE's event fires out of order with respect\n      // to key and input events on deletion, so we discard it.\n      //\n      // Firefox doesn't support selectionchange, so check selection status\n      // after each key entry. The selection changes after keydown and before\n      // keyup, but we check on keydown as well in the case of holding down a\n      // key, when multiple keydown events are fired but only one keyup is.\n      // This is also our approach for IE handling, for the reason above.\n      case topLevelTypes.topSelectionChange:\n        if (skipSelectionChangeEvent) {\n          break;\n        }\n      // falls through\n      case topLevelTypes.topKeyDown:\n      case topLevelTypes.topKeyUp:\n        return constructSelectEvent(nativeEvent, nativeEventTarget);\n    }\n\n    return null;\n  },\n\n  didPutListener: function (inst, registrationName, listener) {\n    if (registrationName === ON_SELECT_KEY) {\n      hasListener = true;\n    }\n  }\n};\n\nmodule.exports = SelectEventPlugin;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SelectEventPlugin.js\n ** module id = 157\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SimpleEventPlugin\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar EventConstants = require('./EventConstants');\nvar EventListener = require('fbjs/lib/EventListener');\nvar EventPropagators = require('./EventPropagators');\nvar ReactDOMComponentTree = require('./ReactDOMComponentTree');\nvar SyntheticAnimationEvent = require('./SyntheticAnimationEvent');\nvar SyntheticClipboardEvent = require('./SyntheticClipboardEvent');\nvar SyntheticEvent = require('./SyntheticEvent');\nvar SyntheticFocusEvent = require('./SyntheticFocusEvent');\nvar SyntheticKeyboardEvent = require('./SyntheticKeyboardEvent');\nvar SyntheticMouseEvent = require('./SyntheticMouseEvent');\nvar SyntheticDragEvent = require('./SyntheticDragEvent');\nvar SyntheticTouchEvent = require('./SyntheticTouchEvent');\nvar SyntheticTransitionEvent = require('./SyntheticTransitionEvent');\nvar SyntheticUIEvent = require('./SyntheticUIEvent');\nvar SyntheticWheelEvent = require('./SyntheticWheelEvent');\n\nvar emptyFunction = require('fbjs/lib/emptyFunction');\nvar getEventCharCode = require('./getEventCharCode');\nvar invariant = require('fbjs/lib/invariant');\nvar keyOf = require('fbjs/lib/keyOf');\n\nvar topLevelTypes = EventConstants.topLevelTypes;\n\nvar eventTypes = {\n  abort: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onAbort: true }),\n      captured: keyOf({ onAbortCapture: true })\n    }\n  },\n  animationEnd: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onAnimationEnd: true }),\n      captured: keyOf({ onAnimationEndCapture: true })\n    }\n  },\n  animationIteration: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onAnimationIteration: true }),\n      captured: keyOf({ onAnimationIterationCapture: true })\n    }\n  },\n  animationStart: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onAnimationStart: true }),\n      captured: keyOf({ onAnimationStartCapture: true })\n    }\n  },\n  blur: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onBlur: true }),\n      captured: keyOf({ onBlurCapture: true })\n    }\n  },\n  canPlay: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onCanPlay: true }),\n      captured: keyOf({ onCanPlayCapture: true })\n    }\n  },\n  canPlayThrough: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onCanPlayThrough: true }),\n      captured: keyOf({ onCanPlayThroughCapture: true })\n    }\n  },\n  click: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onClick: true }),\n      captured: keyOf({ onClickCapture: true })\n    }\n  },\n  contextMenu: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onContextMenu: true }),\n      captured: keyOf({ onContextMenuCapture: true })\n    }\n  },\n  copy: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onCopy: true }),\n      captured: keyOf({ onCopyCapture: true })\n    }\n  },\n  cut: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onCut: true }),\n      captured: keyOf({ onCutCapture: true })\n    }\n  },\n  doubleClick: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onDoubleClick: true }),\n      captured: keyOf({ onDoubleClickCapture: true })\n    }\n  },\n  drag: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onDrag: true }),\n      captured: keyOf({ onDragCapture: true })\n    }\n  },\n  dragEnd: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onDragEnd: true }),\n      captured: keyOf({ onDragEndCapture: true })\n    }\n  },\n  dragEnter: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onDragEnter: true }),\n      captured: keyOf({ onDragEnterCapture: true })\n    }\n  },\n  dragExit: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onDragExit: true }),\n      captured: keyOf({ onDragExitCapture: true })\n    }\n  },\n  dragLeave: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onDragLeave: true }),\n      captured: keyOf({ onDragLeaveCapture: true })\n    }\n  },\n  dragOver: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onDragOver: true }),\n      captured: keyOf({ onDragOverCapture: true })\n    }\n  },\n  dragStart: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onDragStart: true }),\n      captured: keyOf({ onDragStartCapture: true })\n    }\n  },\n  drop: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onDrop: true }),\n      captured: keyOf({ onDropCapture: true })\n    }\n  },\n  durationChange: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onDurationChange: true }),\n      captured: keyOf({ onDurationChangeCapture: true })\n    }\n  },\n  emptied: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onEmptied: true }),\n      captured: keyOf({ onEmptiedCapture: true })\n    }\n  },\n  encrypted: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onEncrypted: true }),\n      captured: keyOf({ onEncryptedCapture: true })\n    }\n  },\n  ended: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onEnded: true }),\n      captured: keyOf({ onEndedCapture: true })\n    }\n  },\n  error: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onError: true }),\n      captured: keyOf({ onErrorCapture: true })\n    }\n  },\n  focus: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onFocus: true }),\n      captured: keyOf({ onFocusCapture: true })\n    }\n  },\n  input: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onInput: true }),\n      captured: keyOf({ onInputCapture: true })\n    }\n  },\n  invalid: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onInvalid: true }),\n      captured: keyOf({ onInvalidCapture: true })\n    }\n  },\n  keyDown: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onKeyDown: true }),\n      captured: keyOf({ onKeyDownCapture: true })\n    }\n  },\n  keyPress: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onKeyPress: true }),\n      captured: keyOf({ onKeyPressCapture: true })\n    }\n  },\n  keyUp: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onKeyUp: true }),\n      captured: keyOf({ onKeyUpCapture: true })\n    }\n  },\n  load: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onLoad: true }),\n      captured: keyOf({ onLoadCapture: true })\n    }\n  },\n  loadedData: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onLoadedData: true }),\n      captured: keyOf({ onLoadedDataCapture: true })\n    }\n  },\n  loadedMetadata: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onLoadedMetadata: true }),\n      captured: keyOf({ onLoadedMetadataCapture: true })\n    }\n  },\n  loadStart: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onLoadStart: true }),\n      captured: keyOf({ onLoadStartCapture: true })\n    }\n  },\n  // Note: We do not allow listening to mouseOver events. Instead, use the\n  // onMouseEnter/onMouseLeave created by `EnterLeaveEventPlugin`.\n  mouseDown: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onMouseDown: true }),\n      captured: keyOf({ onMouseDownCapture: true })\n    }\n  },\n  mouseMove: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onMouseMove: true }),\n      captured: keyOf({ onMouseMoveCapture: true })\n    }\n  },\n  mouseOut: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onMouseOut: true }),\n      captured: keyOf({ onMouseOutCapture: true })\n    }\n  },\n  mouseOver: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onMouseOver: true }),\n      captured: keyOf({ onMouseOverCapture: true })\n    }\n  },\n  mouseUp: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onMouseUp: true }),\n      captured: keyOf({ onMouseUpCapture: true })\n    }\n  },\n  paste: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onPaste: true }),\n      captured: keyOf({ onPasteCapture: true })\n    }\n  },\n  pause: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onPause: true }),\n      captured: keyOf({ onPauseCapture: true })\n    }\n  },\n  play: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onPlay: true }),\n      captured: keyOf({ onPlayCapture: true })\n    }\n  },\n  playing: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onPlaying: true }),\n      captured: keyOf({ onPlayingCapture: true })\n    }\n  },\n  progress: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onProgress: true }),\n      captured: keyOf({ onProgressCapture: true })\n    }\n  },\n  rateChange: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onRateChange: true }),\n      captured: keyOf({ onRateChangeCapture: true })\n    }\n  },\n  reset: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onReset: true }),\n      captured: keyOf({ onResetCapture: true })\n    }\n  },\n  scroll: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onScroll: true }),\n      captured: keyOf({ onScrollCapture: true })\n    }\n  },\n  seeked: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onSeeked: true }),\n      captured: keyOf({ onSeekedCapture: true })\n    }\n  },\n  seeking: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onSeeking: true }),\n      captured: keyOf({ onSeekingCapture: true })\n    }\n  },\n  stalled: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onStalled: true }),\n      captured: keyOf({ onStalledCapture: true })\n    }\n  },\n  submit: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onSubmit: true }),\n      captured: keyOf({ onSubmitCapture: true })\n    }\n  },\n  suspend: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onSuspend: true }),\n      captured: keyOf({ onSuspendCapture: true })\n    }\n  },\n  timeUpdate: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onTimeUpdate: true }),\n      captured: keyOf({ onTimeUpdateCapture: true })\n    }\n  },\n  touchCancel: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onTouchCancel: true }),\n      captured: keyOf({ onTouchCancelCapture: true })\n    }\n  },\n  touchEnd: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onTouchEnd: true }),\n      captured: keyOf({ onTouchEndCapture: true })\n    }\n  },\n  touchMove: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onTouchMove: true }),\n      captured: keyOf({ onTouchMoveCapture: true })\n    }\n  },\n  touchStart: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onTouchStart: true }),\n      captured: keyOf({ onTouchStartCapture: true })\n    }\n  },\n  transitionEnd: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onTransitionEnd: true }),\n      captured: keyOf({ onTransitionEndCapture: true })\n    }\n  },\n  volumeChange: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onVolumeChange: true }),\n      captured: keyOf({ onVolumeChangeCapture: true })\n    }\n  },\n  waiting: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onWaiting: true }),\n      captured: keyOf({ onWaitingCapture: true })\n    }\n  },\n  wheel: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onWheel: true }),\n      captured: keyOf({ onWheelCapture: true })\n    }\n  }\n};\n\nvar topLevelEventsToDispatchConfig = {\n  topAbort: eventTypes.abort,\n  topAnimationEnd: eventTypes.animationEnd,\n  topAnimationIteration: eventTypes.animationIteration,\n  topAnimationStart: eventTypes.animationStart,\n  topBlur: eventTypes.blur,\n  topCanPlay: eventTypes.canPlay,\n  topCanPlayThrough: eventTypes.canPlayThrough,\n  topClick: eventTypes.click,\n  topContextMenu: eventTypes.contextMenu,\n  topCopy: eventTypes.copy,\n  topCut: eventTypes.cut,\n  topDoubleClick: eventTypes.doubleClick,\n  topDrag: eventTypes.drag,\n  topDragEnd: eventTypes.dragEnd,\n  topDragEnter: eventTypes.dragEnter,\n  topDragExit: eventTypes.dragExit,\n  topDragLeave: eventTypes.dragLeave,\n  topDragOver: eventTypes.dragOver,\n  topDragStart: eventTypes.dragStart,\n  topDrop: eventTypes.drop,\n  topDurationChange: eventTypes.durationChange,\n  topEmptied: eventTypes.emptied,\n  topEncrypted: eventTypes.encrypted,\n  topEnded: eventTypes.ended,\n  topError: eventTypes.error,\n  topFocus: eventTypes.focus,\n  topInput: eventTypes.input,\n  topInvalid: eventTypes.invalid,\n  topKeyDown: eventTypes.keyDown,\n  topKeyPress: eventTypes.keyPress,\n  topKeyUp: eventTypes.keyUp,\n  topLoad: eventTypes.load,\n  topLoadedData: eventTypes.loadedData,\n  topLoadedMetadata: eventTypes.loadedMetadata,\n  topLoadStart: eventTypes.loadStart,\n  topMouseDown: eventTypes.mouseDown,\n  topMouseMove: eventTypes.mouseMove,\n  topMouseOut: eventTypes.mouseOut,\n  topMouseOver: eventTypes.mouseOver,\n  topMouseUp: eventTypes.mouseUp,\n  topPaste: eventTypes.paste,\n  topPause: eventTypes.pause,\n  topPlay: eventTypes.play,\n  topPlaying: eventTypes.playing,\n  topProgress: eventTypes.progress,\n  topRateChange: eventTypes.rateChange,\n  topReset: eventTypes.reset,\n  topScroll: eventTypes.scroll,\n  topSeeked: eventTypes.seeked,\n  topSeeking: eventTypes.seeking,\n  topStalled: eventTypes.stalled,\n  topSubmit: eventTypes.submit,\n  topSuspend: eventTypes.suspend,\n  topTimeUpdate: eventTypes.timeUpdate,\n  topTouchCancel: eventTypes.touchCancel,\n  topTouchEnd: eventTypes.touchEnd,\n  topTouchMove: eventTypes.touchMove,\n  topTouchStart: eventTypes.touchStart,\n  topTransitionEnd: eventTypes.transitionEnd,\n  topVolumeChange: eventTypes.volumeChange,\n  topWaiting: eventTypes.waiting,\n  topWheel: eventTypes.wheel\n};\n\nfor (var type in topLevelEventsToDispatchConfig) {\n  topLevelEventsToDispatchConfig[type].dependencies = [type];\n}\n\nvar ON_CLICK_KEY = keyOf({ onClick: null });\nvar onClickListeners = {};\n\nfunction getDictionaryKey(inst) {\n  return '.' + inst._rootNodeID;\n}\n\nvar SimpleEventPlugin = {\n\n  eventTypes: eventTypes,\n\n  extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n    var dispatchConfig = topLevelEventsToDispatchConfig[topLevelType];\n    if (!dispatchConfig) {\n      return null;\n    }\n    var EventConstructor;\n    switch (topLevelType) {\n      case topLevelTypes.topAbort:\n      case topLevelTypes.topCanPlay:\n      case topLevelTypes.topCanPlayThrough:\n      case topLevelTypes.topDurationChange:\n      case topLevelTypes.topEmptied:\n      case topLevelTypes.topEncrypted:\n      case topLevelTypes.topEnded:\n      case topLevelTypes.topError:\n      case topLevelTypes.topInput:\n      case topLevelTypes.topInvalid:\n      case topLevelTypes.topLoad:\n      case topLevelTypes.topLoadedData:\n      case topLevelTypes.topLoadedMetadata:\n      case topLevelTypes.topLoadStart:\n      case topLevelTypes.topPause:\n      case topLevelTypes.topPlay:\n      case topLevelTypes.topPlaying:\n      case topLevelTypes.topProgress:\n      case topLevelTypes.topRateChange:\n      case topLevelTypes.topReset:\n      case topLevelTypes.topSeeked:\n      case topLevelTypes.topSeeking:\n      case topLevelTypes.topStalled:\n      case topLevelTypes.topSubmit:\n      case topLevelTypes.topSuspend:\n      case topLevelTypes.topTimeUpdate:\n      case topLevelTypes.topVolumeChange:\n      case topLevelTypes.topWaiting:\n        // HTML Events\n        // @see http://www.w3.org/TR/html5/index.html#events-0\n        EventConstructor = SyntheticEvent;\n        break;\n      case topLevelTypes.topKeyPress:\n        // Firefox creates a keypress event for function keys too. This removes\n        // the unwanted keypress events. Enter is however both printable and\n        // non-printable. One would expect Tab to be as well (but it isn't).\n        if (getEventCharCode(nativeEvent) === 0) {\n          return null;\n        }\n      /* falls through */\n      case topLevelTypes.topKeyDown:\n      case topLevelTypes.topKeyUp:\n        EventConstructor = SyntheticKeyboardEvent;\n        break;\n      case topLevelTypes.topBlur:\n      case topLevelTypes.topFocus:\n        EventConstructor = SyntheticFocusEvent;\n        break;\n      case topLevelTypes.topClick:\n        // Firefox creates a click event on right mouse clicks. This removes the\n        // unwanted click events.\n        if (nativeEvent.button === 2) {\n          return null;\n        }\n      /* falls through */\n      case topLevelTypes.topContextMenu:\n      case topLevelTypes.topDoubleClick:\n      case topLevelTypes.topMouseDown:\n      case topLevelTypes.topMouseMove:\n      case topLevelTypes.topMouseOut:\n      case topLevelTypes.topMouseOver:\n      case topLevelTypes.topMouseUp:\n        EventConstructor = SyntheticMouseEvent;\n        break;\n      case topLevelTypes.topDrag:\n      case topLevelTypes.topDragEnd:\n      case topLevelTypes.topDragEnter:\n      case topLevelTypes.topDragExit:\n      case topLevelTypes.topDragLeave:\n      case topLevelTypes.topDragOver:\n      case topLevelTypes.topDragStart:\n      case topLevelTypes.topDrop:\n        EventConstructor = SyntheticDragEvent;\n        break;\n      case topLevelTypes.topTouchCancel:\n      case topLevelTypes.topTouchEnd:\n      case topLevelTypes.topTouchMove:\n      case topLevelTypes.topTouchStart:\n        EventConstructor = SyntheticTouchEvent;\n        break;\n      case topLevelTypes.topAnimationEnd:\n      case topLevelTypes.topAnimationIteration:\n      case topLevelTypes.topAnimationStart:\n        EventConstructor = SyntheticAnimationEvent;\n        break;\n      case topLevelTypes.topTransitionEnd:\n        EventConstructor = SyntheticTransitionEvent;\n        break;\n      case topLevelTypes.topScroll:\n        EventConstructor = SyntheticUIEvent;\n        break;\n      case topLevelTypes.topWheel:\n        EventConstructor = SyntheticWheelEvent;\n        break;\n      case topLevelTypes.topCopy:\n      case topLevelTypes.topCut:\n      case topLevelTypes.topPaste:\n        EventConstructor = SyntheticClipboardEvent;\n        break;\n    }\n    !EventConstructor ? process.env.NODE_ENV !== 'production' ? invariant(false, 'SimpleEventPlugin: Unhandled event type, `%s`.', topLevelType) : _prodInvariant('86', topLevelType) : void 0;\n    var event = EventConstructor.getPooled(dispatchConfig, targetInst, nativeEvent, nativeEventTarget);\n    EventPropagators.accumulateTwoPhaseDispatches(event);\n    return event;\n  },\n\n  didPutListener: function (inst, registrationName, listener) {\n    // Mobile Safari does not fire properly bubble click events on\n    // non-interactive elements, which means delegated click listeners do not\n    // fire. The workaround for this bug involves attaching an empty click\n    // listener on the target node.\n    if (registrationName === ON_CLICK_KEY) {\n      var key = getDictionaryKey(inst);\n      var node = ReactDOMComponentTree.getNodeFromInstance(inst);\n      if (!onClickListeners[key]) {\n        onClickListeners[key] = EventListener.listen(node, 'click', emptyFunction);\n      }\n    }\n  },\n\n  willDeleteListener: function (inst, registrationName) {\n    if (registrationName === ON_CLICK_KEY) {\n      var key = getDictionaryKey(inst);\n      onClickListeners[key].remove();\n      delete onClickListeners[key];\n    }\n  }\n\n};\n\nmodule.exports = SimpleEventPlugin;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SimpleEventPlugin.js\n ** module id = 158\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticAnimationEvent\n */\n\n'use strict';\n\nvar SyntheticEvent = require('./SyntheticEvent');\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/css3-animations/#AnimationEvent-interface\n * @see https://developer.mozilla.org/en-US/docs/Web/API/AnimationEvent\n */\nvar AnimationEventInterface = {\n  animationName: null,\n  elapsedTime: null,\n  pseudoElement: null\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticEvent}\n */\nfunction SyntheticAnimationEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n  return SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticEvent.augmentClass(SyntheticAnimationEvent, AnimationEventInterface);\n\nmodule.exports = SyntheticAnimationEvent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SyntheticAnimationEvent.js\n ** module id = 159\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticClipboardEvent\n */\n\n'use strict';\n\nvar SyntheticEvent = require('./SyntheticEvent');\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/clipboard-apis/\n */\nvar ClipboardEventInterface = {\n  clipboardData: function (event) {\n    return 'clipboardData' in event ? event.clipboardData : window.clipboardData;\n  }\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticClipboardEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n  return SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticEvent.augmentClass(SyntheticClipboardEvent, ClipboardEventInterface);\n\nmodule.exports = SyntheticClipboardEvent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SyntheticClipboardEvent.js\n ** module id = 160\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticFocusEvent\n */\n\n'use strict';\n\nvar SyntheticUIEvent = require('./SyntheticUIEvent');\n\n/**\n * @interface FocusEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar FocusEventInterface = {\n  relatedTarget: null\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticFocusEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n  return SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticUIEvent.augmentClass(SyntheticFocusEvent, FocusEventInterface);\n\nmodule.exports = SyntheticFocusEvent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SyntheticFocusEvent.js\n ** module id = 161\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticKeyboardEvent\n */\n\n'use strict';\n\nvar SyntheticUIEvent = require('./SyntheticUIEvent');\n\nvar getEventCharCode = require('./getEventCharCode');\nvar getEventKey = require('./getEventKey');\nvar getEventModifierState = require('./getEventModifierState');\n\n/**\n * @interface KeyboardEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar KeyboardEventInterface = {\n  key: getEventKey,\n  location: null,\n  ctrlKey: null,\n  shiftKey: null,\n  altKey: null,\n  metaKey: null,\n  repeat: null,\n  locale: null,\n  getModifierState: getEventModifierState,\n  // Legacy Interface\n  charCode: function (event) {\n    // `charCode` is the result of a KeyPress event and represents the value of\n    // the actual printable character.\n\n    // KeyPress is deprecated, but its replacement is not yet final and not\n    // implemented in any major browser. Only KeyPress has charCode.\n    if (event.type === 'keypress') {\n      return getEventCharCode(event);\n    }\n    return 0;\n  },\n  keyCode: function (event) {\n    // `keyCode` is the result of a KeyDown/Up event and represents the value of\n    // physical keyboard key.\n\n    // The actual meaning of the value depends on the users' keyboard layout\n    // which cannot be detected. Assuming that it is a US keyboard layout\n    // provides a surprisingly accurate mapping for US and European users.\n    // Due to this, it is left to the user to implement at this time.\n    if (event.type === 'keydown' || event.type === 'keyup') {\n      return event.keyCode;\n    }\n    return 0;\n  },\n  which: function (event) {\n    // `which` is an alias for either `keyCode` or `charCode` depending on the\n    // type of the event.\n    if (event.type === 'keypress') {\n      return getEventCharCode(event);\n    }\n    if (event.type === 'keydown' || event.type === 'keyup') {\n      return event.keyCode;\n    }\n    return 0;\n  }\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticKeyboardEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n  return SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticUIEvent.augmentClass(SyntheticKeyboardEvent, KeyboardEventInterface);\n\nmodule.exports = SyntheticKeyboardEvent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SyntheticKeyboardEvent.js\n ** module id = 162\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getEventCharCode\n */\n\n'use strict';\n\n/**\n * `charCode` represents the actual \"character code\" and is safe to use with\n * `String.fromCharCode`. As such, only keys that correspond to printable\n * characters produce a valid `charCode`, the only exception to this is Enter.\n * The Tab-key is considered non-printable and does not have a `charCode`,\n * presumably because it does not produce a tab-character in browsers.\n *\n * @param {object} nativeEvent Native browser event.\n * @return {number} Normalized `charCode` property.\n */\n\nfunction getEventCharCode(nativeEvent) {\n  var charCode;\n  var keyCode = nativeEvent.keyCode;\n\n  if ('charCode' in nativeEvent) {\n    charCode = nativeEvent.charCode;\n\n    // FF does not set `charCode` for the Enter-key, check against `keyCode`.\n    if (charCode === 0 && keyCode === 13) {\n      charCode = 13;\n    }\n  } else {\n    // IE8 does not implement `charCode`, but `keyCode` has the correct value.\n    charCode = keyCode;\n  }\n\n  // Some non-printable keys are reported in `charCode`/`keyCode`, discard them.\n  // Must not discard the (non-)printable Enter-key.\n  if (charCode >= 32 || charCode === 13) {\n    return charCode;\n  }\n\n  return 0;\n}\n\nmodule.exports = getEventCharCode;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/getEventCharCode.js\n ** module id = 163\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getEventKey\n */\n\n'use strict';\n\nvar getEventCharCode = require('./getEventCharCode');\n\n/**\n * Normalization of deprecated HTML5 `key` values\n * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names\n */\nvar normalizeKey = {\n  'Esc': 'Escape',\n  'Spacebar': ' ',\n  'Left': 'ArrowLeft',\n  'Up': 'ArrowUp',\n  'Right': 'ArrowRight',\n  'Down': 'ArrowDown',\n  'Del': 'Delete',\n  'Win': 'OS',\n  'Menu': 'ContextMenu',\n  'Apps': 'ContextMenu',\n  'Scroll': 'ScrollLock',\n  'MozPrintableKey': 'Unidentified'\n};\n\n/**\n * Translation from legacy `keyCode` to HTML5 `key`\n * Only special keys supported, all others depend on keyboard layout or browser\n * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names\n */\nvar translateToKey = {\n  8: 'Backspace',\n  9: 'Tab',\n  12: 'Clear',\n  13: 'Enter',\n  16: 'Shift',\n  17: 'Control',\n  18: 'Alt',\n  19: 'Pause',\n  20: 'CapsLock',\n  27: 'Escape',\n  32: ' ',\n  33: 'PageUp',\n  34: 'PageDown',\n  35: 'End',\n  36: 'Home',\n  37: 'ArrowLeft',\n  38: 'ArrowUp',\n  39: 'ArrowRight',\n  40: 'ArrowDown',\n  45: 'Insert',\n  46: 'Delete',\n  112: 'F1', 113: 'F2', 114: 'F3', 115: 'F4', 116: 'F5', 117: 'F6',\n  118: 'F7', 119: 'F8', 120: 'F9', 121: 'F10', 122: 'F11', 123: 'F12',\n  144: 'NumLock',\n  145: 'ScrollLock',\n  224: 'Meta'\n};\n\n/**\n * @param {object} nativeEvent Native browser event.\n * @return {string} Normalized `key` property.\n */\nfunction getEventKey(nativeEvent) {\n  if (nativeEvent.key) {\n    // Normalize inconsistent values reported by browsers due to\n    // implementations of a working draft specification.\n\n    // FireFox implements `key` but returns `MozPrintableKey` for all\n    // printable characters (normalized to `Unidentified`), ignore it.\n    var key = normalizeKey[nativeEvent.key] || nativeEvent.key;\n    if (key !== 'Unidentified') {\n      return key;\n    }\n  }\n\n  // Browser does not implement `key`, polyfill as much of it as we can.\n  if (nativeEvent.type === 'keypress') {\n    var charCode = getEventCharCode(nativeEvent);\n\n    // The enter-key is technically both printable and non-printable and can\n    // thus be captured by `keypress`, no other non-printable key should.\n    return charCode === 13 ? 'Enter' : String.fromCharCode(charCode);\n  }\n  if (nativeEvent.type === 'keydown' || nativeEvent.type === 'keyup') {\n    // While user keyboard layout determines the actual meaning of each\n    // `keyCode` value, almost all function keys have a universal value.\n    return translateToKey[nativeEvent.keyCode] || 'Unidentified';\n  }\n  return '';\n}\n\nmodule.exports = getEventKey;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/getEventKey.js\n ** module id = 164\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticDragEvent\n */\n\n'use strict';\n\nvar SyntheticMouseEvent = require('./SyntheticMouseEvent');\n\n/**\n * @interface DragEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar DragEventInterface = {\n  dataTransfer: null\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticDragEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n  return SyntheticMouseEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticMouseEvent.augmentClass(SyntheticDragEvent, DragEventInterface);\n\nmodule.exports = SyntheticDragEvent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SyntheticDragEvent.js\n ** module id = 165\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticTouchEvent\n */\n\n'use strict';\n\nvar SyntheticUIEvent = require('./SyntheticUIEvent');\n\nvar getEventModifierState = require('./getEventModifierState');\n\n/**\n * @interface TouchEvent\n * @see http://www.w3.org/TR/touch-events/\n */\nvar TouchEventInterface = {\n  touches: null,\n  targetTouches: null,\n  changedTouches: null,\n  altKey: null,\n  metaKey: null,\n  ctrlKey: null,\n  shiftKey: null,\n  getModifierState: getEventModifierState\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticTouchEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n  return SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticUIEvent.augmentClass(SyntheticTouchEvent, TouchEventInterface);\n\nmodule.exports = SyntheticTouchEvent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SyntheticTouchEvent.js\n ** module id = 166\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticTransitionEvent\n */\n\n'use strict';\n\nvar SyntheticEvent = require('./SyntheticEvent');\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/2009/WD-css3-transitions-20090320/#transition-events-\n * @see https://developer.mozilla.org/en-US/docs/Web/API/TransitionEvent\n */\nvar TransitionEventInterface = {\n  propertyName: null,\n  elapsedTime: null,\n  pseudoElement: null\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticEvent}\n */\nfunction SyntheticTransitionEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n  return SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticEvent.augmentClass(SyntheticTransitionEvent, TransitionEventInterface);\n\nmodule.exports = SyntheticTransitionEvent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SyntheticTransitionEvent.js\n ** module id = 167\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticWheelEvent\n */\n\n'use strict';\n\nvar SyntheticMouseEvent = require('./SyntheticMouseEvent');\n\n/**\n * @interface WheelEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar WheelEventInterface = {\n  deltaX: function (event) {\n    return 'deltaX' in event ? event.deltaX :\n    // Fallback to `wheelDeltaX` for Webkit and normalize (right is positive).\n    'wheelDeltaX' in event ? -event.wheelDeltaX : 0;\n  },\n  deltaY: function (event) {\n    return 'deltaY' in event ? event.deltaY :\n    // Fallback to `wheelDeltaY` for Webkit and normalize (down is positive).\n    'wheelDeltaY' in event ? -event.wheelDeltaY :\n    // Fallback to `wheelDelta` for IE<9 and normalize (down is positive).\n    'wheelDelta' in event ? -event.wheelDelta : 0;\n  },\n  deltaZ: null,\n\n  // Browsers without \"deltaMode\" is reporting in raw wheel delta where one\n  // notch on the scroll is always +/- 120, roughly equivalent to pixels.\n  // A good approximation of DOM_DELTA_LINE (1) is 5% of viewport size or\n  // ~40 pixels, for DOM_DELTA_SCREEN (2) it is 87.5% of viewport size.\n  deltaMode: null\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticMouseEvent}\n */\nfunction SyntheticWheelEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n  return SyntheticMouseEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticMouseEvent.augmentClass(SyntheticWheelEvent, WheelEventInterface);\n\nmodule.exports = SyntheticWheelEvent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SyntheticWheelEvent.js\n ** module id = 168\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactMount\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar DOMLazyTree = require('./DOMLazyTree');\nvar DOMProperty = require('./DOMProperty');\nvar ReactBrowserEventEmitter = require('./ReactBrowserEventEmitter');\nvar ReactCurrentOwner = require('./ReactCurrentOwner');\nvar ReactDOMComponentTree = require('./ReactDOMComponentTree');\nvar ReactDOMContainerInfo = require('./ReactDOMContainerInfo');\nvar ReactDOMFeatureFlags = require('./ReactDOMFeatureFlags');\nvar ReactElement = require('./ReactElement');\nvar ReactFeatureFlags = require('./ReactFeatureFlags');\nvar ReactInstanceMap = require('./ReactInstanceMap');\nvar ReactInstrumentation = require('./ReactInstrumentation');\nvar ReactMarkupChecksum = require('./ReactMarkupChecksum');\nvar ReactReconciler = require('./ReactReconciler');\nvar ReactUpdateQueue = require('./ReactUpdateQueue');\nvar ReactUpdates = require('./ReactUpdates');\n\nvar emptyObject = require('fbjs/lib/emptyObject');\nvar instantiateReactComponent = require('./instantiateReactComponent');\nvar invariant = require('fbjs/lib/invariant');\nvar setInnerHTML = require('./setInnerHTML');\nvar shouldUpdateReactComponent = require('./shouldUpdateReactComponent');\nvar warning = require('fbjs/lib/warning');\n\nvar ATTR_NAME = DOMProperty.ID_ATTRIBUTE_NAME;\nvar ROOT_ATTR_NAME = DOMProperty.ROOT_ATTRIBUTE_NAME;\n\nvar ELEMENT_NODE_TYPE = 1;\nvar DOC_NODE_TYPE = 9;\nvar DOCUMENT_FRAGMENT_NODE_TYPE = 11;\n\nvar instancesByReactRootID = {};\n\n/**\n * Finds the index of the first character\n * that's not common between the two given strings.\n *\n * @return {number} the index of the character where the strings diverge\n */\nfunction firstDifferenceIndex(string1, string2) {\n  var minLen = Math.min(string1.length, string2.length);\n  for (var i = 0; i < minLen; i++) {\n    if (string1.charAt(i) !== string2.charAt(i)) {\n      return i;\n    }\n  }\n  return string1.length === string2.length ? -1 : minLen;\n}\n\n/**\n * @param {DOMElement|DOMDocument} container DOM element that may contain\n * a React component\n * @return {?*} DOM element that may have the reactRoot ID, or null.\n */\nfunction getReactRootElementInContainer(container) {\n  if (!container) {\n    return null;\n  }\n\n  if (container.nodeType === DOC_NODE_TYPE) {\n    return container.documentElement;\n  } else {\n    return container.firstChild;\n  }\n}\n\nfunction internalGetID(node) {\n  // If node is something like a window, document, or text node, none of\n  // which support attributes or a .getAttribute method, gracefully return\n  // the empty string, as if the attribute were missing.\n  return node.getAttribute && node.getAttribute(ATTR_NAME) || '';\n}\n\n/**\n * Mounts this component and inserts it into the DOM.\n *\n * @param {ReactComponent} componentInstance The instance to mount.\n * @param {DOMElement} container DOM element to mount into.\n * @param {ReactReconcileTransaction} transaction\n * @param {boolean} shouldReuseMarkup If true, do not insert markup\n */\nfunction mountComponentIntoNode(wrapperInstance, container, transaction, shouldReuseMarkup, context) {\n  var markerName;\n  if (ReactFeatureFlags.logTopLevelRenders) {\n    var wrappedElement = wrapperInstance._currentElement.props;\n    var type = wrappedElement.type;\n    markerName = 'React mount: ' + (typeof type === 'string' ? type : type.displayName || type.name);\n    console.time(markerName);\n  }\n\n  var markup = ReactReconciler.mountComponent(wrapperInstance, transaction, null, ReactDOMContainerInfo(wrapperInstance, container), context);\n\n  if (markerName) {\n    console.timeEnd(markerName);\n  }\n\n  wrapperInstance._renderedComponent._topLevelWrapper = wrapperInstance;\n  ReactMount._mountImageIntoNode(markup, container, wrapperInstance, shouldReuseMarkup, transaction);\n}\n\n/**\n * Batched mount.\n *\n * @param {ReactComponent} componentInstance The instance to mount.\n * @param {DOMElement} container DOM element to mount into.\n * @param {boolean} shouldReuseMarkup If true, do not insert markup\n */\nfunction batchedMountComponentIntoNode(componentInstance, container, shouldReuseMarkup, context) {\n  var transaction = ReactUpdates.ReactReconcileTransaction.getPooled(\n  /* useCreateElement */\n  !shouldReuseMarkup && ReactDOMFeatureFlags.useCreateElement);\n  transaction.perform(mountComponentIntoNode, null, componentInstance, container, transaction, shouldReuseMarkup, context);\n  ReactUpdates.ReactReconcileTransaction.release(transaction);\n}\n\n/**\n * Unmounts a component and removes it from the DOM.\n *\n * @param {ReactComponent} instance React component instance.\n * @param {DOMElement} container DOM element to unmount from.\n * @final\n * @internal\n * @see {ReactMount.unmountComponentAtNode}\n */\nfunction unmountComponentFromNode(instance, container, safely) {\n  if (process.env.NODE_ENV !== 'production') {\n    ReactInstrumentation.debugTool.onBeginFlush();\n  }\n  ReactReconciler.unmountComponent(instance, safely);\n  if (process.env.NODE_ENV !== 'production') {\n    ReactInstrumentation.debugTool.onEndFlush();\n  }\n\n  if (container.nodeType === DOC_NODE_TYPE) {\n    container = container.documentElement;\n  }\n\n  // http://jsperf.com/emptying-a-node\n  while (container.lastChild) {\n    container.removeChild(container.lastChild);\n  }\n}\n\n/**\n * True if the supplied DOM node has a direct React-rendered child that is\n * not a React root element. Useful for warning in `render`,\n * `unmountComponentAtNode`, etc.\n *\n * @param {?DOMElement} node The candidate DOM node.\n * @return {boolean} True if the DOM element contains a direct child that was\n * rendered by React but is not a root element.\n * @internal\n */\nfunction hasNonRootReactChild(container) {\n  var rootEl = getReactRootElementInContainer(container);\n  if (rootEl) {\n    var inst = ReactDOMComponentTree.getInstanceFromNode(rootEl);\n    return !!(inst && inst._hostParent);\n  }\n}\n\nfunction getHostRootInstanceInContainer(container) {\n  var rootEl = getReactRootElementInContainer(container);\n  var prevHostInstance = rootEl && ReactDOMComponentTree.getInstanceFromNode(rootEl);\n  return prevHostInstance && !prevHostInstance._hostParent ? prevHostInstance : null;\n}\n\nfunction getTopLevelWrapperInContainer(container) {\n  var root = getHostRootInstanceInContainer(container);\n  return root ? root._hostContainerInfo._topLevelWrapper : null;\n}\n\n/**\n * Temporary (?) hack so that we can store all top-level pending updates on\n * composites instead of having to worry about different types of components\n * here.\n */\nvar topLevelRootCounter = 1;\nvar TopLevelWrapper = function () {\n  this.rootID = topLevelRootCounter++;\n};\nTopLevelWrapper.prototype.isReactComponent = {};\nif (process.env.NODE_ENV !== 'production') {\n  TopLevelWrapper.displayName = 'TopLevelWrapper';\n}\nTopLevelWrapper.prototype.render = function () {\n  // this.props is actually a ReactElement\n  return this.props;\n};\n\n/**\n * Mounting is the process of initializing a React component by creating its\n * representative DOM elements and inserting them into a supplied `container`.\n * Any prior content inside `container` is destroyed in the process.\n *\n *   ReactMount.render(\n *     component,\n *     document.getElementById('container')\n *   );\n *\n *   <div id=\"container\">                   <-- Supplied `container`.\n *     <div data-reactid=\".3\">              <-- Rendered reactRoot of React\n *       // ...                                 component.\n *     </div>\n *   </div>\n *\n * Inside of `container`, the first element rendered is the \"reactRoot\".\n */\nvar ReactMount = {\n\n  TopLevelWrapper: TopLevelWrapper,\n\n  /**\n   * Used by devtools. The keys are not important.\n   */\n  _instancesByReactRootID: instancesByReactRootID,\n\n  /**\n   * This is a hook provided to support rendering React components while\n   * ensuring that the apparent scroll position of its `container` does not\n   * change.\n   *\n   * @param {DOMElement} container The `container` being rendered into.\n   * @param {function} renderCallback This must be called once to do the render.\n   */\n  scrollMonitor: function (container, renderCallback) {\n    renderCallback();\n  },\n\n  /**\n   * Take a component that's already mounted into the DOM and replace its props\n   * @param {ReactComponent} prevComponent component instance already in the DOM\n   * @param {ReactElement} nextElement component instance to render\n   * @param {DOMElement} container container to render into\n   * @param {?function} callback function triggered on completion\n   */\n  _updateRootComponent: function (prevComponent, nextElement, nextContext, container, callback) {\n    ReactMount.scrollMonitor(container, function () {\n      ReactUpdateQueue.enqueueElementInternal(prevComponent, nextElement, nextContext);\n      if (callback) {\n        ReactUpdateQueue.enqueueCallbackInternal(prevComponent, callback);\n      }\n    });\n\n    return prevComponent;\n  },\n\n  /**\n   * Render a new component into the DOM. Hooked by devtools!\n   *\n   * @param {ReactElement} nextElement element to render\n   * @param {DOMElement} container container to render into\n   * @param {boolean} shouldReuseMarkup if we should skip the markup insertion\n   * @return {ReactComponent} nextComponent\n   */\n  _renderNewRootComponent: function (nextElement, container, shouldReuseMarkup, context) {\n    // Various parts of our code (such as ReactCompositeComponent's\n    // _renderValidatedComponent) assume that calls to render aren't nested;\n    // verify that that's the case.\n    process.env.NODE_ENV !== 'production' ? warning(ReactCurrentOwner.current == null, '_renderNewRootComponent(): Render methods should be a pure function ' + 'of props and state; triggering nested component updates from ' + 'render is not allowed. If necessary, trigger nested updates in ' + 'componentDidUpdate. Check the render method of %s.', ReactCurrentOwner.current && ReactCurrentOwner.current.getName() || 'ReactCompositeComponent') : void 0;\n\n    !(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE || container.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE)) ? process.env.NODE_ENV !== 'production' ? invariant(false, '_registerComponent(...): Target container is not a DOM element.') : _prodInvariant('37') : void 0;\n\n    ReactBrowserEventEmitter.ensureScrollValueMonitoring();\n    var componentInstance = instantiateReactComponent(nextElement, false);\n\n    // The initial render is synchronous but any updates that happen during\n    // rendering, in componentWillMount or componentDidMount, will be batched\n    // according to the current batching strategy.\n\n    ReactUpdates.batchedUpdates(batchedMountComponentIntoNode, componentInstance, container, shouldReuseMarkup, context);\n\n    var wrapperID = componentInstance._instance.rootID;\n    instancesByReactRootID[wrapperID] = componentInstance;\n\n    if (process.env.NODE_ENV !== 'production') {\n      // The instance here is TopLevelWrapper so we report mount for its child.\n      ReactInstrumentation.debugTool.onMountRootComponent(componentInstance._renderedComponent._debugID);\n    }\n\n    return componentInstance;\n  },\n\n  /**\n   * Renders a React component into the DOM in the supplied `container`.\n   *\n   * If the React component was previously rendered into `container`, this will\n   * perform an update on it and only mutate the DOM as necessary to reflect the\n   * latest React component.\n   *\n   * @param {ReactComponent} parentComponent The conceptual parent of this render tree.\n   * @param {ReactElement} nextElement Component element to render.\n   * @param {DOMElement} container DOM element to render into.\n   * @param {?function} callback function triggered on completion\n   * @return {ReactComponent} Component instance rendered in `container`.\n   */\n  renderSubtreeIntoContainer: function (parentComponent, nextElement, container, callback) {\n    !(parentComponent != null && ReactInstanceMap.has(parentComponent)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'parentComponent must be a valid React Component') : _prodInvariant('38') : void 0;\n    return ReactMount._renderSubtreeIntoContainer(parentComponent, nextElement, container, callback);\n  },\n\n  _renderSubtreeIntoContainer: function (parentComponent, nextElement, container, callback) {\n    ReactUpdateQueue.validateCallback(callback, 'ReactDOM.render');\n    !ReactElement.isValidElement(nextElement) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactDOM.render(): Invalid component element.%s', typeof nextElement === 'string' ? ' Instead of passing a string like \\'div\\', pass ' + 'React.createElement(\\'div\\') or <div />.' : typeof nextElement === 'function' ? ' Instead of passing a class like Foo, pass ' + 'React.createElement(Foo) or <Foo />.' :\n    // Check if it quacks like an element\n    nextElement != null && nextElement.props !== undefined ? ' This may be caused by unintentionally loading two independent ' + 'copies of React.' : '') : _prodInvariant('39', typeof nextElement === 'string' ? ' Instead of passing a string like \\'div\\', pass ' + 'React.createElement(\\'div\\') or <div />.' : typeof nextElement === 'function' ? ' Instead of passing a class like Foo, pass ' + 'React.createElement(Foo) or <Foo />.' : nextElement != null && nextElement.props !== undefined ? ' This may be caused by unintentionally loading two independent ' + 'copies of React.' : '') : void 0;\n\n    process.env.NODE_ENV !== 'production' ? warning(!container || !container.tagName || container.tagName.toUpperCase() !== 'BODY', 'render(): Rendering components directly into document.body is ' + 'discouraged, since its children are often manipulated by third-party ' + 'scripts and browser extensions. This may lead to subtle ' + 'reconciliation issues. Try rendering into a container element created ' + 'for your app.') : void 0;\n\n    var nextWrappedElement = ReactElement(TopLevelWrapper, null, null, null, null, null, nextElement);\n\n    var nextContext;\n    if (parentComponent) {\n      var parentInst = ReactInstanceMap.get(parentComponent);\n      nextContext = parentInst._processChildContext(parentInst._context);\n    } else {\n      nextContext = emptyObject;\n    }\n\n    var prevComponent = getTopLevelWrapperInContainer(container);\n\n    if (prevComponent) {\n      var prevWrappedElement = prevComponent._currentElement;\n      var prevElement = prevWrappedElement.props;\n      if (shouldUpdateReactComponent(prevElement, nextElement)) {\n        var publicInst = prevComponent._renderedComponent.getPublicInstance();\n        var updatedCallback = callback && function () {\n          callback.call(publicInst);\n        };\n        ReactMount._updateRootComponent(prevComponent, nextWrappedElement, nextContext, container, updatedCallback);\n        return publicInst;\n      } else {\n        ReactMount.unmountComponentAtNode(container);\n      }\n    }\n\n    var reactRootElement = getReactRootElementInContainer(container);\n    var containerHasReactMarkup = reactRootElement && !!internalGetID(reactRootElement);\n    var containerHasNonRootReactChild = hasNonRootReactChild(container);\n\n    if (process.env.NODE_ENV !== 'production') {\n      process.env.NODE_ENV !== 'production' ? warning(!containerHasNonRootReactChild, 'render(...): Replacing React-rendered children with a new root ' + 'component. If you intended to update the children of this node, ' + 'you should instead have the existing children update their state ' + 'and render the new components instead of calling ReactDOM.render.') : void 0;\n\n      if (!containerHasReactMarkup || reactRootElement.nextSibling) {\n        var rootElementSibling = reactRootElement;\n        while (rootElementSibling) {\n          if (internalGetID(rootElementSibling)) {\n            process.env.NODE_ENV !== 'production' ? warning(false, 'render(): Target node has markup rendered by React, but there ' + 'are unrelated nodes as well. This is most commonly caused by ' + 'white-space inserted around server-rendered markup.') : void 0;\n            break;\n          }\n          rootElementSibling = rootElementSibling.nextSibling;\n        }\n      }\n    }\n\n    var shouldReuseMarkup = containerHasReactMarkup && !prevComponent && !containerHasNonRootReactChild;\n    var component = ReactMount._renderNewRootComponent(nextWrappedElement, container, shouldReuseMarkup, nextContext)._renderedComponent.getPublicInstance();\n    if (callback) {\n      callback.call(component);\n    }\n    return component;\n  },\n\n  /**\n   * Renders a React component into the DOM in the supplied `container`.\n   * See https://facebook.github.io/react/docs/top-level-api.html#reactdom.render\n   *\n   * If the React component was previously rendered into `container`, this will\n   * perform an update on it and only mutate the DOM as necessary to reflect the\n   * latest React component.\n   *\n   * @param {ReactElement} nextElement Component element to render.\n   * @param {DOMElement} container DOM element to render into.\n   * @param {?function} callback function triggered on completion\n   * @return {ReactComponent} Component instance rendered in `container`.\n   */\n  render: function (nextElement, container, callback) {\n    return ReactMount._renderSubtreeIntoContainer(null, nextElement, container, callback);\n  },\n\n  /**\n   * Unmounts and destroys the React component rendered in the `container`.\n   * See https://facebook.github.io/react/docs/top-level-api.html#reactdom.unmountcomponentatnode\n   *\n   * @param {DOMElement} container DOM element containing a React component.\n   * @return {boolean} True if a component was found in and unmounted from\n   *                   `container`\n   */\n  unmountComponentAtNode: function (container) {\n    // Various parts of our code (such as ReactCompositeComponent's\n    // _renderValidatedComponent) assume that calls to render aren't nested;\n    // verify that that's the case. (Strictly speaking, unmounting won't cause a\n    // render but we still don't expect to be in a render call here.)\n    process.env.NODE_ENV !== 'production' ? warning(ReactCurrentOwner.current == null, 'unmountComponentAtNode(): Render methods should be a pure function ' + 'of props and state; triggering nested component updates from render ' + 'is not allowed. If necessary, trigger nested updates in ' + 'componentDidUpdate. Check the render method of %s.', ReactCurrentOwner.current && ReactCurrentOwner.current.getName() || 'ReactCompositeComponent') : void 0;\n\n    !(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE || container.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'unmountComponentAtNode(...): Target container is not a DOM element.') : _prodInvariant('40') : void 0;\n\n    var prevComponent = getTopLevelWrapperInContainer(container);\n    if (!prevComponent) {\n      // Check if the node being unmounted was rendered by React, but isn't a\n      // root node.\n      var containerHasNonRootReactChild = hasNonRootReactChild(container);\n\n      // Check if the container itself is a React root node.\n      var isContainerReactRoot = container.nodeType === 1 && container.hasAttribute(ROOT_ATTR_NAME);\n\n      if (process.env.NODE_ENV !== 'production') {\n        process.env.NODE_ENV !== 'production' ? warning(!containerHasNonRootReactChild, 'unmountComponentAtNode(): The node you\\'re attempting to unmount ' + 'was rendered by React and is not a top-level container. %s', isContainerReactRoot ? 'You may have accidentally passed in a React root node instead ' + 'of its container.' : 'Instead, have the parent component update its state and ' + 'rerender in order to remove this component.') : void 0;\n      }\n\n      return false;\n    }\n    delete instancesByReactRootID[prevComponent._instance.rootID];\n    ReactUpdates.batchedUpdates(unmountComponentFromNode, prevComponent, container, false);\n    return true;\n  },\n\n  _mountImageIntoNode: function (markup, container, instance, shouldReuseMarkup, transaction) {\n    !(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE || container.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'mountComponentIntoNode(...): Target container is not valid.') : _prodInvariant('41') : void 0;\n\n    if (shouldReuseMarkup) {\n      var rootElement = getReactRootElementInContainer(container);\n      if (ReactMarkupChecksum.canReuseMarkup(markup, rootElement)) {\n        ReactDOMComponentTree.precacheNode(instance, rootElement);\n        return;\n      } else {\n        var checksum = rootElement.getAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME);\n        rootElement.removeAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME);\n\n        var rootMarkup = rootElement.outerHTML;\n        rootElement.setAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME, checksum);\n\n        var normalizedMarkup = markup;\n        if (process.env.NODE_ENV !== 'production') {\n          // because rootMarkup is retrieved from the DOM, various normalizations\n          // will have occurred which will not be present in `markup`. Here,\n          // insert markup into a <div> or <iframe> depending on the container\n          // type to perform the same normalizations before comparing.\n          var normalizer;\n          if (container.nodeType === ELEMENT_NODE_TYPE) {\n            normalizer = document.createElement('div');\n            normalizer.innerHTML = markup;\n            normalizedMarkup = normalizer.innerHTML;\n          } else {\n            normalizer = document.createElement('iframe');\n            document.body.appendChild(normalizer);\n            normalizer.contentDocument.write(markup);\n            normalizedMarkup = normalizer.contentDocument.documentElement.outerHTML;\n            document.body.removeChild(normalizer);\n          }\n        }\n\n        var diffIndex = firstDifferenceIndex(normalizedMarkup, rootMarkup);\n        var difference = ' (client) ' + normalizedMarkup.substring(diffIndex - 20, diffIndex + 20) + '\\n (server) ' + rootMarkup.substring(diffIndex - 20, diffIndex + 20);\n\n        !(container.nodeType !== DOC_NODE_TYPE) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'You\\'re trying to render a component to the document using server rendering but the checksum was invalid. This usually means you rendered a different component type or props on the client from the one on the server, or your render() methods are impure. React cannot handle this case due to cross-browser quirks by rendering at the document root. You should look for environment dependent code in your components and ensure the props are the same client and server side:\\n%s', difference) : _prodInvariant('42', difference) : void 0;\n\n        if (process.env.NODE_ENV !== 'production') {\n          process.env.NODE_ENV !== 'production' ? warning(false, 'React attempted to reuse markup in a container but the ' + 'checksum was invalid. This generally means that you are ' + 'using server rendering and the markup generated on the ' + 'server was not what the client was expecting. React injected ' + 'new markup to compensate which works but you have lost many ' + 'of the benefits of server rendering. Instead, figure out ' + 'why the markup being generated is different on the client ' + 'or server:\\n%s', difference) : void 0;\n        }\n      }\n    }\n\n    !(container.nodeType !== DOC_NODE_TYPE) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'You\\'re trying to render a component to the document but you didn\\'t use server rendering. We can\\'t do this without using server rendering due to cross-browser quirks. See ReactDOMServer.renderToString() for server rendering.') : _prodInvariant('43') : void 0;\n\n    if (transaction.useCreateElement) {\n      while (container.lastChild) {\n        container.removeChild(container.lastChild);\n      }\n      DOMLazyTree.insertTreeBefore(container, markup, null);\n    } else {\n      setInnerHTML(container, markup);\n      ReactDOMComponentTree.precacheNode(instance, container.firstChild);\n    }\n\n    if (process.env.NODE_ENV !== 'production') {\n      var hostNode = ReactDOMComponentTree.getInstanceFromNode(container.firstChild);\n      if (hostNode._debugID !== 0) {\n        ReactInstrumentation.debugTool.onHostOperation(hostNode._debugID, 'mount', markup.toString());\n      }\n    }\n  }\n};\n\nmodule.exports = ReactMount;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactMount.js\n ** module id = 169\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMContainerInfo\n */\n\n'use strict';\n\nvar validateDOMNesting = require('./validateDOMNesting');\n\nvar DOC_NODE_TYPE = 9;\n\nfunction ReactDOMContainerInfo(topLevelWrapper, node) {\n  var info = {\n    _topLevelWrapper: topLevelWrapper,\n    _idCounter: 1,\n    _ownerDocument: node ? node.nodeType === DOC_NODE_TYPE ? node : node.ownerDocument : null,\n    _node: node,\n    _tag: node ? node.nodeName.toLowerCase() : null,\n    _namespaceURI: node ? node.namespaceURI : null\n  };\n  if (process.env.NODE_ENV !== 'production') {\n    info._ancestorInfo = node ? validateDOMNesting.updatedAncestorInfo(null, info._tag, null) : null;\n  }\n  return info;\n}\n\nmodule.exports = ReactDOMContainerInfo;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMContainerInfo.js\n ** module id = 170\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMFeatureFlags\n */\n\n'use strict';\n\nvar ReactDOMFeatureFlags = {\n  useCreateElement: true\n};\n\nmodule.exports = ReactDOMFeatureFlags;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMFeatureFlags.js\n ** module id = 171\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactMarkupChecksum\n */\n\n'use strict';\n\nvar adler32 = require('./adler32');\n\nvar TAG_END = /\\/?>/;\nvar COMMENT_START = /^<\\!\\-\\-/;\n\nvar ReactMarkupChecksum = {\n  CHECKSUM_ATTR_NAME: 'data-react-checksum',\n\n  /**\n   * @param {string} markup Markup string\n   * @return {string} Markup string with checksum attribute attached\n   */\n  addChecksumToMarkup: function (markup) {\n    var checksum = adler32(markup);\n\n    // Add checksum (handle both parent tags, comments and self-closing tags)\n    if (COMMENT_START.test(markup)) {\n      return markup;\n    } else {\n      return markup.replace(TAG_END, ' ' + ReactMarkupChecksum.CHECKSUM_ATTR_NAME + '=\"' + checksum + '\"$&');\n    }\n  },\n\n  /**\n   * @param {string} markup to use\n   * @param {DOMElement} element root React element\n   * @returns {boolean} whether or not the markup is the same\n   */\n  canReuseMarkup: function (markup, element) {\n    var existingChecksum = element.getAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME);\n    existingChecksum = existingChecksum && parseInt(existingChecksum, 10);\n    var markupChecksum = adler32(markup);\n    return markupChecksum === existingChecksum;\n  }\n};\n\nmodule.exports = ReactMarkupChecksum;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactMarkupChecksum.js\n ** module id = 172\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule adler32\n * \n */\n\n'use strict';\n\nvar MOD = 65521;\n\n// adler32 is not cryptographically strong, and is only used to sanity check that\n// markup generated on the server matches the markup generated on the client.\n// This implementation (a modified version of the SheetJS version) has been optimized\n// for our use case, at the expense of conforming to the adler32 specification\n// for non-ascii inputs.\nfunction adler32(data) {\n  var a = 1;\n  var b = 0;\n  var i = 0;\n  var l = data.length;\n  var m = l & ~0x3;\n  while (i < m) {\n    var n = Math.min(i + 4096, m);\n    for (; i < n; i += 4) {\n      b += (a += data.charCodeAt(i)) + (a += data.charCodeAt(i + 1)) + (a += data.charCodeAt(i + 2)) + (a += data.charCodeAt(i + 3));\n    }\n    a %= MOD;\n    b %= MOD;\n  }\n  for (; i < l; i++) {\n    b += a += data.charCodeAt(i);\n  }\n  a %= MOD;\n  b %= MOD;\n  return a | b << 16;\n}\n\nmodule.exports = adler32;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/adler32.js\n ** module id = 173\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule findDOMNode\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar ReactCurrentOwner = require('./ReactCurrentOwner');\nvar ReactDOMComponentTree = require('./ReactDOMComponentTree');\nvar ReactInstanceMap = require('./ReactInstanceMap');\n\nvar getHostComponentFromComposite = require('./getHostComponentFromComposite');\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\n/**\n * Returns the DOM node rendered by this element.\n *\n * See https://facebook.github.io/react/docs/top-level-api.html#reactdom.finddomnode\n *\n * @param {ReactComponent|DOMElement} componentOrElement\n * @return {?DOMElement} The root node of this element.\n */\nfunction findDOMNode(componentOrElement) {\n  if (process.env.NODE_ENV !== 'production') {\n    var owner = ReactCurrentOwner.current;\n    if (owner !== null) {\n      process.env.NODE_ENV !== 'production' ? warning(owner._warnedAboutRefsInRender, '%s is accessing findDOMNode inside its render(). ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', owner.getName() || 'A component') : void 0;\n      owner._warnedAboutRefsInRender = true;\n    }\n  }\n  if (componentOrElement == null) {\n    return null;\n  }\n  if (componentOrElement.nodeType === 1) {\n    return componentOrElement;\n  }\n\n  var inst = ReactInstanceMap.get(componentOrElement);\n  if (inst) {\n    inst = getHostComponentFromComposite(inst);\n    return inst ? ReactDOMComponentTree.getNodeFromInstance(inst) : null;\n  }\n\n  if (typeof componentOrElement.render === 'function') {\n    !false ? process.env.NODE_ENV !== 'production' ? invariant(false, 'findDOMNode was called on an unmounted component.') : _prodInvariant('44') : void 0;\n  } else {\n    !false ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Element appears to be neither ReactComponent nor DOMNode (keys: %s)', Object.keys(componentOrElement)) : _prodInvariant('45', Object.keys(componentOrElement)) : void 0;\n  }\n}\n\nmodule.exports = findDOMNode;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/findDOMNode.js\n ** module id = 174\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getHostComponentFromComposite\n */\n\n'use strict';\n\nvar ReactNodeTypes = require('./ReactNodeTypes');\n\nfunction getHostComponentFromComposite(inst) {\n  var type;\n\n  while ((type = inst._renderedNodeType) === ReactNodeTypes.COMPOSITE) {\n    inst = inst._renderedComponent;\n  }\n\n  if (type === ReactNodeTypes.HOST) {\n    return inst._renderedComponent;\n  } else if (type === ReactNodeTypes.EMPTY) {\n    return null;\n  }\n}\n\nmodule.exports = getHostComponentFromComposite;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/getHostComponentFromComposite.js\n ** module id = 175\n ** module chunks = 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n* @providesModule renderSubtreeIntoContainer\n*/\n\n'use strict';\n\nvar ReactMount = require('./ReactMount');\n\nmodule.exports = ReactMount.renderSubtreeIntoContainer;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/renderSubtreeIntoContainer.js\n ** module id = 176\n ** module chunks = 4\n **/","//! moment.js\n//! version : 2.14.1\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\n;(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n    typeof define === 'function' && define.amd ? define(factory) :\n    global.moment = factory()\n}(this, function () { 'use strict';\n\n    var hookCallback;\n\n    function utils_hooks__hooks () {\n        return hookCallback.apply(null, arguments);\n    }\n\n    // This is done to register the method called with moment()\n    // without creating circular dependencies.\n    function setHookCallback (callback) {\n        hookCallback = callback;\n    }\n\n    function isArray(input) {\n        return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]';\n    }\n\n    function isObject(input) {\n        return Object.prototype.toString.call(input) === '[object Object]';\n    }\n\n    function isObjectEmpty(obj) {\n        var k;\n        for (k in obj) {\n            // even if its not own property I'd still call it non-empty\n            return false;\n        }\n        return true;\n    }\n\n    function isDate(input) {\n        return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]';\n    }\n\n    function map(arr, fn) {\n        var res = [], i;\n        for (i = 0; i < arr.length; ++i) {\n            res.push(fn(arr[i], i));\n        }\n        return res;\n    }\n\n    function hasOwnProp(a, b) {\n        return Object.prototype.hasOwnProperty.call(a, b);\n    }\n\n    function extend(a, b) {\n        for (var i in b) {\n            if (hasOwnProp(b, i)) {\n                a[i] = b[i];\n            }\n        }\n\n        if (hasOwnProp(b, 'toString')) {\n            a.toString = b.toString;\n        }\n\n        if (hasOwnProp(b, 'valueOf')) {\n            a.valueOf = b.valueOf;\n        }\n\n        return a;\n    }\n\n    function create_utc__createUTC (input, format, locale, strict) {\n        return createLocalOrUTC(input, format, locale, strict, true).utc();\n    }\n\n    function defaultParsingFlags() {\n        // We need to deep clone this object.\n        return {\n            empty           : false,\n            unusedTokens    : [],\n            unusedInput     : [],\n            overflow        : -2,\n            charsLeftOver   : 0,\n            nullInput       : false,\n            invalidMonth    : null,\n            invalidFormat   : false,\n            userInvalidated : false,\n            iso             : false,\n            parsedDateParts : [],\n            meridiem        : null\n        };\n    }\n\n    function getParsingFlags(m) {\n        if (m._pf == null) {\n            m._pf = defaultParsingFlags();\n        }\n        return m._pf;\n    }\n\n    var some;\n    if (Array.prototype.some) {\n        some = Array.prototype.some;\n    } else {\n        some = function (fun) {\n            var t = Object(this);\n            var len = t.length >>> 0;\n\n            for (var i = 0; i < len; i++) {\n                if (i in t && fun.call(this, t[i], i, t)) {\n                    return true;\n                }\n            }\n\n            return false;\n        };\n    }\n\n    function valid__isValid(m) {\n        if (m._isValid == null) {\n            var flags = getParsingFlags(m);\n            var parsedParts = some.call(flags.parsedDateParts, function (i) {\n                return i != null;\n            });\n            m._isValid = !isNaN(m._d.getTime()) &&\n                flags.overflow < 0 &&\n                !flags.empty &&\n                !flags.invalidMonth &&\n                !flags.invalidWeekday &&\n                !flags.nullInput &&\n                !flags.invalidFormat &&\n                !flags.userInvalidated &&\n                (!flags.meridiem || (flags.meridiem && parsedParts));\n\n            if (m._strict) {\n                m._isValid = m._isValid &&\n                    flags.charsLeftOver === 0 &&\n                    flags.unusedTokens.length === 0 &&\n                    flags.bigHour === undefined;\n            }\n        }\n        return m._isValid;\n    }\n\n    function valid__createInvalid (flags) {\n        var m = create_utc__createUTC(NaN);\n        if (flags != null) {\n            extend(getParsingFlags(m), flags);\n        }\n        else {\n            getParsingFlags(m).userInvalidated = true;\n        }\n\n        return m;\n    }\n\n    function isUndefined(input) {\n        return input === void 0;\n    }\n\n    // Plugins that add properties should also add the key here (null value),\n    // so we can properly clone ourselves.\n    var momentProperties = utils_hooks__hooks.momentProperties = [];\n\n    function copyConfig(to, from) {\n        var i, prop, val;\n\n        if (!isUndefined(from._isAMomentObject)) {\n            to._isAMomentObject = from._isAMomentObject;\n        }\n        if (!isUndefined(from._i)) {\n            to._i = from._i;\n        }\n        if (!isUndefined(from._f)) {\n            to._f = from._f;\n        }\n        if (!isUndefined(from._l)) {\n            to._l = from._l;\n        }\n        if (!isUndefined(from._strict)) {\n            to._strict = from._strict;\n        }\n        if (!isUndefined(from._tzm)) {\n            to._tzm = from._tzm;\n        }\n        if (!isUndefined(from._isUTC)) {\n            to._isUTC = from._isUTC;\n        }\n        if (!isUndefined(from._offset)) {\n            to._offset = from._offset;\n        }\n        if (!isUndefined(from._pf)) {\n            to._pf = getParsingFlags(from);\n        }\n        if (!isUndefined(from._locale)) {\n            to._locale = from._locale;\n        }\n\n        if (momentProperties.length > 0) {\n            for (i in momentProperties) {\n                prop = momentProperties[i];\n                val = from[prop];\n                if (!isUndefined(val)) {\n                    to[prop] = val;\n                }\n            }\n        }\n\n        return to;\n    }\n\n    var updateInProgress = false;\n\n    // Moment prototype object\n    function Moment(config) {\n        copyConfig(this, config);\n        this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n        // Prevent infinite loop in case updateOffset creates new moment\n        // objects.\n        if (updateInProgress === false) {\n            updateInProgress = true;\n            utils_hooks__hooks.updateOffset(this);\n            updateInProgress = false;\n        }\n    }\n\n    function isMoment (obj) {\n        return obj instanceof Moment || (obj != null && obj._isAMomentObject != null);\n    }\n\n    function absFloor (number) {\n        if (number < 0) {\n            // -0 -> 0\n            return Math.ceil(number) || 0;\n        } else {\n            return Math.floor(number);\n        }\n    }\n\n    function toInt(argumentForCoercion) {\n        var coercedNumber = +argumentForCoercion,\n            value = 0;\n\n        if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n            value = absFloor(coercedNumber);\n        }\n\n        return value;\n    }\n\n    // compare two arrays, return the number of differences\n    function compareArrays(array1, array2, dontConvert) {\n        var len = Math.min(array1.length, array2.length),\n            lengthDiff = Math.abs(array1.length - array2.length),\n            diffs = 0,\n            i;\n        for (i = 0; i < len; i++) {\n            if ((dontConvert && array1[i] !== array2[i]) ||\n                (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) {\n                diffs++;\n            }\n        }\n        return diffs + lengthDiff;\n    }\n\n    function warn(msg) {\n        if (utils_hooks__hooks.suppressDeprecationWarnings === false &&\n                (typeof console !==  'undefined') && console.warn) {\n            console.warn('Deprecation warning: ' + msg);\n        }\n    }\n\n    function deprecate(msg, fn) {\n        var firstTime = true;\n\n        return extend(function () {\n            if (utils_hooks__hooks.deprecationHandler != null) {\n                utils_hooks__hooks.deprecationHandler(null, msg);\n            }\n            if (firstTime) {\n                warn(msg + '\\nArguments: ' + Array.prototype.slice.call(arguments).join(', ') + '\\n' + (new Error()).stack);\n                firstTime = false;\n            }\n            return fn.apply(this, arguments);\n        }, fn);\n    }\n\n    var deprecations = {};\n\n    function deprecateSimple(name, msg) {\n        if (utils_hooks__hooks.deprecationHandler != null) {\n            utils_hooks__hooks.deprecationHandler(name, msg);\n        }\n        if (!deprecations[name]) {\n            warn(msg);\n            deprecations[name] = true;\n        }\n    }\n\n    utils_hooks__hooks.suppressDeprecationWarnings = false;\n    utils_hooks__hooks.deprecationHandler = null;\n\n    function isFunction(input) {\n        return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';\n    }\n\n    function locale_set__set (config) {\n        var prop, i;\n        for (i in config) {\n            prop = config[i];\n            if (isFunction(prop)) {\n                this[i] = prop;\n            } else {\n                this['_' + i] = prop;\n            }\n        }\n        this._config = config;\n        // Lenient ordinal parsing accepts just a number in addition to\n        // number + (possibly) stuff coming from _ordinalParseLenient.\n        this._ordinalParseLenient = new RegExp(this._ordinalParse.source + '|' + (/\\d{1,2}/).source);\n    }\n\n    function mergeConfigs(parentConfig, childConfig) {\n        var res = extend({}, parentConfig), prop;\n        for (prop in childConfig) {\n            if (hasOwnProp(childConfig, prop)) {\n                if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n                    res[prop] = {};\n                    extend(res[prop], parentConfig[prop]);\n                    extend(res[prop], childConfig[prop]);\n                } else if (childConfig[prop] != null) {\n                    res[prop] = childConfig[prop];\n                } else {\n                    delete res[prop];\n                }\n            }\n        }\n        for (prop in parentConfig) {\n            if (hasOwnProp(parentConfig, prop) &&\n                    !hasOwnProp(childConfig, prop) &&\n                    isObject(parentConfig[prop])) {\n                // make sure changes to properties don't modify parent config\n                res[prop] = extend({}, res[prop]);\n            }\n        }\n        return res;\n    }\n\n    function Locale(config) {\n        if (config != null) {\n            this.set(config);\n        }\n    }\n\n    var keys;\n\n    if (Object.keys) {\n        keys = Object.keys;\n    } else {\n        keys = function (obj) {\n            var i, res = [];\n            for (i in obj) {\n                if (hasOwnProp(obj, i)) {\n                    res.push(i);\n                }\n            }\n            return res;\n        };\n    }\n\n    var defaultCalendar = {\n        sameDay : '[Today at] LT',\n        nextDay : '[Tomorrow at] LT',\n        nextWeek : 'dddd [at] LT',\n        lastDay : '[Yesterday at] LT',\n        lastWeek : '[Last] dddd [at] LT',\n        sameElse : 'L'\n    };\n\n    function locale_calendar__calendar (key, mom, now) {\n        var output = this._calendar[key] || this._calendar['sameElse'];\n        return isFunction(output) ? output.call(mom, now) : output;\n    }\n\n    var defaultLongDateFormat = {\n        LTS  : 'h:mm:ss A',\n        LT   : 'h:mm A',\n        L    : 'MM/DD/YYYY',\n        LL   : 'MMMM D, YYYY',\n        LLL  : 'MMMM D, YYYY h:mm A',\n        LLLL : 'dddd, MMMM D, YYYY h:mm A'\n    };\n\n    function longDateFormat (key) {\n        var format = this._longDateFormat[key],\n            formatUpper = this._longDateFormat[key.toUpperCase()];\n\n        if (format || !formatUpper) {\n            return format;\n        }\n\n        this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) {\n            return val.slice(1);\n        });\n\n        return this._longDateFormat[key];\n    }\n\n    var defaultInvalidDate = 'Invalid date';\n\n    function invalidDate () {\n        return this._invalidDate;\n    }\n\n    var defaultOrdinal = '%d';\n    var defaultOrdinalParse = /\\d{1,2}/;\n\n    function ordinal (number) {\n        return this._ordinal.replace('%d', number);\n    }\n\n    var defaultRelativeTime = {\n        future : 'in %s',\n        past   : '%s ago',\n        s  : 'a few seconds',\n        m  : 'a minute',\n        mm : '%d minutes',\n        h  : 'an hour',\n        hh : '%d hours',\n        d  : 'a day',\n        dd : '%d days',\n        M  : 'a month',\n        MM : '%d months',\n        y  : 'a year',\n        yy : '%d years'\n    };\n\n    function relative__relativeTime (number, withoutSuffix, string, isFuture) {\n        var output = this._relativeTime[string];\n        return (isFunction(output)) ?\n            output(number, withoutSuffix, string, isFuture) :\n            output.replace(/%d/i, number);\n    }\n\n    function pastFuture (diff, output) {\n        var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n        return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n    }\n\n    var aliases = {};\n\n    function addUnitAlias (unit, shorthand) {\n        var lowerCase = unit.toLowerCase();\n        aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n    }\n\n    function normalizeUnits(units) {\n        return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined;\n    }\n\n    function normalizeObjectUnits(inputObject) {\n        var normalizedInput = {},\n            normalizedProp,\n            prop;\n\n        for (prop in inputObject) {\n            if (hasOwnProp(inputObject, prop)) {\n                normalizedProp = normalizeUnits(prop);\n                if (normalizedProp) {\n                    normalizedInput[normalizedProp] = inputObject[prop];\n                }\n            }\n        }\n\n        return normalizedInput;\n    }\n\n    var priorities = {};\n\n    function addUnitPriority(unit, priority) {\n        priorities[unit] = priority;\n    }\n\n    function getPrioritizedUnits(unitsObj) {\n        var units = [];\n        for (var u in unitsObj) {\n            units.push({unit: u, priority: priorities[u]});\n        }\n        units.sort(function (a, b) {\n            return a.priority - b.priority;\n        });\n        return units;\n    }\n\n    function makeGetSet (unit, keepTime) {\n        return function (value) {\n            if (value != null) {\n                get_set__set(this, unit, value);\n                utils_hooks__hooks.updateOffset(this, keepTime);\n                return this;\n            } else {\n                return get_set__get(this, unit);\n            }\n        };\n    }\n\n    function get_set__get (mom, unit) {\n        return mom.isValid() ?\n            mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN;\n    }\n\n    function get_set__set (mom, unit, value) {\n        if (mom.isValid()) {\n            mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n        }\n    }\n\n    // MOMENTS\n\n    function stringGet (units) {\n        units = normalizeUnits(units);\n        if (isFunction(this[units])) {\n            return this[units]();\n        }\n        return this;\n    }\n\n\n    function stringSet (units, value) {\n        if (typeof units === 'object') {\n            units = normalizeObjectUnits(units);\n            var prioritized = getPrioritizedUnits(units);\n            for (var i = 0; i < prioritized.length; i++) {\n                this[prioritized[i].unit](units[prioritized[i].unit]);\n            }\n        } else {\n            units = normalizeUnits(units);\n            if (isFunction(this[units])) {\n                return this[units](value);\n            }\n        }\n        return this;\n    }\n\n    function zeroFill(number, targetLength, forceSign) {\n        var absNumber = '' + Math.abs(number),\n            zerosToFill = targetLength - absNumber.length,\n            sign = number >= 0;\n        return (sign ? (forceSign ? '+' : '') : '-') +\n            Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;\n    }\n\n    var formattingTokens = /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g;\n\n    var localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g;\n\n    var formatFunctions = {};\n\n    var formatTokenFunctions = {};\n\n    // token:    'M'\n    // padded:   ['MM', 2]\n    // ordinal:  'Mo'\n    // callback: function () { this.month() + 1 }\n    function addFormatToken (token, padded, ordinal, callback) {\n        var func = callback;\n        if (typeof callback === 'string') {\n            func = function () {\n                return this[callback]();\n            };\n        }\n        if (token) {\n            formatTokenFunctions[token] = func;\n        }\n        if (padded) {\n            formatTokenFunctions[padded[0]] = function () {\n                return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n            };\n        }\n        if (ordinal) {\n            formatTokenFunctions[ordinal] = function () {\n                return this.localeData().ordinal(func.apply(this, arguments), token);\n            };\n        }\n    }\n\n    function removeFormattingTokens(input) {\n        if (input.match(/\\[[\\s\\S]/)) {\n            return input.replace(/^\\[|\\]$/g, '');\n        }\n        return input.replace(/\\\\/g, '');\n    }\n\n    function makeFormatFunction(format) {\n        var array = format.match(formattingTokens), i, length;\n\n        for (i = 0, length = array.length; i < length; i++) {\n            if (formatTokenFunctions[array[i]]) {\n                array[i] = formatTokenFunctions[array[i]];\n            } else {\n                array[i] = removeFormattingTokens(array[i]);\n            }\n        }\n\n        return function (mom) {\n            var output = '', i;\n            for (i = 0; i < length; i++) {\n                output += array[i] instanceof Function ? array[i].call(mom, format) : array[i];\n            }\n            return output;\n        };\n    }\n\n    // format date using native date object\n    function formatMoment(m, format) {\n        if (!m.isValid()) {\n            return m.localeData().invalidDate();\n        }\n\n        format = expandFormat(format, m.localeData());\n        formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format);\n\n        return formatFunctions[format](m);\n    }\n\n    function expandFormat(format, locale) {\n        var i = 5;\n\n        function replaceLongDateFormatTokens(input) {\n            return locale.longDateFormat(input) || input;\n        }\n\n        localFormattingTokens.lastIndex = 0;\n        while (i >= 0 && localFormattingTokens.test(format)) {\n            format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);\n            localFormattingTokens.lastIndex = 0;\n            i -= 1;\n        }\n\n        return format;\n    }\n\n    var match1         = /\\d/;            //       0 - 9\n    var match2         = /\\d\\d/;          //      00 - 99\n    var match3         = /\\d{3}/;         //     000 - 999\n    var match4         = /\\d{4}/;         //    0000 - 9999\n    var match6         = /[+-]?\\d{6}/;    // -999999 - 999999\n    var match1to2      = /\\d\\d?/;         //       0 - 99\n    var match3to4      = /\\d\\d\\d\\d?/;     //     999 - 9999\n    var match5to6      = /\\d\\d\\d\\d\\d\\d?/; //   99999 - 999999\n    var match1to3      = /\\d{1,3}/;       //       0 - 999\n    var match1to4      = /\\d{1,4}/;       //       0 - 9999\n    var match1to6      = /[+-]?\\d{1,6}/;  // -999999 - 999999\n\n    var matchUnsigned  = /\\d+/;           //       0 - inf\n    var matchSigned    = /[+-]?\\d+/;      //    -inf - inf\n\n    var matchOffset    = /Z|[+-]\\d\\d:?\\d\\d/gi; // +00:00 -00:00 +0000 -0000 or Z\n    var matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n\n    var matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/; // 123456789 123456789.123\n\n    // any word (or two) characters or numbers including two/three word month in arabic.\n    // includes scottish gaelic two word and hyphenated months\n    var matchWord = /[0-9]*['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]+|[\\u0600-\\u06FF\\/]+(\\s*?[\\u0600-\\u06FF]+){1,2}/i;\n\n\n    var regexes = {};\n\n    function addRegexToken (token, regex, strictRegex) {\n        regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) {\n            return (isStrict && strictRegex) ? strictRegex : regex;\n        };\n    }\n\n    function getParseRegexForToken (token, config) {\n        if (!hasOwnProp(regexes, token)) {\n            return new RegExp(unescapeFormat(token));\n        }\n\n        return regexes[token](config._strict, config._locale);\n    }\n\n    // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n    function unescapeFormat(s) {\n        return regexEscape(s.replace('\\\\', '').replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g, function (matched, p1, p2, p3, p4) {\n            return p1 || p2 || p3 || p4;\n        }));\n    }\n\n    function regexEscape(s) {\n        return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n    }\n\n    var tokens = {};\n\n    function addParseToken (token, callback) {\n        var i, func = callback;\n        if (typeof token === 'string') {\n            token = [token];\n        }\n        if (typeof callback === 'number') {\n            func = function (input, array) {\n                array[callback] = toInt(input);\n            };\n        }\n        for (i = 0; i < token.length; i++) {\n            tokens[token[i]] = func;\n        }\n    }\n\n    function addWeekParseToken (token, callback) {\n        addParseToken(token, function (input, array, config, token) {\n            config._w = config._w || {};\n            callback(input, config._w, config, token);\n        });\n    }\n\n    function addTimeToArrayFromToken(token, input, config) {\n        if (input != null && hasOwnProp(tokens, token)) {\n            tokens[token](input, config._a, config, token);\n        }\n    }\n\n    var YEAR = 0;\n    var MONTH = 1;\n    var DATE = 2;\n    var HOUR = 3;\n    var MINUTE = 4;\n    var SECOND = 5;\n    var MILLISECOND = 6;\n    var WEEK = 7;\n    var WEEKDAY = 8;\n\n    var indexOf;\n\n    if (Array.prototype.indexOf) {\n        indexOf = Array.prototype.indexOf;\n    } else {\n        indexOf = function (o) {\n            // I know\n            var i;\n            for (i = 0; i < this.length; ++i) {\n                if (this[i] === o) {\n                    return i;\n                }\n            }\n            return -1;\n        };\n    }\n\n    function daysInMonth(year, month) {\n        return new Date(Date.UTC(year, month + 1, 0)).getUTCDate();\n    }\n\n    // FORMATTING\n\n    addFormatToken('M', ['MM', 2], 'Mo', function () {\n        return this.month() + 1;\n    });\n\n    addFormatToken('MMM', 0, 0, function (format) {\n        return this.localeData().monthsShort(this, format);\n    });\n\n    addFormatToken('MMMM', 0, 0, function (format) {\n        return this.localeData().months(this, format);\n    });\n\n    // ALIASES\n\n    addUnitAlias('month', 'M');\n\n    // PRIORITY\n\n    addUnitPriority('month', 8);\n\n    // PARSING\n\n    addRegexToken('M',    match1to2);\n    addRegexToken('MM',   match1to2, match2);\n    addRegexToken('MMM',  function (isStrict, locale) {\n        return locale.monthsShortRegex(isStrict);\n    });\n    addRegexToken('MMMM', function (isStrict, locale) {\n        return locale.monthsRegex(isStrict);\n    });\n\n    addParseToken(['M', 'MM'], function (input, array) {\n        array[MONTH] = toInt(input) - 1;\n    });\n\n    addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n        var month = config._locale.monthsParse(input, token, config._strict);\n        // if we didn't find a month name, mark the date as invalid.\n        if (month != null) {\n            array[MONTH] = month;\n        } else {\n            getParsingFlags(config).invalidMonth = input;\n        }\n    });\n\n    // LOCALES\n\n    var MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s+)+MMMM?/;\n    var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_');\n    function localeMonths (m, format) {\n        return isArray(this._months) ? this._months[m.month()] :\n            this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()];\n    }\n\n    var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_');\n    function localeMonthsShort (m, format) {\n        return isArray(this._monthsShort) ? this._monthsShort[m.month()] :\n            this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()];\n    }\n\n    function units_month__handleStrictParse(monthName, format, strict) {\n        var i, ii, mom, llc = monthName.toLocaleLowerCase();\n        if (!this._monthsParse) {\n            // this is not used\n            this._monthsParse = [];\n            this._longMonthsParse = [];\n            this._shortMonthsParse = [];\n            for (i = 0; i < 12; ++i) {\n                mom = create_utc__createUTC([2000, i]);\n                this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase();\n                this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n            }\n        }\n\n        if (strict) {\n            if (format === 'MMM') {\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._longMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        } else {\n            if (format === 'MMM') {\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._longMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._longMonthsParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        }\n    }\n\n    function localeMonthsParse (monthName, format, strict) {\n        var i, mom, regex;\n\n        if (this._monthsParseExact) {\n            return units_month__handleStrictParse.call(this, monthName, format, strict);\n        }\n\n        if (!this._monthsParse) {\n            this._monthsParse = [];\n            this._longMonthsParse = [];\n            this._shortMonthsParse = [];\n        }\n\n        // TODO: add sorting\n        // Sorting makes sure if one month (or abbr) is a prefix of another\n        // see sorting in computeMonthsParse\n        for (i = 0; i < 12; i++) {\n            // make the regex if we don't have it already\n            mom = create_utc__createUTC([2000, i]);\n            if (strict && !this._longMonthsParse[i]) {\n                this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i');\n                this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i');\n            }\n            if (!strict && !this._monthsParse[i]) {\n                regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n                this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) {\n                return i;\n            } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) {\n                return i;\n            } else if (!strict && this._monthsParse[i].test(monthName)) {\n                return i;\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function setMonth (mom, value) {\n        var dayOfMonth;\n\n        if (!mom.isValid()) {\n            // No op\n            return mom;\n        }\n\n        if (typeof value === 'string') {\n            if (/^\\d+$/.test(value)) {\n                value = toInt(value);\n            } else {\n                value = mom.localeData().monthsParse(value);\n                // TODO: Another silent failure?\n                if (typeof value !== 'number') {\n                    return mom;\n                }\n            }\n        }\n\n        dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n        mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n        return mom;\n    }\n\n    function getSetMonth (value) {\n        if (value != null) {\n            setMonth(this, value);\n            utils_hooks__hooks.updateOffset(this, true);\n            return this;\n        } else {\n            return get_set__get(this, 'Month');\n        }\n    }\n\n    function getDaysInMonth () {\n        return daysInMonth(this.year(), this.month());\n    }\n\n    var defaultMonthsShortRegex = matchWord;\n    function monthsShortRegex (isStrict) {\n        if (this._monthsParseExact) {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                computeMonthsParse.call(this);\n            }\n            if (isStrict) {\n                return this._monthsShortStrictRegex;\n            } else {\n                return this._monthsShortRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_monthsShortRegex')) {\n                this._monthsShortRegex = defaultMonthsShortRegex;\n            }\n            return this._monthsShortStrictRegex && isStrict ?\n                this._monthsShortStrictRegex : this._monthsShortRegex;\n        }\n    }\n\n    var defaultMonthsRegex = matchWord;\n    function monthsRegex (isStrict) {\n        if (this._monthsParseExact) {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                computeMonthsParse.call(this);\n            }\n            if (isStrict) {\n                return this._monthsStrictRegex;\n            } else {\n                return this._monthsRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                this._monthsRegex = defaultMonthsRegex;\n            }\n            return this._monthsStrictRegex && isStrict ?\n                this._monthsStrictRegex : this._monthsRegex;\n        }\n    }\n\n    function computeMonthsParse () {\n        function cmpLenRev(a, b) {\n            return b.length - a.length;\n        }\n\n        var shortPieces = [], longPieces = [], mixedPieces = [],\n            i, mom;\n        for (i = 0; i < 12; i++) {\n            // make the regex if we don't have it already\n            mom = create_utc__createUTC([2000, i]);\n            shortPieces.push(this.monthsShort(mom, ''));\n            longPieces.push(this.months(mom, ''));\n            mixedPieces.push(this.months(mom, ''));\n            mixedPieces.push(this.monthsShort(mom, ''));\n        }\n        // Sorting makes sure if one month (or abbr) is a prefix of another it\n        // will match the longer piece.\n        shortPieces.sort(cmpLenRev);\n        longPieces.sort(cmpLenRev);\n        mixedPieces.sort(cmpLenRev);\n        for (i = 0; i < 12; i++) {\n            shortPieces[i] = regexEscape(shortPieces[i]);\n            longPieces[i] = regexEscape(longPieces[i]);\n        }\n        for (i = 0; i < 24; i++) {\n            mixedPieces[i] = regexEscape(mixedPieces[i]);\n        }\n\n        this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._monthsShortRegex = this._monthsRegex;\n        this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n        this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n    }\n\n    // FORMATTING\n\n    addFormatToken('Y', 0, 0, function () {\n        var y = this.year();\n        return y <= 9999 ? '' + y : '+' + y;\n    });\n\n    addFormatToken(0, ['YY', 2], 0, function () {\n        return this.year() % 100;\n    });\n\n    addFormatToken(0, ['YYYY',   4],       0, 'year');\n    addFormatToken(0, ['YYYYY',  5],       0, 'year');\n    addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n    // ALIASES\n\n    addUnitAlias('year', 'y');\n\n    // PRIORITIES\n\n    addUnitPriority('year', 1);\n\n    // PARSING\n\n    addRegexToken('Y',      matchSigned);\n    addRegexToken('YY',     match1to2, match2);\n    addRegexToken('YYYY',   match1to4, match4);\n    addRegexToken('YYYYY',  match1to6, match6);\n    addRegexToken('YYYYYY', match1to6, match6);\n\n    addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n    addParseToken('YYYY', function (input, array) {\n        array[YEAR] = input.length === 2 ? utils_hooks__hooks.parseTwoDigitYear(input) : toInt(input);\n    });\n    addParseToken('YY', function (input, array) {\n        array[YEAR] = utils_hooks__hooks.parseTwoDigitYear(input);\n    });\n    addParseToken('Y', function (input, array) {\n        array[YEAR] = parseInt(input, 10);\n    });\n\n    // HELPERS\n\n    function daysInYear(year) {\n        return isLeapYear(year) ? 366 : 365;\n    }\n\n    function isLeapYear(year) {\n        return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n    }\n\n    // HOOKS\n\n    utils_hooks__hooks.parseTwoDigitYear = function (input) {\n        return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n    };\n\n    // MOMENTS\n\n    var getSetYear = makeGetSet('FullYear', true);\n\n    function getIsLeapYear () {\n        return isLeapYear(this.year());\n    }\n\n    function createDate (y, m, d, h, M, s, ms) {\n        //can't just apply() to create a date:\n        //http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply\n        var date = new Date(y, m, d, h, M, s, ms);\n\n        //the date constructor remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0 && isFinite(date.getFullYear())) {\n            date.setFullYear(y);\n        }\n        return date;\n    }\n\n    function createUTCDate (y) {\n        var date = new Date(Date.UTC.apply(null, arguments));\n\n        //the Date.UTC function remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0 && isFinite(date.getUTCFullYear())) {\n            date.setUTCFullYear(y);\n        }\n        return date;\n    }\n\n    // start-of-first-week - start-of-year\n    function firstWeekOffset(year, dow, doy) {\n        var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n            fwd = 7 + dow - doy,\n            // first-week day local weekday -- which local weekday is fwd\n            fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n        return -fwdlw + fwd - 1;\n    }\n\n    //http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n    function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n        var localWeekday = (7 + weekday - dow) % 7,\n            weekOffset = firstWeekOffset(year, dow, doy),\n            dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n            resYear, resDayOfYear;\n\n        if (dayOfYear <= 0) {\n            resYear = year - 1;\n            resDayOfYear = daysInYear(resYear) + dayOfYear;\n        } else if (dayOfYear > daysInYear(year)) {\n            resYear = year + 1;\n            resDayOfYear = dayOfYear - daysInYear(year);\n        } else {\n            resYear = year;\n            resDayOfYear = dayOfYear;\n        }\n\n        return {\n            year: resYear,\n            dayOfYear: resDayOfYear\n        };\n    }\n\n    function weekOfYear(mom, dow, doy) {\n        var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n            week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n            resWeek, resYear;\n\n        if (week < 1) {\n            resYear = mom.year() - 1;\n            resWeek = week + weeksInYear(resYear, dow, doy);\n        } else if (week > weeksInYear(mom.year(), dow, doy)) {\n            resWeek = week - weeksInYear(mom.year(), dow, doy);\n            resYear = mom.year() + 1;\n        } else {\n            resYear = mom.year();\n            resWeek = week;\n        }\n\n        return {\n            week: resWeek,\n            year: resYear\n        };\n    }\n\n    function weeksInYear(year, dow, doy) {\n        var weekOffset = firstWeekOffset(year, dow, doy),\n            weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n        return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n    }\n\n    // FORMATTING\n\n    addFormatToken('w', ['ww', 2], 'wo', 'week');\n    addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n    // ALIASES\n\n    addUnitAlias('week', 'w');\n    addUnitAlias('isoWeek', 'W');\n\n    // PRIORITIES\n\n    addUnitPriority('week', 5);\n    addUnitPriority('isoWeek', 5);\n\n    // PARSING\n\n    addRegexToken('w',  match1to2);\n    addRegexToken('ww', match1to2, match2);\n    addRegexToken('W',  match1to2);\n    addRegexToken('WW', match1to2, match2);\n\n    addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) {\n        week[token.substr(0, 1)] = toInt(input);\n    });\n\n    // HELPERS\n\n    // LOCALES\n\n    function localeWeek (mom) {\n        return weekOfYear(mom, this._week.dow, this._week.doy).week;\n    }\n\n    var defaultLocaleWeek = {\n        dow : 0, // Sunday is the first day of the week.\n        doy : 6  // The week that contains Jan 1st is the first week of the year.\n    };\n\n    function localeFirstDayOfWeek () {\n        return this._week.dow;\n    }\n\n    function localeFirstDayOfYear () {\n        return this._week.doy;\n    }\n\n    // MOMENTS\n\n    function getSetWeek (input) {\n        var week = this.localeData().week(this);\n        return input == null ? week : this.add((input - week) * 7, 'd');\n    }\n\n    function getSetISOWeek (input) {\n        var week = weekOfYear(this, 1, 4).week;\n        return input == null ? week : this.add((input - week) * 7, 'd');\n    }\n\n    // FORMATTING\n\n    addFormatToken('d', 0, 'do', 'day');\n\n    addFormatToken('dd', 0, 0, function (format) {\n        return this.localeData().weekdaysMin(this, format);\n    });\n\n    addFormatToken('ddd', 0, 0, function (format) {\n        return this.localeData().weekdaysShort(this, format);\n    });\n\n    addFormatToken('dddd', 0, 0, function (format) {\n        return this.localeData().weekdays(this, format);\n    });\n\n    addFormatToken('e', 0, 0, 'weekday');\n    addFormatToken('E', 0, 0, 'isoWeekday');\n\n    // ALIASES\n\n    addUnitAlias('day', 'd');\n    addUnitAlias('weekday', 'e');\n    addUnitAlias('isoWeekday', 'E');\n\n    // PRIORITY\n    addUnitPriority('day', 11);\n    addUnitPriority('weekday', 11);\n    addUnitPriority('isoWeekday', 11);\n\n    // PARSING\n\n    addRegexToken('d',    match1to2);\n    addRegexToken('e',    match1to2);\n    addRegexToken('E',    match1to2);\n    addRegexToken('dd',   function (isStrict, locale) {\n        return locale.weekdaysMinRegex(isStrict);\n    });\n    addRegexToken('ddd',   function (isStrict, locale) {\n        return locale.weekdaysShortRegex(isStrict);\n    });\n    addRegexToken('dddd',   function (isStrict, locale) {\n        return locale.weekdaysRegex(isStrict);\n    });\n\n    addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n        var weekday = config._locale.weekdaysParse(input, token, config._strict);\n        // if we didn't get a weekday name, mark the date as invalid\n        if (weekday != null) {\n            week.d = weekday;\n        } else {\n            getParsingFlags(config).invalidWeekday = input;\n        }\n    });\n\n    addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n        week[token] = toInt(input);\n    });\n\n    // HELPERS\n\n    function parseWeekday(input, locale) {\n        if (typeof input !== 'string') {\n            return input;\n        }\n\n        if (!isNaN(input)) {\n            return parseInt(input, 10);\n        }\n\n        input = locale.weekdaysParse(input);\n        if (typeof input === 'number') {\n            return input;\n        }\n\n        return null;\n    }\n\n    function parseIsoWeekday(input, locale) {\n        if (typeof input === 'string') {\n            return locale.weekdaysParse(input) % 7 || 7;\n        }\n        return isNaN(input) ? null : input;\n    }\n\n    // LOCALES\n\n    var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_');\n    function localeWeekdays (m, format) {\n        return isArray(this._weekdays) ? this._weekdays[m.day()] :\n            this._weekdays[this._weekdays.isFormat.test(format) ? 'format' : 'standalone'][m.day()];\n    }\n\n    var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_');\n    function localeWeekdaysShort (m) {\n        return this._weekdaysShort[m.day()];\n    }\n\n    var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_');\n    function localeWeekdaysMin (m) {\n        return this._weekdaysMin[m.day()];\n    }\n\n    function day_of_week__handleStrictParse(weekdayName, format, strict) {\n        var i, ii, mom, llc = weekdayName.toLocaleLowerCase();\n        if (!this._weekdaysParse) {\n            this._weekdaysParse = [];\n            this._shortWeekdaysParse = [];\n            this._minWeekdaysParse = [];\n\n            for (i = 0; i < 7; ++i) {\n                mom = create_utc__createUTC([2000, 1]).day(i);\n                this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase();\n                this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase();\n                this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n            }\n        }\n\n        if (strict) {\n            if (format === 'dddd') {\n                ii = indexOf.call(this._weekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else if (format === 'ddd') {\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        } else {\n            if (format === 'dddd') {\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else if (format === 'ddd') {\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        }\n    }\n\n    function localeWeekdaysParse (weekdayName, format, strict) {\n        var i, mom, regex;\n\n        if (this._weekdaysParseExact) {\n            return day_of_week__handleStrictParse.call(this, weekdayName, format, strict);\n        }\n\n        if (!this._weekdaysParse) {\n            this._weekdaysParse = [];\n            this._minWeekdaysParse = [];\n            this._shortWeekdaysParse = [];\n            this._fullWeekdaysParse = [];\n        }\n\n        for (i = 0; i < 7; i++) {\n            // make the regex if we don't have it already\n\n            mom = create_utc__createUTC([2000, 1]).day(i);\n            if (strict && !this._fullWeekdaysParse[i]) {\n                this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\\.?') + '$', 'i');\n                this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\\.?') + '$', 'i');\n                this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\\.?') + '$', 'i');\n            }\n            if (!this._weekdaysParse[i]) {\n                regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');\n                this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) {\n                return i;\n            } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) {\n                return i;\n            } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) {\n                return i;\n            } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n                return i;\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function getSetDayOfWeek (input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n        if (input != null) {\n            input = parseWeekday(input, this.localeData());\n            return this.add(input - day, 'd');\n        } else {\n            return day;\n        }\n    }\n\n    function getSetLocaleDayOfWeek (input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n        return input == null ? weekday : this.add(input - weekday, 'd');\n    }\n\n    function getSetISODayOfWeek (input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n\n        // behaves the same as moment#day except\n        // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n        // as a setter, sunday should belong to the previous week.\n\n        if (input != null) {\n            var weekday = parseIsoWeekday(input, this.localeData());\n            return this.day(this.day() % 7 ? weekday : weekday - 7);\n        } else {\n            return this.day() || 7;\n        }\n    }\n\n    var defaultWeekdaysRegex = matchWord;\n    function weekdaysRegex (isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysStrictRegex;\n            } else {\n                return this._weekdaysRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                this._weekdaysRegex = defaultWeekdaysRegex;\n            }\n            return this._weekdaysStrictRegex && isStrict ?\n                this._weekdaysStrictRegex : this._weekdaysRegex;\n        }\n    }\n\n    var defaultWeekdaysShortRegex = matchWord;\n    function weekdaysShortRegex (isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysShortStrictRegex;\n            } else {\n                return this._weekdaysShortRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n                this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n            }\n            return this._weekdaysShortStrictRegex && isStrict ?\n                this._weekdaysShortStrictRegex : this._weekdaysShortRegex;\n        }\n    }\n\n    var defaultWeekdaysMinRegex = matchWord;\n    function weekdaysMinRegex (isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysMinStrictRegex;\n            } else {\n                return this._weekdaysMinRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n                this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n            }\n            return this._weekdaysMinStrictRegex && isStrict ?\n                this._weekdaysMinStrictRegex : this._weekdaysMinRegex;\n        }\n    }\n\n\n    function computeWeekdaysParse () {\n        function cmpLenRev(a, b) {\n            return b.length - a.length;\n        }\n\n        var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [],\n            i, mom, minp, shortp, longp;\n        for (i = 0; i < 7; i++) {\n            // make the regex if we don't have it already\n            mom = create_utc__createUTC([2000, 1]).day(i);\n            minp = this.weekdaysMin(mom, '');\n            shortp = this.weekdaysShort(mom, '');\n            longp = this.weekdays(mom, '');\n            minPieces.push(minp);\n            shortPieces.push(shortp);\n            longPieces.push(longp);\n            mixedPieces.push(minp);\n            mixedPieces.push(shortp);\n            mixedPieces.push(longp);\n        }\n        // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n        // will match the longer piece.\n        minPieces.sort(cmpLenRev);\n        shortPieces.sort(cmpLenRev);\n        longPieces.sort(cmpLenRev);\n        mixedPieces.sort(cmpLenRev);\n        for (i = 0; i < 7; i++) {\n            shortPieces[i] = regexEscape(shortPieces[i]);\n            longPieces[i] = regexEscape(longPieces[i]);\n            mixedPieces[i] = regexEscape(mixedPieces[i]);\n        }\n\n        this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._weekdaysShortRegex = this._weekdaysRegex;\n        this._weekdaysMinRegex = this._weekdaysRegex;\n\n        this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n        this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n        this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i');\n    }\n\n    // FORMATTING\n\n    function hFormat() {\n        return this.hours() % 12 || 12;\n    }\n\n    function kFormat() {\n        return this.hours() || 24;\n    }\n\n    addFormatToken('H', ['HH', 2], 0, 'hour');\n    addFormatToken('h', ['hh', 2], 0, hFormat);\n    addFormatToken('k', ['kk', 2], 0, kFormat);\n\n    addFormatToken('hmm', 0, 0, function () {\n        return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n    });\n\n    addFormatToken('hmmss', 0, 0, function () {\n        return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) +\n            zeroFill(this.seconds(), 2);\n    });\n\n    addFormatToken('Hmm', 0, 0, function () {\n        return '' + this.hours() + zeroFill(this.minutes(), 2);\n    });\n\n    addFormatToken('Hmmss', 0, 0, function () {\n        return '' + this.hours() + zeroFill(this.minutes(), 2) +\n            zeroFill(this.seconds(), 2);\n    });\n\n    function meridiem (token, lowercase) {\n        addFormatToken(token, 0, 0, function () {\n            return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);\n        });\n    }\n\n    meridiem('a', true);\n    meridiem('A', false);\n\n    // ALIASES\n\n    addUnitAlias('hour', 'h');\n\n    // PRIORITY\n    addUnitPriority('hour', 13);\n\n    // PARSING\n\n    function matchMeridiem (isStrict, locale) {\n        return locale._meridiemParse;\n    }\n\n    addRegexToken('a',  matchMeridiem);\n    addRegexToken('A',  matchMeridiem);\n    addRegexToken('H',  match1to2);\n    addRegexToken('h',  match1to2);\n    addRegexToken('HH', match1to2, match2);\n    addRegexToken('hh', match1to2, match2);\n\n    addRegexToken('hmm', match3to4);\n    addRegexToken('hmmss', match5to6);\n    addRegexToken('Hmm', match3to4);\n    addRegexToken('Hmmss', match5to6);\n\n    addParseToken(['H', 'HH'], HOUR);\n    addParseToken(['a', 'A'], function (input, array, config) {\n        config._isPm = config._locale.isPM(input);\n        config._meridiem = input;\n    });\n    addParseToken(['h', 'hh'], function (input, array, config) {\n        array[HOUR] = toInt(input);\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('hmm', function (input, array, config) {\n        var pos = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos));\n        array[MINUTE] = toInt(input.substr(pos));\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('hmmss', function (input, array, config) {\n        var pos1 = input.length - 4;\n        var pos2 = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos1));\n        array[MINUTE] = toInt(input.substr(pos1, 2));\n        array[SECOND] = toInt(input.substr(pos2));\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('Hmm', function (input, array, config) {\n        var pos = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos));\n        array[MINUTE] = toInt(input.substr(pos));\n    });\n    addParseToken('Hmmss', function (input, array, config) {\n        var pos1 = input.length - 4;\n        var pos2 = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos1));\n        array[MINUTE] = toInt(input.substr(pos1, 2));\n        array[SECOND] = toInt(input.substr(pos2));\n    });\n\n    // LOCALES\n\n    function localeIsPM (input) {\n        // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n        // Using charAt should be more compatible.\n        return ((input + '').toLowerCase().charAt(0) === 'p');\n    }\n\n    var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i;\n    function localeMeridiem (hours, minutes, isLower) {\n        if (hours > 11) {\n            return isLower ? 'pm' : 'PM';\n        } else {\n            return isLower ? 'am' : 'AM';\n        }\n    }\n\n\n    // MOMENTS\n\n    // Setting the hour should keep the time, because the user explicitly\n    // specified which hour he wants. So trying to maintain the same hour (in\n    // a new timezone) makes sense. Adding/subtracting hours does not follow\n    // this rule.\n    var getSetHour = makeGetSet('Hours', true);\n\n    var baseConfig = {\n        calendar: defaultCalendar,\n        longDateFormat: defaultLongDateFormat,\n        invalidDate: defaultInvalidDate,\n        ordinal: defaultOrdinal,\n        ordinalParse: defaultOrdinalParse,\n        relativeTime: defaultRelativeTime,\n\n        months: defaultLocaleMonths,\n        monthsShort: defaultLocaleMonthsShort,\n\n        week: defaultLocaleWeek,\n\n        weekdays: defaultLocaleWeekdays,\n        weekdaysMin: defaultLocaleWeekdaysMin,\n        weekdaysShort: defaultLocaleWeekdaysShort,\n\n        meridiemParse: defaultLocaleMeridiemParse\n    };\n\n    // internal storage for locale config files\n    var locales = {};\n    var globalLocale;\n\n    function normalizeLocale(key) {\n        return key ? key.toLowerCase().replace('_', '-') : key;\n    }\n\n    // pick the locale from the array\n    // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n    // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n    function chooseLocale(names) {\n        var i = 0, j, next, locale, split;\n\n        while (i < names.length) {\n            split = normalizeLocale(names[i]).split('-');\n            j = split.length;\n            next = normalizeLocale(names[i + 1]);\n            next = next ? next.split('-') : null;\n            while (j > 0) {\n                locale = loadLocale(split.slice(0, j).join('-'));\n                if (locale) {\n                    return locale;\n                }\n                if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) {\n                    //the next array item is better than a shallower substring of this one\n                    break;\n                }\n                j--;\n            }\n            i++;\n        }\n        return null;\n    }\n\n    function loadLocale(name) {\n        var oldLocale = null;\n        // TODO: Find a better way to register and load all the locales in Node\n        if (!locales[name] && (typeof module !== 'undefined') &&\n                module && module.exports) {\n            try {\n                oldLocale = globalLocale._abbr;\n                require('./locale/' + name);\n                // because defineLocale currently also sets the global locale, we\n                // want to undo that for lazy loaded locales\n                locale_locales__getSetGlobalLocale(oldLocale);\n            } catch (e) { }\n        }\n        return locales[name];\n    }\n\n    // This function will load locale and then set the global locale.  If\n    // no arguments are passed in, it will simply return the current global\n    // locale key.\n    function locale_locales__getSetGlobalLocale (key, values) {\n        var data;\n        if (key) {\n            if (isUndefined(values)) {\n                data = locale_locales__getLocale(key);\n            }\n            else {\n                data = defineLocale(key, values);\n            }\n\n            if (data) {\n                // moment.duration._locale = moment._locale = data;\n                globalLocale = data;\n            }\n        }\n\n        return globalLocale._abbr;\n    }\n\n    function defineLocale (name, config) {\n        if (config !== null) {\n            var parentConfig = baseConfig;\n            config.abbr = name;\n            if (locales[name] != null) {\n                deprecateSimple('defineLocaleOverride',\n                        'use moment.updateLocale(localeName, config) to change ' +\n                        'an existing locale. moment.defineLocale(localeName, ' +\n                        'config) should only be used for creating a new locale ' +\n                        'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.');\n                parentConfig = locales[name]._config;\n            } else if (config.parentLocale != null) {\n                if (locales[config.parentLocale] != null) {\n                    parentConfig = locales[config.parentLocale]._config;\n                } else {\n                    // treat as if there is no base config\n                    deprecateSimple('parentLocaleUndefined',\n                            'specified parentLocale is not defined yet. See http://momentjs.com/guides/#/warnings/parent-locale/');\n                }\n            }\n            locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n            // backwards compat for now: also set the locale\n            locale_locales__getSetGlobalLocale(name);\n\n            return locales[name];\n        } else {\n            // useful for testing\n            delete locales[name];\n            return null;\n        }\n    }\n\n    function updateLocale(name, config) {\n        if (config != null) {\n            var locale, parentConfig = baseConfig;\n            // MERGE\n            if (locales[name] != null) {\n                parentConfig = locales[name]._config;\n            }\n            config = mergeConfigs(parentConfig, config);\n            locale = new Locale(config);\n            locale.parentLocale = locales[name];\n            locales[name] = locale;\n\n            // backwards compat for now: also set the locale\n            locale_locales__getSetGlobalLocale(name);\n        } else {\n            // pass null for config to unupdate, useful for tests\n            if (locales[name] != null) {\n                if (locales[name].parentLocale != null) {\n                    locales[name] = locales[name].parentLocale;\n                } else if (locales[name] != null) {\n                    delete locales[name];\n                }\n            }\n        }\n        return locales[name];\n    }\n\n    // returns locale data\n    function locale_locales__getLocale (key) {\n        var locale;\n\n        if (key && key._locale && key._locale._abbr) {\n            key = key._locale._abbr;\n        }\n\n        if (!key) {\n            return globalLocale;\n        }\n\n        if (!isArray(key)) {\n            //short-circuit everything else\n            locale = loadLocale(key);\n            if (locale) {\n                return locale;\n            }\n            key = [key];\n        }\n\n        return chooseLocale(key);\n    }\n\n    function locale_locales__listLocales() {\n        return keys(locales);\n    }\n\n    function checkOverflow (m) {\n        var overflow;\n        var a = m._a;\n\n        if (a && getParsingFlags(m).overflow === -2) {\n            overflow =\n                a[MONTH]       < 0 || a[MONTH]       > 11  ? MONTH :\n                a[DATE]        < 1 || a[DATE]        > daysInMonth(a[YEAR], a[MONTH]) ? DATE :\n                a[HOUR]        < 0 || a[HOUR]        > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR :\n                a[MINUTE]      < 0 || a[MINUTE]      > 59  ? MINUTE :\n                a[SECOND]      < 0 || a[SECOND]      > 59  ? SECOND :\n                a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND :\n                -1;\n\n            if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {\n                overflow = DATE;\n            }\n            if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n                overflow = WEEK;\n            }\n            if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n                overflow = WEEKDAY;\n            }\n\n            getParsingFlags(m).overflow = overflow;\n        }\n\n        return m;\n    }\n\n    // iso 8601 regex\n    // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n    var extendedIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?/;\n    var basicIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?/;\n\n    var tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/;\n\n    var isoDates = [\n        ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n        ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n        ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n        ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n        ['YYYY-DDD', /\\d{4}-\\d{3}/],\n        ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n        ['YYYYYYMMDD', /[+-]\\d{10}/],\n        ['YYYYMMDD', /\\d{8}/],\n        // YYYYMM is NOT allowed by the standard\n        ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n        ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n        ['YYYYDDD', /\\d{7}/]\n    ];\n\n    // iso time formats and regexes\n    var isoTimes = [\n        ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n        ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n        ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n        ['HH:mm', /\\d\\d:\\d\\d/],\n        ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n        ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n        ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n        ['HHmm', /\\d\\d\\d\\d/],\n        ['HH', /\\d\\d/]\n    ];\n\n    var aspNetJsonRegex = /^\\/?Date\\((\\-?\\d+)/i;\n\n    // date from iso format\n    function configFromISO(config) {\n        var i, l,\n            string = config._i,\n            match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n            allowTime, dateFormat, timeFormat, tzFormat;\n\n        if (match) {\n            getParsingFlags(config).iso = true;\n\n            for (i = 0, l = isoDates.length; i < l; i++) {\n                if (isoDates[i][1].exec(match[1])) {\n                    dateFormat = isoDates[i][0];\n                    allowTime = isoDates[i][2] !== false;\n                    break;\n                }\n            }\n            if (dateFormat == null) {\n                config._isValid = false;\n                return;\n            }\n            if (match[3]) {\n                for (i = 0, l = isoTimes.length; i < l; i++) {\n                    if (isoTimes[i][1].exec(match[3])) {\n                        // match[2] should be 'T' or space\n                        timeFormat = (match[2] || ' ') + isoTimes[i][0];\n                        break;\n                    }\n                }\n                if (timeFormat == null) {\n                    config._isValid = false;\n                    return;\n                }\n            }\n            if (!allowTime && timeFormat != null) {\n                config._isValid = false;\n                return;\n            }\n            if (match[4]) {\n                if (tzRegex.exec(match[4])) {\n                    tzFormat = 'Z';\n                } else {\n                    config._isValid = false;\n                    return;\n                }\n            }\n            config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n            configFromStringAndFormat(config);\n        } else {\n            config._isValid = false;\n        }\n    }\n\n    // date from iso format or fallback\n    function configFromString(config) {\n        var matched = aspNetJsonRegex.exec(config._i);\n\n        if (matched !== null) {\n            config._d = new Date(+matched[1]);\n            return;\n        }\n\n        configFromISO(config);\n        if (config._isValid === false) {\n            delete config._isValid;\n            utils_hooks__hooks.createFromInputFallback(config);\n        }\n    }\n\n    utils_hooks__hooks.createFromInputFallback = deprecate(\n        'moment construction falls back to js Date. This is ' +\n        'discouraged and will be removed in upcoming major ' +\n        'release. Please refer to ' +\n        'http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n        function (config) {\n            config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n        }\n    );\n\n    // Pick the first defined of two or three arguments.\n    function defaults(a, b, c) {\n        if (a != null) {\n            return a;\n        }\n        if (b != null) {\n            return b;\n        }\n        return c;\n    }\n\n    function currentDateArray(config) {\n        // hooks is actually the exported moment object\n        var nowValue = new Date(utils_hooks__hooks.now());\n        if (config._useUTC) {\n            return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()];\n        }\n        return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n    }\n\n    // convert an array to a date.\n    // the array should mirror the parameters below\n    // note: all values past the year are optional and will default to the lowest possible value.\n    // [year, month, day , hour, minute, second, millisecond]\n    function configFromArray (config) {\n        var i, date, input = [], currentDate, yearToUse;\n\n        if (config._d) {\n            return;\n        }\n\n        currentDate = currentDateArray(config);\n\n        //compute day of the year from weeks and weekdays\n        if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n            dayOfYearFromWeekInfo(config);\n        }\n\n        //if the day of the year is set, figure out what it is\n        if (config._dayOfYear) {\n            yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n            if (config._dayOfYear > daysInYear(yearToUse)) {\n                getParsingFlags(config)._overflowDayOfYear = true;\n            }\n\n            date = createUTCDate(yearToUse, 0, config._dayOfYear);\n            config._a[MONTH] = date.getUTCMonth();\n            config._a[DATE] = date.getUTCDate();\n        }\n\n        // Default to current date.\n        // * if no year, month, day of month are given, default to today\n        // * if day of month is given, default month and year\n        // * if month is given, default only year\n        // * if year is given, don't default anything\n        for (i = 0; i < 3 && config._a[i] == null; ++i) {\n            config._a[i] = input[i] = currentDate[i];\n        }\n\n        // Zero out whatever was not defaulted, including time\n        for (; i < 7; i++) {\n            config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i];\n        }\n\n        // Check for 24:00:00.000\n        if (config._a[HOUR] === 24 &&\n                config._a[MINUTE] === 0 &&\n                config._a[SECOND] === 0 &&\n                config._a[MILLISECOND] === 0) {\n            config._nextDay = true;\n            config._a[HOUR] = 0;\n        }\n\n        config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);\n        // Apply timezone offset from input. The actual utcOffset can be changed\n        // with parseZone.\n        if (config._tzm != null) {\n            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n        }\n\n        if (config._nextDay) {\n            config._a[HOUR] = 24;\n        }\n    }\n\n    function dayOfYearFromWeekInfo(config) {\n        var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow;\n\n        w = config._w;\n        if (w.GG != null || w.W != null || w.E != null) {\n            dow = 1;\n            doy = 4;\n\n            // TODO: We need to take the current isoWeekYear, but that depends on\n            // how we interpret now (local, utc, fixed offset). So create\n            // a now version of current config (take local/utc/offset flags, and\n            // create now).\n            weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(local__createLocal(), 1, 4).year);\n            week = defaults(w.W, 1);\n            weekday = defaults(w.E, 1);\n            if (weekday < 1 || weekday > 7) {\n                weekdayOverflow = true;\n            }\n        } else {\n            dow = config._locale._week.dow;\n            doy = config._locale._week.doy;\n\n            weekYear = defaults(w.gg, config._a[YEAR], weekOfYear(local__createLocal(), dow, doy).year);\n            week = defaults(w.w, 1);\n\n            if (w.d != null) {\n                // weekday -- low day numbers are considered next week\n                weekday = w.d;\n                if (weekday < 0 || weekday > 6) {\n                    weekdayOverflow = true;\n                }\n            } else if (w.e != null) {\n                // local weekday -- counting starts from begining of week\n                weekday = w.e + dow;\n                if (w.e < 0 || w.e > 6) {\n                    weekdayOverflow = true;\n                }\n            } else {\n                // default to begining of week\n                weekday = dow;\n            }\n        }\n        if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n            getParsingFlags(config)._overflowWeeks = true;\n        } else if (weekdayOverflow != null) {\n            getParsingFlags(config)._overflowWeekday = true;\n        } else {\n            temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n            config._a[YEAR] = temp.year;\n            config._dayOfYear = temp.dayOfYear;\n        }\n    }\n\n    // constant that refers to the ISO standard\n    utils_hooks__hooks.ISO_8601 = function () {};\n\n    // date from string and format string\n    function configFromStringAndFormat(config) {\n        // TODO: Move this to another part of the creation flow to prevent circular deps\n        if (config._f === utils_hooks__hooks.ISO_8601) {\n            configFromISO(config);\n            return;\n        }\n\n        config._a = [];\n        getParsingFlags(config).empty = true;\n\n        // This array is used to make a Date, either with `new Date` or `Date.UTC`\n        var string = '' + config._i,\n            i, parsedInput, tokens, token, skipped,\n            stringLength = string.length,\n            totalParsedInputLength = 0;\n\n        tokens = expandFormat(config._f, config._locale).match(formattingTokens) || [];\n\n        for (i = 0; i < tokens.length; i++) {\n            token = tokens[i];\n            parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0];\n            // console.log('token', token, 'parsedInput', parsedInput,\n            //         'regex', getParseRegexForToken(token, config));\n            if (parsedInput) {\n                skipped = string.substr(0, string.indexOf(parsedInput));\n                if (skipped.length > 0) {\n                    getParsingFlags(config).unusedInput.push(skipped);\n                }\n                string = string.slice(string.indexOf(parsedInput) + parsedInput.length);\n                totalParsedInputLength += parsedInput.length;\n            }\n            // don't parse if it's not a known token\n            if (formatTokenFunctions[token]) {\n                if (parsedInput) {\n                    getParsingFlags(config).empty = false;\n                }\n                else {\n                    getParsingFlags(config).unusedTokens.push(token);\n                }\n                addTimeToArrayFromToken(token, parsedInput, config);\n            }\n            else if (config._strict && !parsedInput) {\n                getParsingFlags(config).unusedTokens.push(token);\n            }\n        }\n\n        // add remaining unparsed input length to the string\n        getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength;\n        if (string.length > 0) {\n            getParsingFlags(config).unusedInput.push(string);\n        }\n\n        // clear _12h flag if hour is <= 12\n        if (config._a[HOUR] <= 12 &&\n            getParsingFlags(config).bigHour === true &&\n            config._a[HOUR] > 0) {\n            getParsingFlags(config).bigHour = undefined;\n        }\n\n        getParsingFlags(config).parsedDateParts = config._a.slice(0);\n        getParsingFlags(config).meridiem = config._meridiem;\n        // handle meridiem\n        config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem);\n\n        configFromArray(config);\n        checkOverflow(config);\n    }\n\n\n    function meridiemFixWrap (locale, hour, meridiem) {\n        var isPm;\n\n        if (meridiem == null) {\n            // nothing to do\n            return hour;\n        }\n        if (locale.meridiemHour != null) {\n            return locale.meridiemHour(hour, meridiem);\n        } else if (locale.isPM != null) {\n            // Fallback\n            isPm = locale.isPM(meridiem);\n            if (isPm && hour < 12) {\n                hour += 12;\n            }\n            if (!isPm && hour === 12) {\n                hour = 0;\n            }\n            return hour;\n        } else {\n            // this is not supposed to happen\n            return hour;\n        }\n    }\n\n    // date from string and array of format strings\n    function configFromStringAndArray(config) {\n        var tempConfig,\n            bestMoment,\n\n            scoreToBeat,\n            i,\n            currentScore;\n\n        if (config._f.length === 0) {\n            getParsingFlags(config).invalidFormat = true;\n            config._d = new Date(NaN);\n            return;\n        }\n\n        for (i = 0; i < config._f.length; i++) {\n            currentScore = 0;\n            tempConfig = copyConfig({}, config);\n            if (config._useUTC != null) {\n                tempConfig._useUTC = config._useUTC;\n            }\n            tempConfig._f = config._f[i];\n            configFromStringAndFormat(tempConfig);\n\n            if (!valid__isValid(tempConfig)) {\n                continue;\n            }\n\n            // if there is any input that was not parsed add a penalty for that format\n            currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n            //or tokens\n            currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n            getParsingFlags(tempConfig).score = currentScore;\n\n            if (scoreToBeat == null || currentScore < scoreToBeat) {\n                scoreToBeat = currentScore;\n                bestMoment = tempConfig;\n            }\n        }\n\n        extend(config, bestMoment || tempConfig);\n    }\n\n    function configFromObject(config) {\n        if (config._d) {\n            return;\n        }\n\n        var i = normalizeObjectUnits(config._i);\n        config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) {\n            return obj && parseInt(obj, 10);\n        });\n\n        configFromArray(config);\n    }\n\n    function createFromConfig (config) {\n        var res = new Moment(checkOverflow(prepareConfig(config)));\n        if (res._nextDay) {\n            // Adding is smart enough around DST\n            res.add(1, 'd');\n            res._nextDay = undefined;\n        }\n\n        return res;\n    }\n\n    function prepareConfig (config) {\n        var input = config._i,\n            format = config._f;\n\n        config._locale = config._locale || locale_locales__getLocale(config._l);\n\n        if (input === null || (format === undefined && input === '')) {\n            return valid__createInvalid({nullInput: true});\n        }\n\n        if (typeof input === 'string') {\n            config._i = input = config._locale.preparse(input);\n        }\n\n        if (isMoment(input)) {\n            return new Moment(checkOverflow(input));\n        } else if (isArray(format)) {\n            configFromStringAndArray(config);\n        } else if (isDate(input)) {\n            config._d = input;\n        } else if (format) {\n            configFromStringAndFormat(config);\n        }  else {\n            configFromInput(config);\n        }\n\n        if (!valid__isValid(config)) {\n            config._d = null;\n        }\n\n        return config;\n    }\n\n    function configFromInput(config) {\n        var input = config._i;\n        if (input === undefined) {\n            config._d = new Date(utils_hooks__hooks.now());\n        } else if (isDate(input)) {\n            config._d = new Date(input.valueOf());\n        } else if (typeof input === 'string') {\n            configFromString(config);\n        } else if (isArray(input)) {\n            config._a = map(input.slice(0), function (obj) {\n                return parseInt(obj, 10);\n            });\n            configFromArray(config);\n        } else if (typeof(input) === 'object') {\n            configFromObject(config);\n        } else if (typeof(input) === 'number') {\n            // from milliseconds\n            config._d = new Date(input);\n        } else {\n            utils_hooks__hooks.createFromInputFallback(config);\n        }\n    }\n\n    function createLocalOrUTC (input, format, locale, strict, isUTC) {\n        var c = {};\n\n        if (typeof(locale) === 'boolean') {\n            strict = locale;\n            locale = undefined;\n        }\n\n        if ((isObject(input) && isObjectEmpty(input)) ||\n                (isArray(input) && input.length === 0)) {\n            input = undefined;\n        }\n        // object construction must be done this way.\n        // https://github.com/moment/moment/issues/1423\n        c._isAMomentObject = true;\n        c._useUTC = c._isUTC = isUTC;\n        c._l = locale;\n        c._i = input;\n        c._f = format;\n        c._strict = strict;\n\n        return createFromConfig(c);\n    }\n\n    function local__createLocal (input, format, locale, strict) {\n        return createLocalOrUTC(input, format, locale, strict, false);\n    }\n\n    var prototypeMin = deprecate(\n        'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n        function () {\n            var other = local__createLocal.apply(null, arguments);\n            if (this.isValid() && other.isValid()) {\n                return other < this ? this : other;\n            } else {\n                return valid__createInvalid();\n            }\n        }\n    );\n\n    var prototypeMax = deprecate(\n        'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n        function () {\n            var other = local__createLocal.apply(null, arguments);\n            if (this.isValid() && other.isValid()) {\n                return other > this ? this : other;\n            } else {\n                return valid__createInvalid();\n            }\n        }\n    );\n\n    // Pick a moment m from moments so that m[fn](other) is true for all\n    // other. This relies on the function fn to be transitive.\n    //\n    // moments should either be an array of moment objects or an array, whose\n    // first element is an array of moment objects.\n    function pickBy(fn, moments) {\n        var res, i;\n        if (moments.length === 1 && isArray(moments[0])) {\n            moments = moments[0];\n        }\n        if (!moments.length) {\n            return local__createLocal();\n        }\n        res = moments[0];\n        for (i = 1; i < moments.length; ++i) {\n            if (!moments[i].isValid() || moments[i][fn](res)) {\n                res = moments[i];\n            }\n        }\n        return res;\n    }\n\n    // TODO: Use [].sort instead?\n    function min () {\n        var args = [].slice.call(arguments, 0);\n\n        return pickBy('isBefore', args);\n    }\n\n    function max () {\n        var args = [].slice.call(arguments, 0);\n\n        return pickBy('isAfter', args);\n    }\n\n    var now = function () {\n        return Date.now ? Date.now() : +(new Date());\n    };\n\n    function Duration (duration) {\n        var normalizedInput = normalizeObjectUnits(duration),\n            years = normalizedInput.year || 0,\n            quarters = normalizedInput.quarter || 0,\n            months = normalizedInput.month || 0,\n            weeks = normalizedInput.week || 0,\n            days = normalizedInput.day || 0,\n            hours = normalizedInput.hour || 0,\n            minutes = normalizedInput.minute || 0,\n            seconds = normalizedInput.second || 0,\n            milliseconds = normalizedInput.millisecond || 0;\n\n        // representation for dateAddRemove\n        this._milliseconds = +milliseconds +\n            seconds * 1e3 + // 1000\n            minutes * 6e4 + // 1000 * 60\n            hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n        // Because of dateAddRemove treats 24 hours as different from a\n        // day when working around DST, we need to store them separately\n        this._days = +days +\n            weeks * 7;\n        // It is impossible translate months into days without knowing\n        // which months you are are talking about, so we have to store\n        // it separately.\n        this._months = +months +\n            quarters * 3 +\n            years * 12;\n\n        this._data = {};\n\n        this._locale = locale_locales__getLocale();\n\n        this._bubble();\n    }\n\n    function isDuration (obj) {\n        return obj instanceof Duration;\n    }\n\n    // FORMATTING\n\n    function offset (token, separator) {\n        addFormatToken(token, 0, 0, function () {\n            var offset = this.utcOffset();\n            var sign = '+';\n            if (offset < 0) {\n                offset = -offset;\n                sign = '-';\n            }\n            return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2);\n        });\n    }\n\n    offset('Z', ':');\n    offset('ZZ', '');\n\n    // PARSING\n\n    addRegexToken('Z',  matchShortOffset);\n    addRegexToken('ZZ', matchShortOffset);\n    addParseToken(['Z', 'ZZ'], function (input, array, config) {\n        config._useUTC = true;\n        config._tzm = offsetFromString(matchShortOffset, input);\n    });\n\n    // HELPERS\n\n    // timezone chunker\n    // '+10:00' > ['10',  '00']\n    // '-1530'  > ['-15', '30']\n    var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n    function offsetFromString(matcher, string) {\n        var matches = ((string || '').match(matcher) || []);\n        var chunk   = matches[matches.length - 1] || [];\n        var parts   = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n        var minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n        return parts[0] === '+' ? minutes : -minutes;\n    }\n\n    // Return a moment from input, that is local/utc/zone equivalent to model.\n    function cloneWithOffset(input, model) {\n        var res, diff;\n        if (model._isUTC) {\n            res = model.clone();\n            diff = (isMoment(input) || isDate(input) ? input.valueOf() : local__createLocal(input).valueOf()) - res.valueOf();\n            // Use low-level api, because this fn is low-level api.\n            res._d.setTime(res._d.valueOf() + diff);\n            utils_hooks__hooks.updateOffset(res, false);\n            return res;\n        } else {\n            return local__createLocal(input).local();\n        }\n    }\n\n    function getDateOffset (m) {\n        // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n        // https://github.com/moment/moment/pull/1871\n        return -Math.round(m._d.getTimezoneOffset() / 15) * 15;\n    }\n\n    // HOOKS\n\n    // This function will be called whenever a moment is mutated.\n    // It is intended to keep the offset in sync with the timezone.\n    utils_hooks__hooks.updateOffset = function () {};\n\n    // MOMENTS\n\n    // keepLocalTime = true means only change the timezone, without\n    // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n    // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n    // +0200, so we adjust the time as needed, to be valid.\n    //\n    // Keeping the time actually adds/subtracts (one hour)\n    // from the actual represented time. That is why we call updateOffset\n    // a second time. In case it wants us to change the offset again\n    // _changeInProgress == true case, then we have to adjust, because\n    // there is no such time in the given timezone.\n    function getSetOffset (input, keepLocalTime) {\n        var offset = this._offset || 0,\n            localAdjust;\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        if (input != null) {\n            if (typeof input === 'string') {\n                input = offsetFromString(matchShortOffset, input);\n            } else if (Math.abs(input) < 16) {\n                input = input * 60;\n            }\n            if (!this._isUTC && keepLocalTime) {\n                localAdjust = getDateOffset(this);\n            }\n            this._offset = input;\n            this._isUTC = true;\n            if (localAdjust != null) {\n                this.add(localAdjust, 'm');\n            }\n            if (offset !== input) {\n                if (!keepLocalTime || this._changeInProgress) {\n                    add_subtract__addSubtract(this, create__createDuration(input - offset, 'm'), 1, false);\n                } else if (!this._changeInProgress) {\n                    this._changeInProgress = true;\n                    utils_hooks__hooks.updateOffset(this, true);\n                    this._changeInProgress = null;\n                }\n            }\n            return this;\n        } else {\n            return this._isUTC ? offset : getDateOffset(this);\n        }\n    }\n\n    function getSetZone (input, keepLocalTime) {\n        if (input != null) {\n            if (typeof input !== 'string') {\n                input = -input;\n            }\n\n            this.utcOffset(input, keepLocalTime);\n\n            return this;\n        } else {\n            return -this.utcOffset();\n        }\n    }\n\n    function setOffsetToUTC (keepLocalTime) {\n        return this.utcOffset(0, keepLocalTime);\n    }\n\n    function setOffsetToLocal (keepLocalTime) {\n        if (this._isUTC) {\n            this.utcOffset(0, keepLocalTime);\n            this._isUTC = false;\n\n            if (keepLocalTime) {\n                this.subtract(getDateOffset(this), 'm');\n            }\n        }\n        return this;\n    }\n\n    function setOffsetToParsedOffset () {\n        if (this._tzm) {\n            this.utcOffset(this._tzm);\n        } else if (typeof this._i === 'string') {\n            this.utcOffset(offsetFromString(matchOffset, this._i));\n        }\n        return this;\n    }\n\n    function hasAlignedHourOffset (input) {\n        if (!this.isValid()) {\n            return false;\n        }\n        input = input ? local__createLocal(input).utcOffset() : 0;\n\n        return (this.utcOffset() - input) % 60 === 0;\n    }\n\n    function isDaylightSavingTime () {\n        return (\n            this.utcOffset() > this.clone().month(0).utcOffset() ||\n            this.utcOffset() > this.clone().month(5).utcOffset()\n        );\n    }\n\n    function isDaylightSavingTimeShifted () {\n        if (!isUndefined(this._isDSTShifted)) {\n            return this._isDSTShifted;\n        }\n\n        var c = {};\n\n        copyConfig(c, this);\n        c = prepareConfig(c);\n\n        if (c._a) {\n            var other = c._isUTC ? create_utc__createUTC(c._a) : local__createLocal(c._a);\n            this._isDSTShifted = this.isValid() &&\n                compareArrays(c._a, other.toArray()) > 0;\n        } else {\n            this._isDSTShifted = false;\n        }\n\n        return this._isDSTShifted;\n    }\n\n    function isLocal () {\n        return this.isValid() ? !this._isUTC : false;\n    }\n\n    function isUtcOffset () {\n        return this.isValid() ? this._isUTC : false;\n    }\n\n    function isUtc () {\n        return this.isValid() ? this._isUTC && this._offset === 0 : false;\n    }\n\n    // ASP.NET json date format regex\n    var aspNetRegex = /^(\\-)?(?:(\\d*)[. ])?(\\d+)\\:(\\d+)(?:\\:(\\d+)\\.?(\\d{3})?\\d*)?$/;\n\n    // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n    // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n    // and further modified to allow for strings containing both week and day\n    var isoRegex = /^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/;\n\n    function create__createDuration (input, key) {\n        var duration = input,\n            // matching against regexp is expensive, do it on demand\n            match = null,\n            sign,\n            ret,\n            diffRes;\n\n        if (isDuration(input)) {\n            duration = {\n                ms : input._milliseconds,\n                d  : input._days,\n                M  : input._months\n            };\n        } else if (typeof input === 'number') {\n            duration = {};\n            if (key) {\n                duration[key] = input;\n            } else {\n                duration.milliseconds = input;\n            }\n        } else if (!!(match = aspNetRegex.exec(input))) {\n            sign = (match[1] === '-') ? -1 : 1;\n            duration = {\n                y  : 0,\n                d  : toInt(match[DATE])        * sign,\n                h  : toInt(match[HOUR])        * sign,\n                m  : toInt(match[MINUTE])      * sign,\n                s  : toInt(match[SECOND])      * sign,\n                ms : toInt(match[MILLISECOND]) * sign\n            };\n        } else if (!!(match = isoRegex.exec(input))) {\n            sign = (match[1] === '-') ? -1 : 1;\n            duration = {\n                y : parseIso(match[2], sign),\n                M : parseIso(match[3], sign),\n                w : parseIso(match[4], sign),\n                d : parseIso(match[5], sign),\n                h : parseIso(match[6], sign),\n                m : parseIso(match[7], sign),\n                s : parseIso(match[8], sign)\n            };\n        } else if (duration == null) {// checks for null or undefined\n            duration = {};\n        } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) {\n            diffRes = momentsDifference(local__createLocal(duration.from), local__createLocal(duration.to));\n\n            duration = {};\n            duration.ms = diffRes.milliseconds;\n            duration.M = diffRes.months;\n        }\n\n        ret = new Duration(duration);\n\n        if (isDuration(input) && hasOwnProp(input, '_locale')) {\n            ret._locale = input._locale;\n        }\n\n        return ret;\n    }\n\n    create__createDuration.fn = Duration.prototype;\n\n    function parseIso (inp, sign) {\n        // We'd normally use ~~inp for this, but unfortunately it also\n        // converts floats to ints.\n        // inp may be undefined, so careful calling replace on it.\n        var res = inp && parseFloat(inp.replace(',', '.'));\n        // apply sign while we're at it\n        return (isNaN(res) ? 0 : res) * sign;\n    }\n\n    function positiveMomentsDifference(base, other) {\n        var res = {milliseconds: 0, months: 0};\n\n        res.months = other.month() - base.month() +\n            (other.year() - base.year()) * 12;\n        if (base.clone().add(res.months, 'M').isAfter(other)) {\n            --res.months;\n        }\n\n        res.milliseconds = +other - +(base.clone().add(res.months, 'M'));\n\n        return res;\n    }\n\n    function momentsDifference(base, other) {\n        var res;\n        if (!(base.isValid() && other.isValid())) {\n            return {milliseconds: 0, months: 0};\n        }\n\n        other = cloneWithOffset(other, base);\n        if (base.isBefore(other)) {\n            res = positiveMomentsDifference(base, other);\n        } else {\n            res = positiveMomentsDifference(other, base);\n            res.milliseconds = -res.milliseconds;\n            res.months = -res.months;\n        }\n\n        return res;\n    }\n\n    function absRound (number) {\n        if (number < 0) {\n            return Math.round(-1 * number) * -1;\n        } else {\n            return Math.round(number);\n        }\n    }\n\n    // TODO: remove 'name' arg after deprecation is removed\n    function createAdder(direction, name) {\n        return function (val, period) {\n            var dur, tmp;\n            //invert the arguments, but complain about it\n            if (period !== null && !isNaN(+period)) {\n                deprecateSimple(name, 'moment().' + name  + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' +\n                'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.');\n                tmp = val; val = period; period = tmp;\n            }\n\n            val = typeof val === 'string' ? +val : val;\n            dur = create__createDuration(val, period);\n            add_subtract__addSubtract(this, dur, direction);\n            return this;\n        };\n    }\n\n    function add_subtract__addSubtract (mom, duration, isAdding, updateOffset) {\n        var milliseconds = duration._milliseconds,\n            days = absRound(duration._days),\n            months = absRound(duration._months);\n\n        if (!mom.isValid()) {\n            // No op\n            return;\n        }\n\n        updateOffset = updateOffset == null ? true : updateOffset;\n\n        if (milliseconds) {\n            mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n        }\n        if (days) {\n            get_set__set(mom, 'Date', get_set__get(mom, 'Date') + days * isAdding);\n        }\n        if (months) {\n            setMonth(mom, get_set__get(mom, 'Month') + months * isAdding);\n        }\n        if (updateOffset) {\n            utils_hooks__hooks.updateOffset(mom, days || months);\n        }\n    }\n\n    var add_subtract__add      = createAdder(1, 'add');\n    var add_subtract__subtract = createAdder(-1, 'subtract');\n\n    function getCalendarFormat(myMoment, now) {\n        var diff = myMoment.diff(now, 'days', true);\n        return diff < -6 ? 'sameElse' :\n                diff < -1 ? 'lastWeek' :\n                diff < 0 ? 'lastDay' :\n                diff < 1 ? 'sameDay' :\n                diff < 2 ? 'nextDay' :\n                diff < 7 ? 'nextWeek' : 'sameElse';\n    }\n\n    function moment_calendar__calendar (time, formats) {\n        // We want to compare the start of today, vs this.\n        // Getting start-of-today depends on whether we're local/utc/offset or not.\n        var now = time || local__createLocal(),\n            sod = cloneWithOffset(now, this).startOf('day'),\n            format = utils_hooks__hooks.calendarFormat(this, sod) || 'sameElse';\n\n        var output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]);\n\n        return this.format(output || this.localeData().calendar(format, this, local__createLocal(now)));\n    }\n\n    function clone () {\n        return new Moment(this);\n    }\n\n    function isAfter (input, units) {\n        var localInput = isMoment(input) ? input : local__createLocal(input);\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(!isUndefined(units) ? units : 'millisecond');\n        if (units === 'millisecond') {\n            return this.valueOf() > localInput.valueOf();\n        } else {\n            return localInput.valueOf() < this.clone().startOf(units).valueOf();\n        }\n    }\n\n    function isBefore (input, units) {\n        var localInput = isMoment(input) ? input : local__createLocal(input);\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(!isUndefined(units) ? units : 'millisecond');\n        if (units === 'millisecond') {\n            return this.valueOf() < localInput.valueOf();\n        } else {\n            return this.clone().endOf(units).valueOf() < localInput.valueOf();\n        }\n    }\n\n    function isBetween (from, to, units, inclusivity) {\n        inclusivity = inclusivity || '()';\n        return (inclusivity[0] === '(' ? this.isAfter(from, units) : !this.isBefore(from, units)) &&\n            (inclusivity[1] === ')' ? this.isBefore(to, units) : !this.isAfter(to, units));\n    }\n\n    function isSame (input, units) {\n        var localInput = isMoment(input) ? input : local__createLocal(input),\n            inputMs;\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units || 'millisecond');\n        if (units === 'millisecond') {\n            return this.valueOf() === localInput.valueOf();\n        } else {\n            inputMs = localInput.valueOf();\n            return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf();\n        }\n    }\n\n    function isSameOrAfter (input, units) {\n        return this.isSame(input, units) || this.isAfter(input,units);\n    }\n\n    function isSameOrBefore (input, units) {\n        return this.isSame(input, units) || this.isBefore(input,units);\n    }\n\n    function diff (input, units, asFloat) {\n        var that,\n            zoneDelta,\n            delta, output;\n\n        if (!this.isValid()) {\n            return NaN;\n        }\n\n        that = cloneWithOffset(input, this);\n\n        if (!that.isValid()) {\n            return NaN;\n        }\n\n        zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n        units = normalizeUnits(units);\n\n        if (units === 'year' || units === 'month' || units === 'quarter') {\n            output = monthDiff(this, that);\n            if (units === 'quarter') {\n                output = output / 3;\n            } else if (units === 'year') {\n                output = output / 12;\n            }\n        } else {\n            delta = this - that;\n            output = units === 'second' ? delta / 1e3 : // 1000\n                units === 'minute' ? delta / 6e4 : // 1000 * 60\n                units === 'hour' ? delta / 36e5 : // 1000 * 60 * 60\n                units === 'day' ? (delta - zoneDelta) / 864e5 : // 1000 * 60 * 60 * 24, negate dst\n                units === 'week' ? (delta - zoneDelta) / 6048e5 : // 1000 * 60 * 60 * 24 * 7, negate dst\n                delta;\n        }\n        return asFloat ? output : absFloor(output);\n    }\n\n    function monthDiff (a, b) {\n        // difference in months\n        var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()),\n            // b is in (anchor - 1 month, anchor + 1 month)\n            anchor = a.clone().add(wholeMonthDiff, 'months'),\n            anchor2, adjust;\n\n        if (b - anchor < 0) {\n            anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n            // linear across the month\n            adjust = (b - anchor) / (anchor - anchor2);\n        } else {\n            anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n            // linear across the month\n            adjust = (b - anchor) / (anchor2 - anchor);\n        }\n\n        //check for negative zero, return zero if negative zero\n        return -(wholeMonthDiff + adjust) || 0;\n    }\n\n    utils_hooks__hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n    utils_hooks__hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n    function toString () {\n        return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n    }\n\n    function moment_format__toISOString () {\n        var m = this.clone().utc();\n        if (0 < m.year() && m.year() <= 9999) {\n            if (isFunction(Date.prototype.toISOString)) {\n                // native implementation is ~50x faster, use it when we can\n                return this.toDate().toISOString();\n            } else {\n                return formatMoment(m, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]');\n            }\n        } else {\n            return formatMoment(m, 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]');\n        }\n    }\n\n    function format (inputString) {\n        if (!inputString) {\n            inputString = this.isUtc() ? utils_hooks__hooks.defaultFormatUtc : utils_hooks__hooks.defaultFormat;\n        }\n        var output = formatMoment(this, inputString);\n        return this.localeData().postformat(output);\n    }\n\n    function from (time, withoutSuffix) {\n        if (this.isValid() &&\n                ((isMoment(time) && time.isValid()) ||\n                 local__createLocal(time).isValid())) {\n            return create__createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix);\n        } else {\n            return this.localeData().invalidDate();\n        }\n    }\n\n    function fromNow (withoutSuffix) {\n        return this.from(local__createLocal(), withoutSuffix);\n    }\n\n    function to (time, withoutSuffix) {\n        if (this.isValid() &&\n                ((isMoment(time) && time.isValid()) ||\n                 local__createLocal(time).isValid())) {\n            return create__createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix);\n        } else {\n            return this.localeData().invalidDate();\n        }\n    }\n\n    function toNow (withoutSuffix) {\n        return this.to(local__createLocal(), withoutSuffix);\n    }\n\n    // If passed a locale key, it will set the locale for this\n    // instance.  Otherwise, it will return the locale configuration\n    // variables for this instance.\n    function locale (key) {\n        var newLocaleData;\n\n        if (key === undefined) {\n            return this._locale._abbr;\n        } else {\n            newLocaleData = locale_locales__getLocale(key);\n            if (newLocaleData != null) {\n                this._locale = newLocaleData;\n            }\n            return this;\n        }\n    }\n\n    var lang = deprecate(\n        'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n        function (key) {\n            if (key === undefined) {\n                return this.localeData();\n            } else {\n                return this.locale(key);\n            }\n        }\n    );\n\n    function localeData () {\n        return this._locale;\n    }\n\n    function startOf (units) {\n        units = normalizeUnits(units);\n        // the following switch intentionally omits break keywords\n        // to utilize falling through the cases.\n        switch (units) {\n            case 'year':\n                this.month(0);\n                /* falls through */\n            case 'quarter':\n            case 'month':\n                this.date(1);\n                /* falls through */\n            case 'week':\n            case 'isoWeek':\n            case 'day':\n            case 'date':\n                this.hours(0);\n                /* falls through */\n            case 'hour':\n                this.minutes(0);\n                /* falls through */\n            case 'minute':\n                this.seconds(0);\n                /* falls through */\n            case 'second':\n                this.milliseconds(0);\n        }\n\n        // weeks are a special case\n        if (units === 'week') {\n            this.weekday(0);\n        }\n        if (units === 'isoWeek') {\n            this.isoWeekday(1);\n        }\n\n        // quarters are also special\n        if (units === 'quarter') {\n            this.month(Math.floor(this.month() / 3) * 3);\n        }\n\n        return this;\n    }\n\n    function endOf (units) {\n        units = normalizeUnits(units);\n        if (units === undefined || units === 'millisecond') {\n            return this;\n        }\n\n        // 'date' is an alias for 'day', so it should be considered as such.\n        if (units === 'date') {\n            units = 'day';\n        }\n\n        return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms');\n    }\n\n    function to_type__valueOf () {\n        return this._d.valueOf() - ((this._offset || 0) * 60000);\n    }\n\n    function unix () {\n        return Math.floor(this.valueOf() / 1000);\n    }\n\n    function toDate () {\n        return new Date(this.valueOf());\n    }\n\n    function toArray () {\n        var m = this;\n        return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()];\n    }\n\n    function toObject () {\n        var m = this;\n        return {\n            years: m.year(),\n            months: m.month(),\n            date: m.date(),\n            hours: m.hours(),\n            minutes: m.minutes(),\n            seconds: m.seconds(),\n            milliseconds: m.milliseconds()\n        };\n    }\n\n    function toJSON () {\n        // new Date(NaN).toJSON() === null\n        return this.isValid() ? this.toISOString() : null;\n    }\n\n    function moment_valid__isValid () {\n        return valid__isValid(this);\n    }\n\n    function parsingFlags () {\n        return extend({}, getParsingFlags(this));\n    }\n\n    function invalidAt () {\n        return getParsingFlags(this).overflow;\n    }\n\n    function creationData() {\n        return {\n            input: this._i,\n            format: this._f,\n            locale: this._locale,\n            isUTC: this._isUTC,\n            strict: this._strict\n        };\n    }\n\n    // FORMATTING\n\n    addFormatToken(0, ['gg', 2], 0, function () {\n        return this.weekYear() % 100;\n    });\n\n    addFormatToken(0, ['GG', 2], 0, function () {\n        return this.isoWeekYear() % 100;\n    });\n\n    function addWeekYearFormatToken (token, getter) {\n        addFormatToken(0, [token, token.length], 0, getter);\n    }\n\n    addWeekYearFormatToken('gggg',     'weekYear');\n    addWeekYearFormatToken('ggggg',    'weekYear');\n    addWeekYearFormatToken('GGGG',  'isoWeekYear');\n    addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n    // ALIASES\n\n    addUnitAlias('weekYear', 'gg');\n    addUnitAlias('isoWeekYear', 'GG');\n\n    // PRIORITY\n\n    addUnitPriority('weekYear', 1);\n    addUnitPriority('isoWeekYear', 1);\n\n\n    // PARSING\n\n    addRegexToken('G',      matchSigned);\n    addRegexToken('g',      matchSigned);\n    addRegexToken('GG',     match1to2, match2);\n    addRegexToken('gg',     match1to2, match2);\n    addRegexToken('GGGG',   match1to4, match4);\n    addRegexToken('gggg',   match1to4, match4);\n    addRegexToken('GGGGG',  match1to6, match6);\n    addRegexToken('ggggg',  match1to6, match6);\n\n    addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) {\n        week[token.substr(0, 2)] = toInt(input);\n    });\n\n    addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n        week[token] = utils_hooks__hooks.parseTwoDigitYear(input);\n    });\n\n    // MOMENTS\n\n    function getSetWeekYear (input) {\n        return getSetWeekYearHelper.call(this,\n                input,\n                this.week(),\n                this.weekday(),\n                this.localeData()._week.dow,\n                this.localeData()._week.doy);\n    }\n\n    function getSetISOWeekYear (input) {\n        return getSetWeekYearHelper.call(this,\n                input, this.isoWeek(), this.isoWeekday(), 1, 4);\n    }\n\n    function getISOWeeksInYear () {\n        return weeksInYear(this.year(), 1, 4);\n    }\n\n    function getWeeksInYear () {\n        var weekInfo = this.localeData()._week;\n        return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n    }\n\n    function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n        var weeksTarget;\n        if (input == null) {\n            return weekOfYear(this, dow, doy).year;\n        } else {\n            weeksTarget = weeksInYear(input, dow, doy);\n            if (week > weeksTarget) {\n                week = weeksTarget;\n            }\n            return setWeekAll.call(this, input, week, weekday, dow, doy);\n        }\n    }\n\n    function setWeekAll(weekYear, week, weekday, dow, doy) {\n        var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n            date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n        this.year(date.getUTCFullYear());\n        this.month(date.getUTCMonth());\n        this.date(date.getUTCDate());\n        return this;\n    }\n\n    // FORMATTING\n\n    addFormatToken('Q', 0, 'Qo', 'quarter');\n\n    // ALIASES\n\n    addUnitAlias('quarter', 'Q');\n\n    // PRIORITY\n\n    addUnitPriority('quarter', 7);\n\n    // PARSING\n\n    addRegexToken('Q', match1);\n    addParseToken('Q', function (input, array) {\n        array[MONTH] = (toInt(input) - 1) * 3;\n    });\n\n    // MOMENTS\n\n    function getSetQuarter (input) {\n        return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);\n    }\n\n    // FORMATTING\n\n    addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n    // ALIASES\n\n    addUnitAlias('date', 'D');\n\n    // PRIOROITY\n    addUnitPriority('date', 9);\n\n    // PARSING\n\n    addRegexToken('D',  match1to2);\n    addRegexToken('DD', match1to2, match2);\n    addRegexToken('Do', function (isStrict, locale) {\n        return isStrict ? locale._ordinalParse : locale._ordinalParseLenient;\n    });\n\n    addParseToken(['D', 'DD'], DATE);\n    addParseToken('Do', function (input, array) {\n        array[DATE] = toInt(input.match(match1to2)[0], 10);\n    });\n\n    // MOMENTS\n\n    var getSetDayOfMonth = makeGetSet('Date', true);\n\n    // FORMATTING\n\n    addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n    // ALIASES\n\n    addUnitAlias('dayOfYear', 'DDD');\n\n    // PRIORITY\n    addUnitPriority('dayOfYear', 4);\n\n    // PARSING\n\n    addRegexToken('DDD',  match1to3);\n    addRegexToken('DDDD', match3);\n    addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n        config._dayOfYear = toInt(input);\n    });\n\n    // HELPERS\n\n    // MOMENTS\n\n    function getSetDayOfYear (input) {\n        var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1;\n        return input == null ? dayOfYear : this.add((input - dayOfYear), 'd');\n    }\n\n    // FORMATTING\n\n    addFormatToken('m', ['mm', 2], 0, 'minute');\n\n    // ALIASES\n\n    addUnitAlias('minute', 'm');\n\n    // PRIORITY\n\n    addUnitPriority('minute', 14);\n\n    // PARSING\n\n    addRegexToken('m',  match1to2);\n    addRegexToken('mm', match1to2, match2);\n    addParseToken(['m', 'mm'], MINUTE);\n\n    // MOMENTS\n\n    var getSetMinute = makeGetSet('Minutes', false);\n\n    // FORMATTING\n\n    addFormatToken('s', ['ss', 2], 0, 'second');\n\n    // ALIASES\n\n    addUnitAlias('second', 's');\n\n    // PRIORITY\n\n    addUnitPriority('second', 15);\n\n    // PARSING\n\n    addRegexToken('s',  match1to2);\n    addRegexToken('ss', match1to2, match2);\n    addParseToken(['s', 'ss'], SECOND);\n\n    // MOMENTS\n\n    var getSetSecond = makeGetSet('Seconds', false);\n\n    // FORMATTING\n\n    addFormatToken('S', 0, 0, function () {\n        return ~~(this.millisecond() / 100);\n    });\n\n    addFormatToken(0, ['SS', 2], 0, function () {\n        return ~~(this.millisecond() / 10);\n    });\n\n    addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n    addFormatToken(0, ['SSSS', 4], 0, function () {\n        return this.millisecond() * 10;\n    });\n    addFormatToken(0, ['SSSSS', 5], 0, function () {\n        return this.millisecond() * 100;\n    });\n    addFormatToken(0, ['SSSSSS', 6], 0, function () {\n        return this.millisecond() * 1000;\n    });\n    addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n        return this.millisecond() * 10000;\n    });\n    addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n        return this.millisecond() * 100000;\n    });\n    addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n        return this.millisecond() * 1000000;\n    });\n\n\n    // ALIASES\n\n    addUnitAlias('millisecond', 'ms');\n\n    // PRIORITY\n\n    addUnitPriority('millisecond', 16);\n\n    // PARSING\n\n    addRegexToken('S',    match1to3, match1);\n    addRegexToken('SS',   match1to3, match2);\n    addRegexToken('SSS',  match1to3, match3);\n\n    var token;\n    for (token = 'SSSS'; token.length <= 9; token += 'S') {\n        addRegexToken(token, matchUnsigned);\n    }\n\n    function parseMs(input, array) {\n        array[MILLISECOND] = toInt(('0.' + input) * 1000);\n    }\n\n    for (token = 'S'; token.length <= 9; token += 'S') {\n        addParseToken(token, parseMs);\n    }\n    // MOMENTS\n\n    var getSetMillisecond = makeGetSet('Milliseconds', false);\n\n    // FORMATTING\n\n    addFormatToken('z',  0, 0, 'zoneAbbr');\n    addFormatToken('zz', 0, 0, 'zoneName');\n\n    // MOMENTS\n\n    function getZoneAbbr () {\n        return this._isUTC ? 'UTC' : '';\n    }\n\n    function getZoneName () {\n        return this._isUTC ? 'Coordinated Universal Time' : '';\n    }\n\n    var momentPrototype__proto = Moment.prototype;\n\n    momentPrototype__proto.add               = add_subtract__add;\n    momentPrototype__proto.calendar          = moment_calendar__calendar;\n    momentPrototype__proto.clone             = clone;\n    momentPrototype__proto.diff              = diff;\n    momentPrototype__proto.endOf             = endOf;\n    momentPrototype__proto.format            = format;\n    momentPrototype__proto.from              = from;\n    momentPrototype__proto.fromNow           = fromNow;\n    momentPrototype__proto.to                = to;\n    momentPrototype__proto.toNow             = toNow;\n    momentPrototype__proto.get               = stringGet;\n    momentPrototype__proto.invalidAt         = invalidAt;\n    momentPrototype__proto.isAfter           = isAfter;\n    momentPrototype__proto.isBefore          = isBefore;\n    momentPrototype__proto.isBetween         = isBetween;\n    momentPrototype__proto.isSame            = isSame;\n    momentPrototype__proto.isSameOrAfter     = isSameOrAfter;\n    momentPrototype__proto.isSameOrBefore    = isSameOrBefore;\n    momentPrototype__proto.isValid           = moment_valid__isValid;\n    momentPrototype__proto.lang              = lang;\n    momentPrototype__proto.locale            = locale;\n    momentPrototype__proto.localeData        = localeData;\n    momentPrototype__proto.max               = prototypeMax;\n    momentPrototype__proto.min               = prototypeMin;\n    momentPrototype__proto.parsingFlags      = parsingFlags;\n    momentPrototype__proto.set               = stringSet;\n    momentPrototype__proto.startOf           = startOf;\n    momentPrototype__proto.subtract          = add_subtract__subtract;\n    momentPrototype__proto.toArray           = toArray;\n    momentPrototype__proto.toObject          = toObject;\n    momentPrototype__proto.toDate            = toDate;\n    momentPrototype__proto.toISOString       = moment_format__toISOString;\n    momentPrototype__proto.toJSON            = toJSON;\n    momentPrototype__proto.toString          = toString;\n    momentPrototype__proto.unix              = unix;\n    momentPrototype__proto.valueOf           = to_type__valueOf;\n    momentPrototype__proto.creationData      = creationData;\n\n    // Year\n    momentPrototype__proto.year       = getSetYear;\n    momentPrototype__proto.isLeapYear = getIsLeapYear;\n\n    // Week Year\n    momentPrototype__proto.weekYear    = getSetWeekYear;\n    momentPrototype__proto.isoWeekYear = getSetISOWeekYear;\n\n    // Quarter\n    momentPrototype__proto.quarter = momentPrototype__proto.quarters = getSetQuarter;\n\n    // Month\n    momentPrototype__proto.month       = getSetMonth;\n    momentPrototype__proto.daysInMonth = getDaysInMonth;\n\n    // Week\n    momentPrototype__proto.week           = momentPrototype__proto.weeks        = getSetWeek;\n    momentPrototype__proto.isoWeek        = momentPrototype__proto.isoWeeks     = getSetISOWeek;\n    momentPrototype__proto.weeksInYear    = getWeeksInYear;\n    momentPrototype__proto.isoWeeksInYear = getISOWeeksInYear;\n\n    // Day\n    momentPrototype__proto.date       = getSetDayOfMonth;\n    momentPrototype__proto.day        = momentPrototype__proto.days             = getSetDayOfWeek;\n    momentPrototype__proto.weekday    = getSetLocaleDayOfWeek;\n    momentPrototype__proto.isoWeekday = getSetISODayOfWeek;\n    momentPrototype__proto.dayOfYear  = getSetDayOfYear;\n\n    // Hour\n    momentPrototype__proto.hour = momentPrototype__proto.hours = getSetHour;\n\n    // Minute\n    momentPrototype__proto.minute = momentPrototype__proto.minutes = getSetMinute;\n\n    // Second\n    momentPrototype__proto.second = momentPrototype__proto.seconds = getSetSecond;\n\n    // Millisecond\n    momentPrototype__proto.millisecond = momentPrototype__proto.milliseconds = getSetMillisecond;\n\n    // Offset\n    momentPrototype__proto.utcOffset            = getSetOffset;\n    momentPrototype__proto.utc                  = setOffsetToUTC;\n    momentPrototype__proto.local                = setOffsetToLocal;\n    momentPrototype__proto.parseZone            = setOffsetToParsedOffset;\n    momentPrototype__proto.hasAlignedHourOffset = hasAlignedHourOffset;\n    momentPrototype__proto.isDST                = isDaylightSavingTime;\n    momentPrototype__proto.isLocal              = isLocal;\n    momentPrototype__proto.isUtcOffset          = isUtcOffset;\n    momentPrototype__proto.isUtc                = isUtc;\n    momentPrototype__proto.isUTC                = isUtc;\n\n    // Timezone\n    momentPrototype__proto.zoneAbbr = getZoneAbbr;\n    momentPrototype__proto.zoneName = getZoneName;\n\n    // Deprecations\n    momentPrototype__proto.dates  = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth);\n    momentPrototype__proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth);\n    momentPrototype__proto.years  = deprecate('years accessor is deprecated. Use year instead', getSetYear);\n    momentPrototype__proto.zone   = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone);\n    momentPrototype__proto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted);\n\n    var momentPrototype = momentPrototype__proto;\n\n    function moment__createUnix (input) {\n        return local__createLocal(input * 1000);\n    }\n\n    function moment__createInZone () {\n        return local__createLocal.apply(null, arguments).parseZone();\n    }\n\n    function preParsePostFormat (string) {\n        return string;\n    }\n\n    var prototype__proto = Locale.prototype;\n\n    prototype__proto.calendar        = locale_calendar__calendar;\n    prototype__proto.longDateFormat  = longDateFormat;\n    prototype__proto.invalidDate     = invalidDate;\n    prototype__proto.ordinal         = ordinal;\n    prototype__proto.preparse        = preParsePostFormat;\n    prototype__proto.postformat      = preParsePostFormat;\n    prototype__proto.relativeTime    = relative__relativeTime;\n    prototype__proto.pastFuture      = pastFuture;\n    prototype__proto.set             = locale_set__set;\n\n    // Month\n    prototype__proto.months            =        localeMonths;\n    prototype__proto.monthsShort       =        localeMonthsShort;\n    prototype__proto.monthsParse       =        localeMonthsParse;\n    prototype__proto.monthsRegex       = monthsRegex;\n    prototype__proto.monthsShortRegex  = monthsShortRegex;\n\n    // Week\n    prototype__proto.week = localeWeek;\n    prototype__proto.firstDayOfYear = localeFirstDayOfYear;\n    prototype__proto.firstDayOfWeek = localeFirstDayOfWeek;\n\n    // Day of Week\n    prototype__proto.weekdays       =        localeWeekdays;\n    prototype__proto.weekdaysMin    =        localeWeekdaysMin;\n    prototype__proto.weekdaysShort  =        localeWeekdaysShort;\n    prototype__proto.weekdaysParse  =        localeWeekdaysParse;\n\n    prototype__proto.weekdaysRegex       =        weekdaysRegex;\n    prototype__proto.weekdaysShortRegex  =        weekdaysShortRegex;\n    prototype__proto.weekdaysMinRegex    =        weekdaysMinRegex;\n\n    // Hours\n    prototype__proto.isPM = localeIsPM;\n    prototype__proto.meridiem = localeMeridiem;\n\n    function lists__get (format, index, field, setter) {\n        var locale = locale_locales__getLocale();\n        var utc = create_utc__createUTC().set(setter, index);\n        return locale[field](utc, format);\n    }\n\n    function listMonthsImpl (format, index, field) {\n        if (typeof format === 'number') {\n            index = format;\n            format = undefined;\n        }\n\n        format = format || '';\n\n        if (index != null) {\n            return lists__get(format, index, field, 'month');\n        }\n\n        var i;\n        var out = [];\n        for (i = 0; i < 12; i++) {\n            out[i] = lists__get(format, i, field, 'month');\n        }\n        return out;\n    }\n\n    // ()\n    // (5)\n    // (fmt, 5)\n    // (fmt)\n    // (true)\n    // (true, 5)\n    // (true, fmt, 5)\n    // (true, fmt)\n    function listWeekdaysImpl (localeSorted, format, index, field) {\n        if (typeof localeSorted === 'boolean') {\n            if (typeof format === 'number') {\n                index = format;\n                format = undefined;\n            }\n\n            format = format || '';\n        } else {\n            format = localeSorted;\n            index = format;\n            localeSorted = false;\n\n            if (typeof format === 'number') {\n                index = format;\n                format = undefined;\n            }\n\n            format = format || '';\n        }\n\n        var locale = locale_locales__getLocale(),\n            shift = localeSorted ? locale._week.dow : 0;\n\n        if (index != null) {\n            return lists__get(format, (index + shift) % 7, field, 'day');\n        }\n\n        var i;\n        var out = [];\n        for (i = 0; i < 7; i++) {\n            out[i] = lists__get(format, (i + shift) % 7, field, 'day');\n        }\n        return out;\n    }\n\n    function lists__listMonths (format, index) {\n        return listMonthsImpl(format, index, 'months');\n    }\n\n    function lists__listMonthsShort (format, index) {\n        return listMonthsImpl(format, index, 'monthsShort');\n    }\n\n    function lists__listWeekdays (localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n    }\n\n    function lists__listWeekdaysShort (localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n    }\n\n    function lists__listWeekdaysMin (localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n    }\n\n    locale_locales__getSetGlobalLocale('en', {\n        ordinalParse: /\\d{1,2}(th|st|nd|rd)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (toInt(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        }\n    });\n\n    // Side effect imports\n    utils_hooks__hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', locale_locales__getSetGlobalLocale);\n    utils_hooks__hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', locale_locales__getLocale);\n\n    var mathAbs = Math.abs;\n\n    function duration_abs__abs () {\n        var data           = this._data;\n\n        this._milliseconds = mathAbs(this._milliseconds);\n        this._days         = mathAbs(this._days);\n        this._months       = mathAbs(this._months);\n\n        data.milliseconds  = mathAbs(data.milliseconds);\n        data.seconds       = mathAbs(data.seconds);\n        data.minutes       = mathAbs(data.minutes);\n        data.hours         = mathAbs(data.hours);\n        data.months        = mathAbs(data.months);\n        data.years         = mathAbs(data.years);\n\n        return this;\n    }\n\n    function duration_add_subtract__addSubtract (duration, input, value, direction) {\n        var other = create__createDuration(input, value);\n\n        duration._milliseconds += direction * other._milliseconds;\n        duration._days         += direction * other._days;\n        duration._months       += direction * other._months;\n\n        return duration._bubble();\n    }\n\n    // supports only 2.0-style add(1, 's') or add(duration)\n    function duration_add_subtract__add (input, value) {\n        return duration_add_subtract__addSubtract(this, input, value, 1);\n    }\n\n    // supports only 2.0-style subtract(1, 's') or subtract(duration)\n    function duration_add_subtract__subtract (input, value) {\n        return duration_add_subtract__addSubtract(this, input, value, -1);\n    }\n\n    function absCeil (number) {\n        if (number < 0) {\n            return Math.floor(number);\n        } else {\n            return Math.ceil(number);\n        }\n    }\n\n    function bubble () {\n        var milliseconds = this._milliseconds;\n        var days         = this._days;\n        var months       = this._months;\n        var data         = this._data;\n        var seconds, minutes, hours, years, monthsFromDays;\n\n        // if we have a mix of positive and negative values, bubble down first\n        // check: https://github.com/moment/moment/issues/2166\n        if (!((milliseconds >= 0 && days >= 0 && months >= 0) ||\n                (milliseconds <= 0 && days <= 0 && months <= 0))) {\n            milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n            days = 0;\n            months = 0;\n        }\n\n        // The following code bubbles up values, see the tests for\n        // examples of what that means.\n        data.milliseconds = milliseconds % 1000;\n\n        seconds           = absFloor(milliseconds / 1000);\n        data.seconds      = seconds % 60;\n\n        minutes           = absFloor(seconds / 60);\n        data.minutes      = minutes % 60;\n\n        hours             = absFloor(minutes / 60);\n        data.hours        = hours % 24;\n\n        days += absFloor(hours / 24);\n\n        // convert days to months\n        monthsFromDays = absFloor(daysToMonths(days));\n        months += monthsFromDays;\n        days -= absCeil(monthsToDays(monthsFromDays));\n\n        // 12 months -> 1 year\n        years = absFloor(months / 12);\n        months %= 12;\n\n        data.days   = days;\n        data.months = months;\n        data.years  = years;\n\n        return this;\n    }\n\n    function daysToMonths (days) {\n        // 400 years have 146097 days (taking into account leap year rules)\n        // 400 years have 12 months === 4800\n        return days * 4800 / 146097;\n    }\n\n    function monthsToDays (months) {\n        // the reverse of daysToMonths\n        return months * 146097 / 4800;\n    }\n\n    function as (units) {\n        var days;\n        var months;\n        var milliseconds = this._milliseconds;\n\n        units = normalizeUnits(units);\n\n        if (units === 'month' || units === 'year') {\n            days   = this._days   + milliseconds / 864e5;\n            months = this._months + daysToMonths(days);\n            return units === 'month' ? months : months / 12;\n        } else {\n            // handle milliseconds separately because of floating point math errors (issue #1867)\n            days = this._days + Math.round(monthsToDays(this._months));\n            switch (units) {\n                case 'week'   : return days / 7     + milliseconds / 6048e5;\n                case 'day'    : return days         + milliseconds / 864e5;\n                case 'hour'   : return days * 24    + milliseconds / 36e5;\n                case 'minute' : return days * 1440  + milliseconds / 6e4;\n                case 'second' : return days * 86400 + milliseconds / 1000;\n                // Math.floor prevents floating point math errors here\n                case 'millisecond': return Math.floor(days * 864e5) + milliseconds;\n                default: throw new Error('Unknown unit ' + units);\n            }\n        }\n    }\n\n    // TODO: Use this.as('ms')?\n    function duration_as__valueOf () {\n        return (\n            this._milliseconds +\n            this._days * 864e5 +\n            (this._months % 12) * 2592e6 +\n            toInt(this._months / 12) * 31536e6\n        );\n    }\n\n    function makeAs (alias) {\n        return function () {\n            return this.as(alias);\n        };\n    }\n\n    var asMilliseconds = makeAs('ms');\n    var asSeconds      = makeAs('s');\n    var asMinutes      = makeAs('m');\n    var asHours        = makeAs('h');\n    var asDays         = makeAs('d');\n    var asWeeks        = makeAs('w');\n    var asMonths       = makeAs('M');\n    var asYears        = makeAs('y');\n\n    function duration_get__get (units) {\n        units = normalizeUnits(units);\n        return this[units + 's']();\n    }\n\n    function makeGetter(name) {\n        return function () {\n            return this._data[name];\n        };\n    }\n\n    var milliseconds = makeGetter('milliseconds');\n    var seconds      = makeGetter('seconds');\n    var minutes      = makeGetter('minutes');\n    var hours        = makeGetter('hours');\n    var days         = makeGetter('days');\n    var months       = makeGetter('months');\n    var years        = makeGetter('years');\n\n    function weeks () {\n        return absFloor(this.days() / 7);\n    }\n\n    var round = Math.round;\n    var thresholds = {\n        s: 45,  // seconds to minute\n        m: 45,  // minutes to hour\n        h: 22,  // hours to day\n        d: 26,  // days to month\n        M: 11   // months to year\n    };\n\n    // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n    function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n        return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n    }\n\n    function duration_humanize__relativeTime (posNegDuration, withoutSuffix, locale) {\n        var duration = create__createDuration(posNegDuration).abs();\n        var seconds  = round(duration.as('s'));\n        var minutes  = round(duration.as('m'));\n        var hours    = round(duration.as('h'));\n        var days     = round(duration.as('d'));\n        var months   = round(duration.as('M'));\n        var years    = round(duration.as('y'));\n\n        var a = seconds < thresholds.s && ['s', seconds]  ||\n                minutes <= 1           && ['m']           ||\n                minutes < thresholds.m && ['mm', minutes] ||\n                hours   <= 1           && ['h']           ||\n                hours   < thresholds.h && ['hh', hours]   ||\n                days    <= 1           && ['d']           ||\n                days    < thresholds.d && ['dd', days]    ||\n                months  <= 1           && ['M']           ||\n                months  < thresholds.M && ['MM', months]  ||\n                years   <= 1           && ['y']           || ['yy', years];\n\n        a[2] = withoutSuffix;\n        a[3] = +posNegDuration > 0;\n        a[4] = locale;\n        return substituteTimeAgo.apply(null, a);\n    }\n\n    // This function allows you to set the rounding function for relative time strings\n    function duration_humanize__getSetRelativeTimeRounding (roundingFunction) {\n        if (roundingFunction === undefined) {\n            return round;\n        }\n        if (typeof(roundingFunction) === 'function') {\n            round = roundingFunction;\n            return true;\n        }\n        return false;\n    }\n\n    // This function allows you to set a threshold for relative time strings\n    function duration_humanize__getSetRelativeTimeThreshold (threshold, limit) {\n        if (thresholds[threshold] === undefined) {\n            return false;\n        }\n        if (limit === undefined) {\n            return thresholds[threshold];\n        }\n        thresholds[threshold] = limit;\n        return true;\n    }\n\n    function humanize (withSuffix) {\n        var locale = this.localeData();\n        var output = duration_humanize__relativeTime(this, !withSuffix, locale);\n\n        if (withSuffix) {\n            output = locale.pastFuture(+this, output);\n        }\n\n        return locale.postformat(output);\n    }\n\n    var iso_string__abs = Math.abs;\n\n    function iso_string__toISOString() {\n        // for ISO strings we do not use the normal bubbling rules:\n        //  * milliseconds bubble up until they become hours\n        //  * days do not bubble at all\n        //  * months bubble up until they become years\n        // This is because there is no context-free conversion between hours and days\n        // (think of clock changes)\n        // and also not between days and months (28-31 days per month)\n        var seconds = iso_string__abs(this._milliseconds) / 1000;\n        var days         = iso_string__abs(this._days);\n        var months       = iso_string__abs(this._months);\n        var minutes, hours, years;\n\n        // 3600 seconds -> 60 minutes -> 1 hour\n        minutes           = absFloor(seconds / 60);\n        hours             = absFloor(minutes / 60);\n        seconds %= 60;\n        minutes %= 60;\n\n        // 12 months -> 1 year\n        years  = absFloor(months / 12);\n        months %= 12;\n\n\n        // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n        var Y = years;\n        var M = months;\n        var D = days;\n        var h = hours;\n        var m = minutes;\n        var s = seconds;\n        var total = this.asSeconds();\n\n        if (!total) {\n            // this is the same as C#'s (Noda) and python (isodate)...\n            // but not other JS (goog.date)\n            return 'P0D';\n        }\n\n        return (total < 0 ? '-' : '') +\n            'P' +\n            (Y ? Y + 'Y' : '') +\n            (M ? M + 'M' : '') +\n            (D ? D + 'D' : '') +\n            ((h || m || s) ? 'T' : '') +\n            (h ? h + 'H' : '') +\n            (m ? m + 'M' : '') +\n            (s ? s + 'S' : '');\n    }\n\n    var duration_prototype__proto = Duration.prototype;\n\n    duration_prototype__proto.abs            = duration_abs__abs;\n    duration_prototype__proto.add            = duration_add_subtract__add;\n    duration_prototype__proto.subtract       = duration_add_subtract__subtract;\n    duration_prototype__proto.as             = as;\n    duration_prototype__proto.asMilliseconds = asMilliseconds;\n    duration_prototype__proto.asSeconds      = asSeconds;\n    duration_prototype__proto.asMinutes      = asMinutes;\n    duration_prototype__proto.asHours        = asHours;\n    duration_prototype__proto.asDays         = asDays;\n    duration_prototype__proto.asWeeks        = asWeeks;\n    duration_prototype__proto.asMonths       = asMonths;\n    duration_prototype__proto.asYears        = asYears;\n    duration_prototype__proto.valueOf        = duration_as__valueOf;\n    duration_prototype__proto._bubble        = bubble;\n    duration_prototype__proto.get            = duration_get__get;\n    duration_prototype__proto.milliseconds   = milliseconds;\n    duration_prototype__proto.seconds        = seconds;\n    duration_prototype__proto.minutes        = minutes;\n    duration_prototype__proto.hours          = hours;\n    duration_prototype__proto.days           = days;\n    duration_prototype__proto.weeks          = weeks;\n    duration_prototype__proto.months         = months;\n    duration_prototype__proto.years          = years;\n    duration_prototype__proto.humanize       = humanize;\n    duration_prototype__proto.toISOString    = iso_string__toISOString;\n    duration_prototype__proto.toString       = iso_string__toISOString;\n    duration_prototype__proto.toJSON         = iso_string__toISOString;\n    duration_prototype__proto.locale         = locale;\n    duration_prototype__proto.localeData     = localeData;\n\n    // Deprecations\n    duration_prototype__proto.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', iso_string__toISOString);\n    duration_prototype__proto.lang = lang;\n\n    // Side effect imports\n\n    // FORMATTING\n\n    addFormatToken('X', 0, 0, 'unix');\n    addFormatToken('x', 0, 0, 'valueOf');\n\n    // PARSING\n\n    addRegexToken('x', matchSigned);\n    addRegexToken('X', matchTimestamp);\n    addParseToken('X', function (input, array, config) {\n        config._d = new Date(parseFloat(input, 10) * 1000);\n    });\n    addParseToken('x', function (input, array, config) {\n        config._d = new Date(toInt(input));\n    });\n\n    // Side effect imports\n\n\n    utils_hooks__hooks.version = '2.14.1';\n\n    setHookCallback(local__createLocal);\n\n    utils_hooks__hooks.fn                    = momentPrototype;\n    utils_hooks__hooks.min                   = min;\n    utils_hooks__hooks.max                   = max;\n    utils_hooks__hooks.now                   = now;\n    utils_hooks__hooks.utc                   = create_utc__createUTC;\n    utils_hooks__hooks.unix                  = moment__createUnix;\n    utils_hooks__hooks.months                = lists__listMonths;\n    utils_hooks__hooks.isDate                = isDate;\n    utils_hooks__hooks.locale                = locale_locales__getSetGlobalLocale;\n    utils_hooks__hooks.invalid               = valid__createInvalid;\n    utils_hooks__hooks.duration              = create__createDuration;\n    utils_hooks__hooks.isMoment              = isMoment;\n    utils_hooks__hooks.weekdays              = lists__listWeekdays;\n    utils_hooks__hooks.parseZone             = moment__createInZone;\n    utils_hooks__hooks.localeData            = locale_locales__getLocale;\n    utils_hooks__hooks.isDuration            = isDuration;\n    utils_hooks__hooks.monthsShort           = lists__listMonthsShort;\n    utils_hooks__hooks.weekdaysMin           = lists__listWeekdaysMin;\n    utils_hooks__hooks.defineLocale          = defineLocale;\n    utils_hooks__hooks.updateLocale          = updateLocale;\n    utils_hooks__hooks.locales               = locale_locales__listLocales;\n    utils_hooks__hooks.weekdaysShort         = lists__listWeekdaysShort;\n    utils_hooks__hooks.normalizeUnits        = normalizeUnits;\n    utils_hooks__hooks.relativeTimeRounding = duration_humanize__getSetRelativeTimeRounding;\n    utils_hooks__hooks.relativeTimeThreshold = duration_humanize__getSetRelativeTimeThreshold;\n    utils_hooks__hooks.calendarFormat        = getCalendarFormat;\n    utils_hooks__hooks.prototype             = momentPrototype;\n\n    var _moment = utils_hooks__hooks;\n\n    return _moment;\n\n}));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/moment.js\n ** module id = 177\n ** module chunks = 4\n **/","import TimePanel from './src/';\nexport default TimePanel;\n\n\n\n/** WEBPACK FOOTER **\n ** ./index.js\n **/","import TimePicker from './TimePicker';\nexport default TimePicker;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/index.js\n **/","import React, { PropTypes } from 'react';\nimport Trigger from 'rc-trigger';\nimport Panel from './Panel';\nimport placements from './placements';\nimport moment from 'moment';\n\nfunction noop() {\n}\n\nfunction refFn(field, component) {\n  this[field] = component;\n}\n\nconst Picker = React.createClass({\n  propTypes: {\n    prefixCls: PropTypes.string,\n    clearText: PropTypes.string,\n    value: PropTypes.object,\n    defaultOpenValue: PropTypes.object,\n    disabled: PropTypes.bool,\n    allowEmpty: PropTypes.bool,\n    defaultValue: PropTypes.object,\n    open: PropTypes.bool,\n    defaultOpen: PropTypes.bool,\n    align: PropTypes.object,\n    placement: PropTypes.any,\n    transitionName: PropTypes.string,\n    getPopupContainer: PropTypes.func,\n    placeholder: PropTypes.string,\n    format: PropTypes.string,\n    showHour: PropTypes.bool,\n    style: PropTypes.object,\n    className: PropTypes.string,\n    showSecond: PropTypes.bool,\n    disabledHours: PropTypes.func,\n    disabledMinutes: PropTypes.func,\n    disabledSeconds: PropTypes.func,\n    hideDisabledOptions: PropTypes.bool,\n    onChange: PropTypes.func,\n    onOpen: PropTypes.func,\n    onClose: PropTypes.func,\n  },\n\n  getDefaultProps() {\n    return {\n      clearText: 'clear',\n      prefixCls: 'rc-time-picker',\n      defaultOpen: false,\n      style: {},\n      className: '',\n      align: {},\n      defaultOpenValue: moment(),\n      allowEmpty: true,\n      showHour: true,\n      showSecond: true,\n      disabledHours: noop,\n      disabledMinutes: noop,\n      disabledSeconds: noop,\n      hideDisabledOptions: false,\n      placement: 'bottomLeft',\n      onChange: noop,\n      onOpen: noop,\n      onClose: noop,\n    };\n  },\n\n  getInitialState() {\n    this.savePanelRef = refFn.bind(this, 'panelInstance');\n    const { defaultOpen, defaultValue, open = defaultOpen, value = defaultValue } = this.props;\n    return {\n      open,\n      value,\n    };\n  },\n\n  componentWillReceiveProps(nextProps) {\n    const { value, open } = nextProps;\n    if ('value' in nextProps) {\n      this.setState({\n        value,\n      });\n    }\n    if (open !== undefined) {\n      this.setState({ open });\n    }\n  },\n\n  onPanelChange(value) {\n    this.setValue(value);\n  },\n\n  onPanelClear() {\n    this.setValue(null);\n    this.setOpen(false);\n  },\n\n  onVisibleChange(open) {\n    this.setOpen(open);\n  },\n\n  onEsc() {\n    this.setOpen(false);\n    this.refs.picker.focus();\n  },\n\n  onKeyDown(e) {\n    if (e.keyCode === 40) {\n      this.setOpen(true);\n    }\n  },\n\n  setValue(value) {\n    if (!('value' in this.props)) {\n      this.setState({\n        value,\n      });\n    }\n    this.props.onChange(value);\n  },\n\n  getFormat() {\n    const format = this.props.format;\n    if (format) {\n      return format;\n    }\n    if (!this.props.showSecond) {\n      return 'HH:mm';\n    }\n    if (!this.props.showHour) {\n      return 'mm:ss';\n    }\n    return 'HH:mm:ss';\n  },\n\n  getPanelElement() {\n    const {\n      prefixCls, placeholder, disabledHours,\n      disabledMinutes, disabledSeconds, hideDisabledOptions,\n      allowEmpty, showHour, showSecond, defaultOpenValue, clearText,\n    } = this.props;\n    return (\n      <Panel\n        clearText={clearText}\n        prefixCls={`${prefixCls}-panel`}\n        ref={this.savePanelRef}\n        value={this.state.value}\n        onChange={this.onPanelChange}\n        onClear={this.onPanelClear}\n        defaultOpenValue={defaultOpenValue}\n        showHour={showHour}\n        onEsc={this.onEsc}\n        showSecond={showSecond}\n        allowEmpty={allowEmpty}\n        format={this.getFormat()}\n        placeholder={placeholder}\n        disabledHours={disabledHours}\n        disabledMinutes={disabledMinutes}\n        disabledSeconds={disabledSeconds}\n        hideDisabledOptions={hideDisabledOptions}\n      />\n    );\n  },\n\n  setOpen(open, callback) {\n    const { onOpen, onClose } = this.props;\n    if (this.state.open !== open) {\n      this.setState({\n        open,\n      }, callback);\n      const event = {\n        open,\n      };\n      if (open) {\n        onOpen(event);\n      } else {\n        onClose(event);\n      }\n    }\n  },\n\n  render() {\n    const {\n      prefixCls, placeholder, placement, align,\n      disabled, transitionName, style, className, showHour,\n      showSecond, getPopupContainer,\n    } = this.props;\n    const { open, value } = this.state;\n    let popupClassName;\n    if (!showHour || !showSecond) {\n      popupClassName = `${prefixCls}-panel-narrow`;\n    }\n    return (\n      <Trigger\n        prefixCls={`${prefixCls}-panel`}\n        popupClassName={popupClassName}\n        popup={this.getPanelElement()}\n        popupAlign={align}\n        builtinPlacements={placements}\n        popupPlacement={placement}\n        action={disabled ? [] : ['click']}\n        destroyPopupOnHide\n        getPopupContainer={getPopupContainer}\n        popupTransitionName={transitionName}\n        popupVisible={open}\n        onPopupVisibleChange={this.onVisibleChange}\n      >\n        <span className={`${prefixCls} ${className}`} style={style}>\n          <input\n            className={`${prefixCls}-input`}\n            ref=\"picker\" type=\"text\" placeholder={placeholder}\n            readOnly\n            onKeyDown={this.onKeyDown}\n            disabled={disabled} value={value && value.format(this.getFormat()) || ''}\n          />\n          <span className={`${prefixCls}-icon`}/>\n        </span>\n      </Trigger>\n    );\n  },\n});\n\nexport default Picker;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/TimePicker.jsx\n **/","'use strict';\n\nmodule.exports = require('./Trigger');\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rc-trigger/lib/index.js\n ** module id = 181\n ** module chunks = 4\n **/","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _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; };\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = require('react-dom');\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _contains = require('rc-util/lib/Dom/contains');\n\nvar _contains2 = _interopRequireDefault(_contains);\n\nvar _addEventListener = require('rc-util/lib/Dom/addEventListener');\n\nvar _addEventListener2 = _interopRequireDefault(_addEventListener);\n\nvar _Popup = require('./Popup');\n\nvar _Popup2 = _interopRequireDefault(_Popup);\n\nvar _utils = require('./utils');\n\nvar _getContainerRenderMixin = require('rc-util/lib/getContainerRenderMixin');\n\nvar _getContainerRenderMixin2 = _interopRequireDefault(_getContainerRenderMixin);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction noop() {}\n\nfunction returnEmptyString() {\n  return '';\n}\n\nvar ALL_HANDLERS = ['onClick', 'onMouseDown', 'onTouchStart', 'onMouseEnter', 'onMouseLeave', 'onFocus', 'onBlur'];\n\nvar Trigger = _react2[\"default\"].createClass({\n  displayName: 'Trigger',\n\n  propTypes: {\n    children: _react.PropTypes.any,\n    action: _react.PropTypes.oneOfType([_react.PropTypes.string, _react.PropTypes.arrayOf(_react.PropTypes.string)]),\n    showAction: _react.PropTypes.any,\n    hideAction: _react.PropTypes.any,\n    getPopupClassNameFromAlign: _react.PropTypes.any,\n    onPopupVisibleChange: _react.PropTypes.func,\n    afterPopupVisibleChange: _react.PropTypes.func,\n    popup: _react.PropTypes.oneOfType([_react.PropTypes.node, _react.PropTypes.func]).isRequired,\n    popupStyle: _react.PropTypes.object,\n    prefixCls: _react.PropTypes.string,\n    popupClassName: _react.PropTypes.string,\n    popupPlacement: _react.PropTypes.string,\n    builtinPlacements: _react.PropTypes.object,\n    popupTransitionName: _react.PropTypes.string,\n    popupAnimation: _react.PropTypes.any,\n    mouseEnterDelay: _react.PropTypes.number,\n    mouseLeaveDelay: _react.PropTypes.number,\n    zIndex: _react.PropTypes.number,\n    focusDelay: _react.PropTypes.number,\n    blurDelay: _react.PropTypes.number,\n    getPopupContainer: _react.PropTypes.func,\n    destroyPopupOnHide: _react.PropTypes.bool,\n    mask: _react.PropTypes.bool,\n    onPopupAlign: _react.PropTypes.func,\n    popupAlign: _react.PropTypes.object,\n    popupVisible: _react.PropTypes.bool,\n    maskTransitionName: _react.PropTypes.string,\n    maskAnimation: _react.PropTypes.string\n  },\n\n  mixins: [(0, _getContainerRenderMixin2[\"default\"])({\n    autoMount: false,\n\n    isVisible: function isVisible(instance) {\n      return instance.state.popupVisible;\n    },\n    getContainer: function getContainer(instance) {\n      var popupContainer = document.createElement('div');\n      var mountNode = instance.props.getPopupContainer ? instance.props.getPopupContainer((0, _reactDom.findDOMNode)(instance)) : document.body;\n      mountNode.appendChild(popupContainer);\n      return popupContainer;\n    },\n    getComponent: function getComponent(instance) {\n      var props = instance.props;\n      var state = instance.state;\n\n      var mouseProps = {};\n      if (instance.isMouseEnterToShow()) {\n        mouseProps.onMouseEnter = instance.onPopupMouseEnter;\n      }\n      if (instance.isMouseLeaveToHide()) {\n        mouseProps.onMouseLeave = instance.onPopupMouseLeave;\n      }\n      return _react2[\"default\"].createElement(\n        _Popup2[\"default\"],\n        _extends({\n          prefixCls: props.prefixCls,\n          destroyPopupOnHide: props.destroyPopupOnHide,\n          visible: state.popupVisible,\n          className: props.popupClassName,\n          action: props.action,\n          align: instance.getPopupAlign(),\n          onAlign: props.onPopupAlign,\n          animation: props.popupAnimation,\n          getClassNameFromAlign: instance.getPopupClassNameFromAlign\n        }, mouseProps, {\n          getRootDomNode: instance.getRootDomNode,\n          style: props.popupStyle,\n          mask: props.mask,\n          zIndex: props.zIndex,\n          transitionName: props.popupTransitionName,\n          maskAnimation: props.maskAnimation,\n          maskTransitionName: props.maskTransitionName\n        }),\n        typeof props.popup === 'function' ? props.popup() : props.popup\n      );\n    }\n  })],\n\n  getDefaultProps: function getDefaultProps() {\n    return {\n      prefixCls: 'rc-trigger-popup',\n      getPopupClassNameFromAlign: returnEmptyString,\n      onPopupVisibleChange: noop,\n      afterPopupVisibleChange: noop,\n      onPopupAlign: noop,\n      popupClassName: '',\n      mouseEnterDelay: 0,\n      mouseLeaveDelay: 0.1,\n      focusDelay: 0,\n      blurDelay: 0.15,\n      popupStyle: {},\n      destroyPopupOnHide: false,\n      popupAlign: {},\n      defaultPopupVisible: false,\n      mask: false,\n      action: [],\n      showAction: [],\n      hideAction: []\n    };\n  },\n  getInitialState: function getInitialState() {\n    var props = this.props;\n    var popupVisible = void 0;\n    if ('popupVisible' in props) {\n      popupVisible = !!props.popupVisible;\n    } else {\n      popupVisible = !!props.defaultPopupVisible;\n    }\n    return {\n      popupVisible: popupVisible\n    };\n  },\n  componentWillMount: function componentWillMount() {\n    var _this = this;\n\n    ALL_HANDLERS.forEach(function (h) {\n      _this['fire' + h] = function (e) {\n        _this.fireEvents(h, e);\n      };\n    });\n  },\n  componentDidMount: function componentDidMount() {\n    this.componentDidUpdate({}, {\n      popupVisible: this.state.popupVisible\n    });\n  },\n  componentWillReceiveProps: function componentWillReceiveProps(_ref) {\n    var popupVisible = _ref.popupVisible;\n\n    if (popupVisible !== undefined) {\n      this.setState({\n        popupVisible: popupVisible\n      });\n    }\n  },\n  componentDidUpdate: function componentDidUpdate(_, prevState) {\n    var props = this.props;\n    var state = this.state;\n    this.renderComponent(null, function () {\n      if (prevState.popupVisible !== state.popupVisible) {\n        props.afterPopupVisibleChange(state.popupVisible);\n      }\n    });\n    if (this.isClickToHide()) {\n      if (state.popupVisible) {\n        if (!this.clickOutsideHandler) {\n          this.clickOutsideHandler = (0, _addEventListener2[\"default\"])(document, 'mousedown', this.onDocumentClick);\n          this.touchOutsideHandler = (0, _addEventListener2[\"default\"])(document, 'touchstart', this.onDocumentClick);\n        }\n        return;\n      }\n    }\n    if (this.clickOutsideHandler) {\n      this.clickOutsideHandler.remove();\n      this.touchOutsideHandler.remove();\n      this.clickOutsideHandler = null;\n      this.touchOutsideHandler = null;\n    }\n  },\n  componentWillUnmount: function componentWillUnmount() {\n    this.clearDelayTimer();\n    if (this.clickOutsideHandler) {\n      this.clickOutsideHandler.remove();\n      this.touchOutsideHandler.remove();\n      this.clickOutsideHandler = null;\n      this.touchOutsideHandler = null;\n    }\n  },\n  onMouseEnter: function onMouseEnter(e) {\n    this.fireEvents('onMouseEnter', e);\n    this.delaySetPopupVisible(true, this.props.mouseEnterDelay);\n  },\n  onMouseLeave: function onMouseLeave(e) {\n    this.fireEvents('onMouseLeave', e);\n    this.delaySetPopupVisible(false, this.props.mouseLeaveDelay);\n  },\n  onPopupMouseEnter: function onPopupMouseEnter() {\n    this.clearDelayTimer();\n  },\n  onPopupMouseLeave: function onPopupMouseLeave(e) {\n    // https://github.com/react-component/trigger/pull/13\n    // react bug?\n    if (e.relatedTarget && !e.relatedTarget.setTimeout && this._component && (0, _contains2[\"default\"])(this._component.getPopupDomNode(), e.relatedTarget)) {\n      return;\n    }\n    this.delaySetPopupVisible(false, this.props.mouseLeaveDelay);\n  },\n  onFocus: function onFocus(e) {\n    this.fireEvents('onFocus', e);\n    // incase focusin and focusout\n    this.clearDelayTimer();\n    if (this.isFocusToShow()) {\n      this.focusTime = Date.now();\n      this.delaySetPopupVisible(true, this.props.focusDelay);\n    }\n  },\n  onMouseDown: function onMouseDown(e) {\n    this.fireEvents('onMouseDown', e);\n    this.preClickTime = Date.now();\n  },\n  onTouchStart: function onTouchStart(e) {\n    this.fireEvents('onTouchStart', e);\n    this.preTouchTime = Date.now();\n  },\n  onBlur: function onBlur(e) {\n    this.fireEvents('onBlur', e);\n    this.clearDelayTimer();\n    if (this.isBlurToHide()) {\n      this.delaySetPopupVisible(false, this.props.blurDelay);\n    }\n  },\n  onClick: function onClick(event) {\n    this.fireEvents('onClick', event);\n    // focus will trigger click\n    if (this.focusTime) {\n      var preTime = void 0;\n      if (this.preClickTime && this.preTouchTime) {\n        preTime = Math.min(this.preClickTime, this.preTouchTime);\n      } else if (this.preClickTime) {\n        preTime = this.preClickTime;\n      } else if (this.preTouchTime) {\n        preTime = this.preTouchTime;\n      }\n      if (Math.abs(preTime - this.focusTime) < 20) {\n        return;\n      }\n      this.focusTime = 0;\n    }\n    this.preClickTime = 0;\n    this.preTouchTime = 0;\n    event.preventDefault();\n    var nextVisible = !this.state.popupVisible;\n    if (this.isClickToHide() && !nextVisible || nextVisible && this.isClickToShow()) {\n      this.setPopupVisible(!this.state.popupVisible);\n    }\n  },\n  onDocumentClick: function onDocumentClick(event) {\n    var target = event.target;\n    var root = (0, _reactDom.findDOMNode)(this);\n    var popupNode = this.getPopupDomNode();\n    if (!(0, _contains2[\"default\"])(root, target) && !(0, _contains2[\"default\"])(popupNode, target)) {\n      this.setPopupVisible(false);\n    }\n  },\n  getPopupDomNode: function getPopupDomNode() {\n    // for test\n    if (this._component) {\n      return this._component.isMounted() ? this._component.getPopupDomNode() : null;\n    }\n    return null;\n  },\n  getRootDomNode: function getRootDomNode() {\n    return _reactDom2[\"default\"].findDOMNode(this);\n  },\n  getPopupClassNameFromAlign: function getPopupClassNameFromAlign(align) {\n    var className = [];\n    var props = this.props;\n    var popupPlacement = props.popupPlacement;\n    var builtinPlacements = props.builtinPlacements;\n    var prefixCls = props.prefixCls;\n\n    if (popupPlacement && builtinPlacements) {\n      className.push((0, _utils.getPopupClassNameFromAlign)(builtinPlacements, prefixCls, align));\n    }\n    if (props.getPopupClassNameFromAlign) {\n      className.push(props.getPopupClassNameFromAlign(align));\n    }\n    return className.join(' ');\n  },\n  getPopupAlign: function getPopupAlign() {\n    var props = this.props;\n    var popupPlacement = props.popupPlacement;\n    var popupAlign = props.popupAlign;\n    var builtinPlacements = props.builtinPlacements;\n\n    if (popupPlacement && builtinPlacements) {\n      return (0, _utils.getAlignFromPlacement)(builtinPlacements, popupPlacement, popupAlign);\n    }\n    return popupAlign;\n  },\n  setPopupVisible: function setPopupVisible(popupVisible) {\n    this.clearDelayTimer();\n    if (this.state.popupVisible !== popupVisible) {\n      if (!('popupVisible' in this.props)) {\n        this.setState({\n          popupVisible: popupVisible\n        });\n      }\n      this.props.onPopupVisibleChange(popupVisible);\n    }\n  },\n  delaySetPopupVisible: function delaySetPopupVisible(visible, delayS) {\n    var _this2 = this;\n\n    var delay = delayS * 1000;\n    this.clearDelayTimer();\n    if (delay) {\n      this.delayTimer = setTimeout(function () {\n        _this2.setPopupVisible(visible);\n        _this2.clearDelayTimer();\n      }, delay);\n    } else {\n      this.setPopupVisible(visible);\n    }\n  },\n  clearDelayTimer: function clearDelayTimer() {\n    if (this.delayTimer) {\n      clearTimeout(this.delayTimer);\n      this.delayTimer = null;\n    }\n  },\n  createTwoChains: function createTwoChains(event) {\n    var childPros = this.props.children.props;\n    var props = this.props;\n    if (childPros[event] && props[event]) {\n      return this['fire' + event];\n    }\n    return childPros[event] || props[event];\n  },\n  isClickToShow: function isClickToShow() {\n    var _props = this.props;\n    var action = _props.action;\n    var showAction = _props.showAction;\n\n    return action.indexOf('click') !== -1 || showAction.indexOf('click') !== -1;\n  },\n  isClickToHide: function isClickToHide() {\n    var _props2 = this.props;\n    var action = _props2.action;\n    var hideAction = _props2.hideAction;\n\n    return action.indexOf('click') !== -1 || hideAction.indexOf('click') !== -1;\n  },\n  isMouseEnterToShow: function isMouseEnterToShow() {\n    var _props3 = this.props;\n    var action = _props3.action;\n    var showAction = _props3.showAction;\n\n    return action.indexOf('hover') !== -1 || showAction.indexOf('mouseEnter') !== -1;\n  },\n  isMouseLeaveToHide: function isMouseLeaveToHide() {\n    var _props4 = this.props;\n    var action = _props4.action;\n    var hideAction = _props4.hideAction;\n\n    return action.indexOf('hover') !== -1 || hideAction.indexOf('mouseLeave') !== -1;\n  },\n  isFocusToShow: function isFocusToShow() {\n    var _props5 = this.props;\n    var action = _props5.action;\n    var showAction = _props5.showAction;\n\n    return action.indexOf('focus') !== -1 || showAction.indexOf('focus') !== -1;\n  },\n  isBlurToHide: function isBlurToHide() {\n    var _props6 = this.props;\n    var action = _props6.action;\n    var hideAction = _props6.hideAction;\n\n    return action.indexOf('focus') !== -1 || hideAction.indexOf('blur') !== -1;\n  },\n  forcePopupAlign: function forcePopupAlign() {\n    if (this.state.popupVisible && this.popupInstance && this.popupInstance.alignInstance) {\n      this.popupInstance.alignInstance.forceAlign();\n    }\n  },\n  fireEvents: function fireEvents(type, e) {\n    var childCallback = this.props.children.props[type];\n    if (childCallback) {\n      childCallback(e);\n    }\n    var callback = this.props[type];\n    if (callback) {\n      callback(e);\n    }\n  },\n  render: function render() {\n    var props = this.props;\n    var children = props.children;\n    var child = _react2[\"default\"].Children.only(children);\n    var newChildProps = {};\n\n    if (this.isClickToHide() || this.isClickToShow()) {\n      newChildProps.onClick = this.onClick;\n      newChildProps.onMouseDown = this.onMouseDown;\n      newChildProps.onTouchStart = this.onTouchStart;\n    } else {\n      newChildProps.onClick = this.createTwoChains('onClick');\n      newChildProps.onMouseDown = this.createTwoChains('onMouseDown');\n      newChildProps.onTouchStart = this.createTwoChains('onTouchStart');\n    }\n    if (this.isMouseEnterToShow()) {\n      newChildProps.onMouseEnter = this.onMouseEnter;\n    } else {\n      newChildProps.onMouseEnter = this.createTwoChains('onMouseEnter');\n    }\n    if (this.isMouseLeaveToHide()) {\n      newChildProps.onMouseLeave = this.onMouseLeave;\n    } else {\n      newChildProps.onMouseLeave = this.createTwoChains('onMouseLeave');\n    }\n    if (this.isFocusToShow() || this.isBlurToHide()) {\n      newChildProps.onFocus = this.onFocus;\n      newChildProps.onBlur = this.onBlur;\n    } else {\n      newChildProps.onFocus = this.createTwoChains('onFocus');\n      newChildProps.onBlur = this.createTwoChains('onBlur');\n    }\n\n    return _react2[\"default\"].cloneElement(child, newChildProps);\n  }\n});\n\nexports[\"default\"] = Trigger;\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rc-trigger/lib/Trigger.js\n ** module id = 182\n ** module chunks = 4\n **/","\"use strict\";\n\nmodule.exports = function contains(root, n) {\n  var node = n;\n  while (node) {\n    if (node === root) {\n      return true;\n    }\n    node = node.parentNode;\n  }\n\n  return false;\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rc-util/lib/Dom/contains.js\n ** module id = 183\n ** module chunks = 4\n **/","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports[\"default\"] = addEventListenerWrap;\n\nvar _addDomEventListener = require('add-dom-event-listener');\n\nvar _addDomEventListener2 = _interopRequireDefault(_addDomEventListener);\n\nvar _reactDom = require('react-dom');\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction addEventListenerWrap(target, eventType, cb) {\n  /* eslint camelcase: 2 */\n  var callback = _reactDom2[\"default\"].unstable_batchedUpdates ? function run(e) {\n    _reactDom2[\"default\"].unstable_batchedUpdates(cb, e);\n  } : cb;\n  return (0, _addDomEventListener2[\"default\"])(target, eventType, callback);\n}\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rc-util/lib/Dom/addEventListener.js\n ** module id = 184\n ** module chunks = 4\n **/","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true\n});\nexports['default'] = addEventListener;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _EventObject = require('./EventObject');\n\nvar _EventObject2 = _interopRequireDefault(_EventObject);\n\nfunction addEventListener(target, eventType, callback) {\n  function wrapCallback(e) {\n    var ne = new _EventObject2['default'](e);\n    callback.call(target, ne);\n  }\n\n  if (target.addEventListener) {\n    target.addEventListener(eventType, wrapCallback, false);\n    return {\n      remove: function remove() {\n        target.removeEventListener(eventType, wrapCallback, false);\n      }\n    };\n  } else if (target.attachEvent) {\n    target.attachEvent('on' + eventType, wrapCallback);\n    return {\n      remove: function remove() {\n        target.detachEvent('on' + eventType, wrapCallback);\n      }\n    };\n  }\n}\n\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/add-dom-event-listener/lib/index.js\n ** module id = 185\n ** module chunks = 4\n **/","/**\n * @ignore\n * event object for dom\n * @author yiminghe@gmail.com\n */\n\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _EventBaseObject = require('./EventBaseObject');\n\nvar _EventBaseObject2 = _interopRequireDefault(_EventBaseObject);\n\nvar _objectAssign = require('object-assign');\n\nvar _objectAssign2 = _interopRequireDefault(_objectAssign);\n\nvar TRUE = true;\nvar FALSE = false;\nvar commonProps = ['altKey', 'bubbles', 'cancelable', 'ctrlKey', 'currentTarget', 'eventPhase', 'metaKey', 'shiftKey', 'target', 'timeStamp', 'view', 'type'];\n\nfunction isNullOrUndefined(w) {\n  return w === null || w === undefined;\n}\n\nvar eventNormalizers = [{\n  reg: /^key/,\n  props: ['char', 'charCode', 'key', 'keyCode', 'which'],\n  fix: function fix(event, nativeEvent) {\n    if (isNullOrUndefined(event.which)) {\n      event.which = !isNullOrUndefined(nativeEvent.charCode) ? nativeEvent.charCode : nativeEvent.keyCode;\n    }\n\n    // add metaKey to non-Mac browsers (use ctrl for PC 's and Meta for Macs)\n    if (event.metaKey === undefined) {\n      event.metaKey = event.ctrlKey;\n    }\n  }\n}, {\n  reg: /^touch/,\n  props: ['touches', 'changedTouches', 'targetTouches']\n}, {\n  reg: /^hashchange$/,\n  props: ['newURL', 'oldURL']\n}, {\n  reg: /^gesturechange$/i,\n  props: ['rotation', 'scale']\n}, {\n  reg: /^(mousewheel|DOMMouseScroll)$/,\n  props: [],\n  fix: function fix(event, nativeEvent) {\n    var deltaX = undefined;\n    var deltaY = undefined;\n    var delta = undefined;\n    var wheelDelta = nativeEvent.wheelDelta;\n    var axis = nativeEvent.axis;\n    var wheelDeltaY = nativeEvent.wheelDeltaY;\n    var wheelDeltaX = nativeEvent.wheelDeltaX;\n    var detail = nativeEvent.detail;\n\n    // ie/webkit\n    if (wheelDelta) {\n      delta = wheelDelta / 120;\n    }\n\n    // gecko\n    if (detail) {\n      // press control e.detail == 1 else e.detail == 3\n      delta = 0 - (detail % 3 === 0 ? detail / 3 : detail);\n    }\n\n    // Gecko\n    if (axis !== undefined) {\n      if (axis === event.HORIZONTAL_AXIS) {\n        deltaY = 0;\n        deltaX = 0 - delta;\n      } else if (axis === event.VERTICAL_AXIS) {\n        deltaX = 0;\n        deltaY = delta;\n      }\n    }\n\n    // Webkit\n    if (wheelDeltaY !== undefined) {\n      deltaY = wheelDeltaY / 120;\n    }\n    if (wheelDeltaX !== undefined) {\n      deltaX = -1 * wheelDeltaX / 120;\n    }\n\n    // 默认 deltaY (ie)\n    if (!deltaX && !deltaY) {\n      deltaY = delta;\n    }\n\n    if (deltaX !== undefined) {\n      /**\n       * deltaX of mousewheel event\n       * @property deltaX\n       * @member Event.DomEvent.Object\n       */\n      event.deltaX = deltaX;\n    }\n\n    if (deltaY !== undefined) {\n      /**\n       * deltaY of mousewheel event\n       * @property deltaY\n       * @member Event.DomEvent.Object\n       */\n      event.deltaY = deltaY;\n    }\n\n    if (delta !== undefined) {\n      /**\n       * delta of mousewheel event\n       * @property delta\n       * @member Event.DomEvent.Object\n       */\n      event.delta = delta;\n    }\n  }\n}, {\n  reg: /^mouse|contextmenu|click|mspointer|(^DOMMouseScroll$)/i,\n  props: ['buttons', 'clientX', 'clientY', 'button', 'offsetX', 'relatedTarget', 'which', 'fromElement', 'toElement', 'offsetY', 'pageX', 'pageY', 'screenX', 'screenY'],\n  fix: function fix(event, nativeEvent) {\n    var eventDoc = undefined;\n    var doc = undefined;\n    var body = undefined;\n    var target = event.target;\n    var button = nativeEvent.button;\n\n    // Calculate pageX/Y if missing and clientX/Y available\n    if (target && isNullOrUndefined(event.pageX) && !isNullOrUndefined(nativeEvent.clientX)) {\n      eventDoc = target.ownerDocument || document;\n      doc = eventDoc.documentElement;\n      body = eventDoc.body;\n      event.pageX = nativeEvent.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);\n      event.pageY = nativeEvent.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0);\n    }\n\n    // which for click: 1 === left; 2 === middle; 3 === right\n    // do not use button\n    if (!event.which && button !== undefined) {\n      if (button & 1) {\n        event.which = 1;\n      } else if (button & 2) {\n        event.which = 3;\n      } else if (button & 4) {\n        event.which = 2;\n      } else {\n        event.which = 0;\n      }\n    }\n\n    // add relatedTarget, if necessary\n    if (!event.relatedTarget && event.fromElement) {\n      event.relatedTarget = event.fromElement === target ? event.toElement : event.fromElement;\n    }\n\n    return event;\n  }\n}];\n\nfunction retTrue() {\n  return TRUE;\n}\n\nfunction retFalse() {\n  return FALSE;\n}\n\nfunction DomEventObject(nativeEvent) {\n  var type = nativeEvent.type;\n\n  var isNative = typeof nativeEvent.stopPropagation === 'function' || typeof nativeEvent.cancelBubble === 'boolean';\n\n  _EventBaseObject2['default'].call(this);\n\n  this.nativeEvent = nativeEvent;\n\n  // in case dom event has been mark as default prevented by lower dom node\n  var isDefaultPrevented = retFalse;\n  if ('defaultPrevented' in nativeEvent) {\n    isDefaultPrevented = nativeEvent.defaultPrevented ? retTrue : retFalse;\n  } else if ('getPreventDefault' in nativeEvent) {\n    // https://bugzilla.mozilla.org/show_bug.cgi?id=691151\n    isDefaultPrevented = nativeEvent.getPreventDefault() ? retTrue : retFalse;\n  } else if ('returnValue' in nativeEvent) {\n    isDefaultPrevented = nativeEvent.returnValue === FALSE ? retTrue : retFalse;\n  }\n\n  this.isDefaultPrevented = isDefaultPrevented;\n\n  var fixFns = [];\n  var fixFn = undefined;\n  var l = undefined;\n  var prop = undefined;\n  var props = commonProps.concat();\n\n  eventNormalizers.forEach(function (normalizer) {\n    if (type.match(normalizer.reg)) {\n      props = props.concat(normalizer.props);\n      if (normalizer.fix) {\n        fixFns.push(normalizer.fix);\n      }\n    }\n  });\n\n  l = props.length;\n\n  // clone properties of the original event object\n  while (l) {\n    prop = props[--l];\n    this[prop] = nativeEvent[prop];\n  }\n\n  // fix target property, if necessary\n  if (!this.target && isNative) {\n    this.target = nativeEvent.srcElement || document; // srcElement might not be defined either\n  }\n\n  // check if target is a text node (safari)\n  if (this.target && this.target.nodeType === 3) {\n    this.target = this.target.parentNode;\n  }\n\n  l = fixFns.length;\n\n  while (l) {\n    fixFn = fixFns[--l];\n    fixFn(this, nativeEvent);\n  }\n\n  this.timeStamp = nativeEvent.timeStamp || Date.now();\n}\n\nvar EventBaseObjectProto = _EventBaseObject2['default'].prototype;\n\n(0, _objectAssign2['default'])(DomEventObject.prototype, EventBaseObjectProto, {\n  constructor: DomEventObject,\n\n  preventDefault: function preventDefault() {\n    var e = this.nativeEvent;\n\n    // if preventDefault exists run it on the original event\n    if (e.preventDefault) {\n      e.preventDefault();\n    } else {\n      // otherwise set the returnValue property of the original event to FALSE (IE)\n      e.returnValue = FALSE;\n    }\n\n    EventBaseObjectProto.preventDefault.call(this);\n  },\n\n  stopPropagation: function stopPropagation() {\n    var e = this.nativeEvent;\n\n    // if stopPropagation exists run it on the original event\n    if (e.stopPropagation) {\n      e.stopPropagation();\n    } else {\n      // otherwise set the cancelBubble property of the original event to TRUE (IE)\n      e.cancelBubble = TRUE;\n    }\n\n    EventBaseObjectProto.stopPropagation.call(this);\n  }\n});\n\nexports['default'] = DomEventObject;\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/add-dom-event-listener/lib/EventObject.js\n ** module id = 186\n ** module chunks = 4\n **/","/**\n * @ignore\n * base event object for custom and dom event.\n * @author yiminghe@gmail.com\n */\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nfunction returnFalse() {\n  return false;\n}\n\nfunction returnTrue() {\n  return true;\n}\n\nfunction EventBaseObject() {\n  this.timeStamp = Date.now();\n  this.target = undefined;\n  this.currentTarget = undefined;\n}\n\nEventBaseObject.prototype = {\n  isEventObject: 1,\n\n  constructor: EventBaseObject,\n\n  isDefaultPrevented: returnFalse,\n\n  isPropagationStopped: returnFalse,\n\n  isImmediatePropagationStopped: returnFalse,\n\n  preventDefault: function preventDefault() {\n    this.isDefaultPrevented = returnTrue;\n  },\n\n  stopPropagation: function stopPropagation() {\n    this.isPropagationStopped = returnTrue;\n  },\n\n  stopImmediatePropagation: function stopImmediatePropagation() {\n    this.isImmediatePropagationStopped = returnTrue;\n    // fixed 1.2\n    // call stopPropagation implicitly\n    this.stopPropagation();\n  },\n\n  halt: function halt(immediate) {\n    if (immediate) {\n      this.stopImmediatePropagation();\n    } else {\n      this.stopPropagation();\n    }\n    this.preventDefault();\n  }\n};\n\nexports[\"default\"] = EventBaseObject;\nmodule.exports = exports[\"default\"];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/add-dom-event-listener/lib/EventBaseObject.js\n ** module id = 187\n ** module chunks = 4\n **/","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _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; };\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = require('react-dom');\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _rcAlign = require('rc-align');\n\nvar _rcAlign2 = _interopRequireDefault(_rcAlign);\n\nvar _rcAnimate = require('rc-animate');\n\nvar _rcAnimate2 = _interopRequireDefault(_rcAnimate);\n\nvar _PopupInner = require('./PopupInner');\n\nvar _PopupInner2 = _interopRequireDefault(_PopupInner);\n\nvar _LazyRenderBox = require('./LazyRenderBox');\n\nvar _LazyRenderBox2 = _interopRequireDefault(_LazyRenderBox);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nvar Popup = _react2[\"default\"].createClass({\n  displayName: 'Popup',\n\n  propTypes: {\n    visible: _react.PropTypes.bool,\n    style: _react.PropTypes.object,\n    getClassNameFromAlign: _react.PropTypes.func,\n    onAlign: _react.PropTypes.func,\n    getRootDomNode: _react.PropTypes.func,\n    onMouseEnter: _react.PropTypes.func,\n    align: _react.PropTypes.any,\n    destroyPopupOnHide: _react.PropTypes.bool,\n    className: _react.PropTypes.string,\n    prefixCls: _react.PropTypes.string,\n    onMouseLeave: _react.PropTypes.func\n  },\n\n  componentDidMount: function componentDidMount() {\n    this.rootNode = this.getPopupDomNode();\n  },\n  onAlign: function onAlign(popupDomNode, align) {\n    var props = this.props;\n    var alignClassName = props.getClassNameFromAlign(props.align);\n    var currentAlignClassName = props.getClassNameFromAlign(align);\n    if (alignClassName !== currentAlignClassName) {\n      this.currentAlignClassName = currentAlignClassName;\n      popupDomNode.className = this.getClassName(currentAlignClassName);\n    }\n    props.onAlign(popupDomNode, align);\n  },\n  getPopupDomNode: function getPopupDomNode() {\n    return _reactDom2[\"default\"].findDOMNode(this.refs.popup);\n  },\n  getTarget: function getTarget() {\n    return this.props.getRootDomNode();\n  },\n  getMaskTransitionName: function getMaskTransitionName() {\n    var props = this.props;\n    var transitionName = props.maskTransitionName;\n    var animation = props.maskAnimation;\n    if (!transitionName && animation) {\n      transitionName = props.prefixCls + '-' + animation;\n    }\n    return transitionName;\n  },\n  getTransitionName: function getTransitionName() {\n    var props = this.props;\n    var transitionName = props.transitionName;\n    if (!transitionName && props.animation) {\n      transitionName = props.prefixCls + '-' + props.animation;\n    }\n    return transitionName;\n  },\n  getClassName: function getClassName(currentAlignClassName) {\n    return this.props.prefixCls + ' ' + this.props.className + ' ' + currentAlignClassName;\n  },\n  getPopupElement: function getPopupElement() {\n    var props = this.props;\n    var align = props.align;\n    var style = props.style;\n    var visible = props.visible;\n    var prefixCls = props.prefixCls;\n    var destroyPopupOnHide = props.destroyPopupOnHide;\n\n    var className = this.getClassName(this.currentAlignClassName || props.getClassNameFromAlign(align));\n    var hiddenClassName = prefixCls + '-hidden';\n    if (!visible) {\n      this.currentAlignClassName = null;\n    }\n    var newStyle = _extends({}, style, this.getZIndexStyle());\n    var popupInnerProps = {\n      className: className,\n      prefixCls: prefixCls,\n      ref: 'popup',\n      onMouseEnter: props.onMouseEnter,\n      onMouseLeave: props.onMouseLeave,\n      style: newStyle\n    };\n    if (destroyPopupOnHide) {\n      return _react2[\"default\"].createElement(\n        _rcAnimate2[\"default\"],\n        {\n          component: '',\n          exclusive: true,\n          transitionAppear: true,\n          transitionName: this.getTransitionName()\n        },\n        visible ? _react2[\"default\"].createElement(\n          _rcAlign2[\"default\"],\n          {\n            target: this.getTarget,\n            key: 'popup',\n            ref: this.saveAlign,\n            monitorWindowResize: true,\n            align: align,\n            onAlign: this.onAlign\n          },\n          _react2[\"default\"].createElement(\n            _PopupInner2[\"default\"],\n            _extends({\n              visible: true\n            }, popupInnerProps),\n            props.children\n          )\n        ) : null\n      );\n    }\n    return _react2[\"default\"].createElement(\n      _rcAnimate2[\"default\"],\n      {\n        component: '',\n        exclusive: true,\n        transitionAppear: true,\n        transitionName: this.getTransitionName(),\n        showProp: 'xVisible'\n      },\n      _react2[\"default\"].createElement(\n        _rcAlign2[\"default\"],\n        {\n          target: this.getTarget,\n          key: 'popup',\n          ref: this.saveAlign,\n          monitorWindowResize: true,\n          xVisible: visible,\n          childrenProps: { visible: 'xVisible' },\n          disabled: !visible,\n          align: align,\n          onAlign: this.onAlign\n        },\n        _react2[\"default\"].createElement(\n          _PopupInner2[\"default\"],\n          _extends({\n            hiddenClassName: hiddenClassName\n          }, popupInnerProps),\n          props.children\n        )\n      )\n    );\n  },\n  getZIndexStyle: function getZIndexStyle() {\n    var style = {};\n    var props = this.props;\n    if (props.zIndex !== undefined) {\n      style.zIndex = props.zIndex;\n    }\n    return style;\n  },\n  getMaskElement: function getMaskElement() {\n    var props = this.props;\n    var maskElement = void 0;\n    if (props.mask) {\n      var maskTransition = this.getMaskTransitionName();\n      maskElement = _react2[\"default\"].createElement(_LazyRenderBox2[\"default\"], {\n        style: this.getZIndexStyle(),\n        key: 'mask',\n        className: props.prefixCls + '-mask',\n        hiddenClassName: props.prefixCls + '-mask-hidden',\n        visible: props.visible\n      });\n      if (maskTransition) {\n        maskElement = _react2[\"default\"].createElement(\n          _rcAnimate2[\"default\"],\n          {\n            key: 'mask',\n            showProp: 'visible',\n            transitionAppear: true,\n            component: '',\n            transitionName: maskTransition\n          },\n          maskElement\n        );\n      }\n    }\n    return maskElement;\n  },\n  saveAlign: function saveAlign(align) {\n    this.alignInstance = align;\n  },\n  render: function render() {\n    return _react2[\"default\"].createElement(\n      'div',\n      null,\n      this.getMaskElement(),\n      this.getPopupElement()\n    );\n  }\n});\n\nexports[\"default\"] = Popup;\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rc-trigger/lib/Popup.js\n ** module id = 188\n ** module chunks = 4\n **/","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _Align = require('./Align');\n\nvar _Align2 = _interopRequireDefault(_Align);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nexports[\"default\"] = _Align2[\"default\"]; // export this package's api\n\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rc-align/lib/index.js\n ** module id = 189\n ** module chunks = 4\n **/","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = require('react-dom');\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _domAlign = require('dom-align');\n\nvar _domAlign2 = _interopRequireDefault(_domAlign);\n\nvar _addEventListener = require('rc-util/lib/Dom/addEventListener');\n\nvar _addEventListener2 = _interopRequireDefault(_addEventListener);\n\nvar _isWindow = require('./isWindow');\n\nvar _isWindow2 = _interopRequireDefault(_isWindow);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction buffer(fn, ms) {\n  var timer = void 0;\n\n  function clear() {\n    if (timer) {\n      clearTimeout(timer);\n      timer = null;\n    }\n  }\n\n  function bufferFn() {\n    clear();\n    timer = setTimeout(fn, ms);\n  }\n\n  bufferFn.clear = clear;\n\n  return bufferFn;\n}\n\nvar Align = _react2[\"default\"].createClass({\n  displayName: 'Align',\n\n  propTypes: {\n    childrenProps: _react.PropTypes.object,\n    align: _react.PropTypes.object.isRequired,\n    target: _react.PropTypes.func,\n    onAlign: _react.PropTypes.func,\n    monitorBufferTime: _react.PropTypes.number,\n    monitorWindowResize: _react.PropTypes.bool,\n    disabled: _react.PropTypes.bool,\n    children: _react.PropTypes.any\n  },\n\n  getDefaultProps: function getDefaultProps() {\n    return {\n      target: function target() {\n        return window;\n      },\n      onAlign: function onAlign() {},\n\n      monitorBufferTime: 50,\n      monitorWindowResize: false,\n      disabled: false\n    };\n  },\n  componentDidMount: function componentDidMount() {\n    var props = this.props;\n    // if parent ref not attached .... use document.getElementById\n    this.forceAlign();\n    if (!props.disabled && props.monitorWindowResize) {\n      this.startMonitorWindowResize();\n    }\n  },\n  componentDidUpdate: function componentDidUpdate(prevProps) {\n    var reAlign = false;\n    var props = this.props;\n\n    if (!props.disabled) {\n      if (prevProps.disabled || prevProps.align !== props.align) {\n        reAlign = true;\n      } else {\n        var lastTarget = prevProps.target();\n        var currentTarget = props.target();\n        if ((0, _isWindow2[\"default\"])(lastTarget) && (0, _isWindow2[\"default\"])(currentTarget)) {\n          reAlign = false;\n        } else if (lastTarget !== currentTarget) {\n          reAlign = true;\n        }\n      }\n    }\n\n    if (reAlign) {\n      this.forceAlign();\n    }\n\n    if (props.monitorWindowResize && !props.disabled) {\n      this.startMonitorWindowResize();\n    } else {\n      this.stopMonitorWindowResize();\n    }\n  },\n  componentWillUnmount: function componentWillUnmount() {\n    this.stopMonitorWindowResize();\n  },\n  startMonitorWindowResize: function startMonitorWindowResize() {\n    if (!this.resizeHandler) {\n      this.bufferMonitor = buffer(this.forceAlign, this.props.monitorBufferTime);\n      this.resizeHandler = (0, _addEventListener2[\"default\"])(window, 'resize', this.bufferMonitor);\n    }\n  },\n  stopMonitorWindowResize: function stopMonitorWindowResize() {\n    if (this.resizeHandler) {\n      this.bufferMonitor.clear();\n      this.resizeHandler.remove();\n      this.resizeHandler = null;\n    }\n  },\n  forceAlign: function forceAlign() {\n    var props = this.props;\n    if (!props.disabled) {\n      var source = _reactDom2[\"default\"].findDOMNode(this);\n      props.onAlign(source, (0, _domAlign2[\"default\"])(source, props.target(), props.align));\n    }\n  },\n  render: function render() {\n    var _props = this.props;\n    var childrenProps = _props.childrenProps;\n    var children = _props.children;\n\n    var child = _react2[\"default\"].Children.only(children);\n    if (childrenProps) {\n      var newProps = {};\n      for (var prop in childrenProps) {\n        if (childrenProps.hasOwnProperty(prop)) {\n          newProps[prop] = this.props[childrenProps[prop]];\n        }\n      }\n      return _react2[\"default\"].cloneElement(child, newProps);\n    }\n    return child;\n  }\n});\n\nexports[\"default\"] = Align;\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rc-align/lib/Align.js\n ** module id = 190\n ** module chunks = 4\n **/","/**\n * align dom node flexibly\n * @author yiminghe@gmail.com\n */\n\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('./utils');\n\nvar _utils2 = _interopRequireDefault(_utils);\n\nvar _getOffsetParent = require('./getOffsetParent');\n\nvar _getOffsetParent2 = _interopRequireDefault(_getOffsetParent);\n\nvar _getVisibleRectForElement = require('./getVisibleRectForElement');\n\nvar _getVisibleRectForElement2 = _interopRequireDefault(_getVisibleRectForElement);\n\nvar _adjustForViewport = require('./adjustForViewport');\n\nvar _adjustForViewport2 = _interopRequireDefault(_adjustForViewport);\n\nvar _getRegion = require('./getRegion');\n\nvar _getRegion2 = _interopRequireDefault(_getRegion);\n\nvar _getElFuturePos = require('./getElFuturePos');\n\nvar _getElFuturePos2 = _interopRequireDefault(_getElFuturePos);\n\n// http://yiminghe.iteye.com/blog/1124720\n\nfunction isFailX(elFuturePos, elRegion, visibleRect) {\n  return elFuturePos.left < visibleRect.left || elFuturePos.left + elRegion.width > visibleRect.right;\n}\n\nfunction isFailY(elFuturePos, elRegion, visibleRect) {\n  return elFuturePos.top < visibleRect.top || elFuturePos.top + elRegion.height > visibleRect.bottom;\n}\n\nfunction isCompleteFailX(elFuturePos, elRegion, visibleRect) {\n  return elFuturePos.left > visibleRect.right || elFuturePos.left + elRegion.width < visibleRect.left;\n}\n\nfunction isCompleteFailY(elFuturePos, elRegion, visibleRect) {\n  return elFuturePos.top > visibleRect.bottom || elFuturePos.top + elRegion.height < visibleRect.top;\n}\n\nfunction flip(points, reg, map) {\n  var ret = [];\n  _utils2['default'].each(points, function (p) {\n    ret.push(p.replace(reg, function (m) {\n      return map[m];\n    }));\n  });\n  return ret;\n}\n\nfunction flipOffset(offset, index) {\n  offset[index] = -offset[index];\n  return offset;\n}\n\nfunction convertOffset(str, offsetLen) {\n  var n = undefined;\n  if (/%$/.test(str)) {\n    n = parseInt(str.substring(0, str.length - 1), 10) / 100 * offsetLen;\n  } else {\n    n = parseInt(str, 10);\n  }\n  return n || 0;\n}\n\nfunction normalizeOffset(offset, el) {\n  offset[0] = convertOffset(offset[0], el.width);\n  offset[1] = convertOffset(offset[1], el.height);\n}\n\nfunction domAlign(el, refNode, align) {\n  var points = align.points;\n  var offset = align.offset || [0, 0];\n  var targetOffset = align.targetOffset || [0, 0];\n  var overflow = align.overflow;\n  var target = align.target || refNode;\n  var source = align.source || el;\n  offset = [].concat(offset);\n  targetOffset = [].concat(targetOffset);\n  overflow = overflow || {};\n  var newOverflowCfg = {};\n\n  var fail = 0;\n  // 当前节点可以被放置的显示区域\n  var visibleRect = (0, _getVisibleRectForElement2['default'])(source);\n  // 当前节点所占的区域, left/top/width/height\n  var elRegion = (0, _getRegion2['default'])(source);\n  // 参照节点所占的区域, left/top/width/height\n  var refNodeRegion = (0, _getRegion2['default'])(target);\n  // 将 offset 转换成数值,支持百分比\n  normalizeOffset(offset, elRegion);\n  normalizeOffset(targetOffset, refNodeRegion);\n  // 当前节点将要被放置的位置\n  var elFuturePos = (0, _getElFuturePos2['default'])(elRegion, refNodeRegion, points, offset, targetOffset);\n  // 当前节点将要所处的区域\n  var newElRegion = _utils2['default'].merge(elRegion, elFuturePos);\n\n  // 如果可视区域不能完全放置当前节点时允许调整\n  if (visibleRect && (overflow.adjustX || overflow.adjustY)) {\n    if (overflow.adjustX) {\n      // 如果横向不能放下\n      if (isFailX(elFuturePos, elRegion, visibleRect)) {\n        // 对齐位置反下\n        var newPoints = flip(points, /[lr]/ig, {\n          l: 'r',\n          r: 'l'\n        });\n        // 偏移量也反下\n        var newOffset = flipOffset(offset, 0);\n        var newTargetOffset = flipOffset(targetOffset, 0);\n        var newElFuturePos = (0, _getElFuturePos2['default'])(elRegion, refNodeRegion, newPoints, newOffset, newTargetOffset);\n        if (!isCompleteFailX(newElFuturePos, elRegion, visibleRect)) {\n          fail = 1;\n          points = newPoints;\n          offset = newOffset;\n          targetOffset = newTargetOffset;\n        }\n      }\n    }\n\n    if (overflow.adjustY) {\n      // 如果纵向不能放下\n      if (isFailY(elFuturePos, elRegion, visibleRect)) {\n        // 对齐位置反下\n        var newPoints = flip(points, /[tb]/ig, {\n          t: 'b',\n          b: 't'\n        });\n        // 偏移量也反下\n        var newOffset = flipOffset(offset, 1);\n        var newTargetOffset = flipOffset(targetOffset, 1);\n        var newElFuturePos = (0, _getElFuturePos2['default'])(elRegion, refNodeRegion, newPoints, newOffset, newTargetOffset);\n        if (!isCompleteFailY(newElFuturePos, elRegion, visibleRect)) {\n          fail = 1;\n          points = newPoints;\n          offset = newOffset;\n          targetOffset = newTargetOffset;\n        }\n      }\n    }\n\n    // 如果失败,重新计算当前节点将要被放置的位置\n    if (fail) {\n      elFuturePos = (0, _getElFuturePos2['default'])(elRegion, refNodeRegion, points, offset, targetOffset);\n      _utils2['default'].mix(newElRegion, elFuturePos);\n    }\n\n    // 检查反下后的位置是否可以放下了\n    // 如果仍然放不下只有指定了可以调整当前方向才调整\n    newOverflowCfg.adjustX = overflow.adjustX && isFailX(elFuturePos, elRegion, visibleRect);\n\n    newOverflowCfg.adjustY = overflow.adjustY && isFailY(elFuturePos, elRegion, visibleRect);\n\n    // 确实要调整,甚至可能会调整高度宽度\n    if (newOverflowCfg.adjustX || newOverflowCfg.adjustY) {\n      newElRegion = (0, _adjustForViewport2['default'])(elFuturePos, elRegion, visibleRect, newOverflowCfg);\n    }\n  }\n\n  // need judge to in case set fixed with in css on height auto element\n  if (newElRegion.width !== elRegion.width) {\n    _utils2['default'].css(source, 'width', source.width() + newElRegion.width - elRegion.width);\n  }\n\n  if (newElRegion.height !== elRegion.height) {\n    _utils2['default'].css(source, 'height', source.height() + newElRegion.height - elRegion.height);\n  }\n\n  // https://github.com/kissyteam/kissy/issues/190\n  // http://localhost:8888/kissy/src/overlay/demo/other/relative_align/align.html\n  // 相对于屏幕位置没变,而 left/top 变了\n  // 例如 <div 'relative'><el absolute></div>\n  _utils2['default'].offset(source, {\n    left: newElRegion.left,\n    top: newElRegion.top\n  }, {\n    useCssRight: align.useCssRight,\n    useCssBottom: align.useCssBottom\n  });\n\n  return {\n    points: points,\n    offset: offset,\n    targetOffset: targetOffset,\n    overflow: newOverflowCfg\n  };\n}\n\ndomAlign.__getOffsetParent = _getOffsetParent2['default'];\n\ndomAlign.__getVisibleRectForElement = _getVisibleRectForElement2['default'];\n\nexports['default'] = domAlign;\n\n/**\n *  2012-04-26 yiminghe@gmail.com\n *   - 优化智能对齐算法\n *   - 慎用 resizeXX\n *\n *  2011-07-13 yiminghe@gmail.com note:\n *   - 增加智能对齐,以及大小调整选项\n **/\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/dom-align/lib/index.js\n ** module id = 191\n ** module chunks = 4\n **/","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true\n});\nvar RE_NUM = /[\\-+]?(?:\\d*\\.|)\\d+(?:[eE][\\-+]?\\d+|)/.source;\n\nvar getComputedStyleX = undefined;\n\nfunction css(el, name, v) {\n  var value = v;\n  if (typeof name === 'object') {\n    for (var i in name) {\n      if (name.hasOwnProperty(i)) {\n        css(el, i, name[i]);\n      }\n    }\n    return undefined;\n  }\n  if (typeof value !== 'undefined') {\n    if (typeof value === 'number') {\n      value = value + 'px';\n    }\n    el.style[name] = value;\n    return undefined;\n  }\n  return getComputedStyleX(el, name);\n}\n\nfunction getClientPosition(elem) {\n  var box = undefined;\n  var x = undefined;\n  var y = undefined;\n  var doc = elem.ownerDocument;\n  var body = doc.body;\n  var docElem = doc && doc.documentElement;\n  // 根据 GBS 最新数据,A-Grade Browsers 都已支持 getBoundingClientRect 方法,不用再考虑传统的实现方式\n  box = elem.getBoundingClientRect();\n\n  // 注:jQuery 还考虑减去 docElem.clientLeft/clientTop\n  // 但测试发现,这样反而会导致当 html 和 body 有边距/边框样式时,获取的值不正确\n  // 此外,ie6 会忽略 html 的 margin 值,幸运地是没有谁会去设置 html 的 margin\n\n  x = box.left;\n  y = box.top;\n\n  // In IE, most of the time, 2 extra pixels are added to the top and left\n  // due to the implicit 2-pixel inset border.  In IE6/7 quirks mode and\n  // IE6 standards mode, this border can be overridden by setting the\n  // document element's border to zero -- thus, we cannot rely on the\n  // offset always being 2 pixels.\n\n  // In quirks mode, the offset can be determined by querying the body's\n  // clientLeft/clientTop, but in standards mode, it is found by querying\n  // the document element's clientLeft/clientTop.  Since we already called\n  // getClientBoundingRect we have already forced a reflow, so it is not\n  // too expensive just to query them all.\n\n  // ie 下应该减去窗口的边框吧,毕竟默认 absolute 都是相对窗口定位的\n  // 窗口边框标准是设 documentElement ,quirks 时设置 body\n  // 最好禁止在 body 和 html 上边框 ,但 ie < 9 html 默认有 2px ,减去\n  // 但是非 ie 不可能设置窗口边框,body html 也不是窗口 ,ie 可以通过 html,body 设置\n  // 标准 ie 下 docElem.clientTop 就是 border-top\n  // ie7 html 即窗口边框改变不了。永远为 2\n  // 但标准 firefox/chrome/ie9 下 docElem.clientTop 是窗口边框,即使设了 border-top 也为 0\n\n  x -= docElem.clientLeft || body.clientLeft || 0;\n  y -= docElem.clientTop || body.clientTop || 0;\n\n  return { left: x, top: y };\n}\n\nfunction getScroll(w, top) {\n  var ret = w['page' + (top ? 'Y' : 'X') + 'Offset'];\n  var method = 'scroll' + (top ? 'Top' : 'Left');\n  if (typeof ret !== 'number') {\n    var d = w.document;\n    // ie6,7,8 standard mode\n    ret = d.documentElement[method];\n    if (typeof ret !== 'number') {\n      // quirks mode\n      ret = d.body[method];\n    }\n  }\n  return ret;\n}\n\nfunction getScrollLeft(w) {\n  return getScroll(w);\n}\n\nfunction getScrollTop(w) {\n  return getScroll(w, true);\n}\n\nfunction getOffset(el) {\n  var pos = getClientPosition(el);\n  var doc = el.ownerDocument;\n  var w = doc.defaultView || doc.parentWindow;\n  pos.left += getScrollLeft(w);\n  pos.top += getScrollTop(w);\n  return pos;\n}\nfunction _getComputedStyle(elem, name, cs) {\n  var computedStyle = cs;\n  var val = '';\n  var d = elem.ownerDocument;\n  computedStyle = computedStyle || d.defaultView.getComputedStyle(elem, null);\n\n  // https://github.com/kissyteam/kissy/issues/61\n  if (computedStyle) {\n    val = computedStyle.getPropertyValue(name) || computedStyle[name];\n  }\n\n  return val;\n}\n\nvar _RE_NUM_NO_PX = new RegExp('^(' + RE_NUM + ')(?!px)[a-z%]+$', 'i');\nvar RE_POS = /^(top|right|bottom|left)$/;\nvar CURRENT_STYLE = 'currentStyle';\nvar RUNTIME_STYLE = 'runtimeStyle';\nvar LEFT = 'left';\nvar PX = 'px';\n\nfunction _getComputedStyleIE(elem, name) {\n  // currentStyle maybe null\n  // http://msdn.microsoft.com/en-us/library/ms535231.aspx\n  var ret = elem[CURRENT_STYLE] && elem[CURRENT_STYLE][name];\n\n  // 当 width/height 设置为百分比时,通过 pixelLeft 方式转换的 width/height 值\n  // 一开始就处理了! CUSTOM_STYLE.height,CUSTOM_STYLE.width ,cssHook 解决@2011-08-19\n  // 在 ie 下不对,需要直接用 offset 方式\n  // borderWidth 等值也有问题,但考虑到 borderWidth 设为百分比的概率很小,这里就不考虑了\n\n  // From the awesome hack by Dean Edwards\n  // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291\n  // If we're not dealing with a regular pixel number\n  // but a number that has a weird ending, we need to convert it to pixels\n  // exclude left right for relativity\n  if (_RE_NUM_NO_PX.test(ret) && !RE_POS.test(name)) {\n    // Remember the original values\n    var style = elem.style;\n    var left = style[LEFT];\n    var rsLeft = elem[RUNTIME_STYLE][LEFT];\n\n    // prevent flashing of content\n    elem[RUNTIME_STYLE][LEFT] = elem[CURRENT_STYLE][LEFT];\n\n    // Put in the new values to get a computed value out\n    style[LEFT] = name === 'fontSize' ? '1em' : ret || 0;\n    ret = style.pixelLeft + PX;\n\n    // Revert the changed values\n    style[LEFT] = left;\n\n    elem[RUNTIME_STYLE][LEFT] = rsLeft;\n  }\n  return ret === '' ? 'auto' : ret;\n}\n\nif (typeof window !== 'undefined') {\n  getComputedStyleX = window.getComputedStyle ? _getComputedStyle : _getComputedStyleIE;\n}\n\nfunction getOffsetDirection(dir, option) {\n  if (dir === 'left') {\n    return option.useCssRight ? 'right' : dir;\n  }\n  return option.useCssBottom ? 'bottom' : dir;\n}\n\nfunction oppositeOffsetDirection(dir) {\n  if (dir === 'left') {\n    return 'right';\n  } else if (dir === 'right') {\n    return 'left';\n  } else if (dir === 'top') {\n    return 'bottom';\n  } else if (dir === 'bottom') {\n    return 'top';\n  }\n}\n\n// 设置 elem 相对 elem.ownerDocument 的坐标\nfunction setOffset(elem, offset, option) {\n  // set position first, in-case top/left are set even on static elem\n  if (css(elem, 'position') === 'static') {\n    elem.style.position = 'relative';\n  }\n  var presetH = -999;\n  var presetV = -999;\n  var horizontalProperty = getOffsetDirection('left', option);\n  var verticalProperty = getOffsetDirection('top', option);\n  var oppositeHorizontalProperty = oppositeOffsetDirection(horizontalProperty);\n  var oppositeVerticalProperty = oppositeOffsetDirection(verticalProperty);\n\n  if (horizontalProperty !== 'left') {\n    presetH = 999;\n  }\n\n  if (verticalProperty !== 'top') {\n    presetV = 999;\n  }\n\n  if ('left' in offset) {\n    elem.style[oppositeHorizontalProperty] = '';\n    elem.style[horizontalProperty] = presetH + 'px';\n  }\n  if ('top' in offset) {\n    elem.style[oppositeVerticalProperty] = '';\n    elem.style[verticalProperty] = presetV + 'px';\n  }\n  var old = getOffset(elem);\n  var ret = {};\n  var key = undefined;\n  for (key in offset) {\n    if (offset.hasOwnProperty(key)) {\n      var dir = getOffsetDirection(key, option);\n      var preset = key === 'left' ? presetH : presetV;\n      if (dir === key) {\n        ret[dir] = preset + offset[key] - old[key];\n      } else {\n        ret[dir] = preset + old[key] - offset[key];\n      }\n    }\n  }\n  css(elem, ret);\n}\n\nfunction each(arr, fn) {\n  for (var i = 0; i < arr.length; i++) {\n    fn(arr[i]);\n  }\n}\n\nfunction isBorderBoxFn(elem) {\n  return getComputedStyleX(elem, 'boxSizing') === 'border-box';\n}\n\nvar BOX_MODELS = ['margin', 'border', 'padding'];\nvar CONTENT_INDEX = -1;\nvar PADDING_INDEX = 2;\nvar BORDER_INDEX = 1;\nvar MARGIN_INDEX = 0;\n\nfunction swap(elem, options, callback) {\n  var old = {};\n  var style = elem.style;\n  var name = undefined;\n\n  // Remember the old values, and insert the new ones\n  for (name in options) {\n    if (options.hasOwnProperty(name)) {\n      old[name] = style[name];\n      style[name] = options[name];\n    }\n  }\n\n  callback.call(elem);\n\n  // Revert the old values\n  for (name in options) {\n    if (options.hasOwnProperty(name)) {\n      style[name] = old[name];\n    }\n  }\n}\n\nfunction getPBMWidth(elem, props, which) {\n  var value = 0;\n  var prop = undefined;\n  var j = undefined;\n  var i = undefined;\n  for (j = 0; j < props.length; j++) {\n    prop = props[j];\n    if (prop) {\n      for (i = 0; i < which.length; i++) {\n        var cssProp = undefined;\n        if (prop === 'border') {\n          cssProp = prop + which[i] + 'Width';\n        } else {\n          cssProp = prop + which[i];\n        }\n        value += parseFloat(getComputedStyleX(elem, cssProp)) || 0;\n      }\n    }\n  }\n  return value;\n}\n\n/**\n * A crude way of determining if an object is a window\n * @member util\n */\nfunction isWindow(obj) {\n  // must use == for ie8\n  /* eslint eqeqeq:0 */\n  return obj !== null && obj !== undefined && obj == obj.window;\n}\n\nvar domUtils = {};\n\neach(['Width', 'Height'], function (name) {\n  domUtils['doc' + name] = function (refWin) {\n    var d = refWin.document;\n    return Math.max(\n    // firefox chrome documentElement.scrollHeight< body.scrollHeight\n    // ie standard mode : documentElement.scrollHeight> body.scrollHeight\n    d.documentElement['scroll' + name],\n    // quirks : documentElement.scrollHeight 最大等于可视窗口多一点?\n    d.body['scroll' + name], domUtils['viewport' + name](d));\n  };\n\n  domUtils['viewport' + name] = function (win) {\n    // pc browser includes scrollbar in window.innerWidth\n    var prop = 'client' + name;\n    var doc = win.document;\n    var body = doc.body;\n    var documentElement = doc.documentElement;\n    var documentElementProp = documentElement[prop];\n    // 标准模式取 documentElement\n    // backcompat 取 body\n    return doc.compatMode === 'CSS1Compat' && documentElementProp || body && body[prop] || documentElementProp;\n  };\n});\n\n/*\n 得到元素的大小信息\n @param elem\n @param name\n @param {String} [extra]  'padding' : (css width) + padding\n 'border' : (css width) + padding + border\n 'margin' : (css width) + padding + border + margin\n */\nfunction getWH(elem, name, ex) {\n  var extra = ex;\n  if (isWindow(elem)) {\n    return name === 'width' ? domUtils.viewportWidth(elem) : domUtils.viewportHeight(elem);\n  } else if (elem.nodeType === 9) {\n    return name === 'width' ? domUtils.docWidth(elem) : domUtils.docHeight(elem);\n  }\n  var which = name === 'width' ? ['Left', 'Right'] : ['Top', 'Bottom'];\n  var borderBoxValue = name === 'width' ? elem.offsetWidth : elem.offsetHeight;\n  var computedStyle = getComputedStyleX(elem);\n  var isBorderBox = isBorderBoxFn(elem, computedStyle);\n  var cssBoxValue = 0;\n  if (borderBoxValue === null || borderBoxValue === undefined || borderBoxValue <= 0) {\n    borderBoxValue = undefined;\n    // Fall back to computed then un computed css if necessary\n    cssBoxValue = getComputedStyleX(elem, name);\n    if (cssBoxValue === null || cssBoxValue === undefined || Number(cssBoxValue) < 0) {\n      cssBoxValue = elem.style[name] || 0;\n    }\n    // Normalize '', auto, and prepare for extra\n    cssBoxValue = parseFloat(cssBoxValue) || 0;\n  }\n  if (extra === undefined) {\n    extra = isBorderBox ? BORDER_INDEX : CONTENT_INDEX;\n  }\n  var borderBoxValueOrIsBorderBox = borderBoxValue !== undefined || isBorderBox;\n  var val = borderBoxValue || cssBoxValue;\n  if (extra === CONTENT_INDEX) {\n    if (borderBoxValueOrIsBorderBox) {\n      return val - getPBMWidth(elem, ['border', 'padding'], which, computedStyle);\n    }\n    return cssBoxValue;\n  } else if (borderBoxValueOrIsBorderBox) {\n    if (extra === BORDER_INDEX) {\n      return val;\n    }\n    return val + (extra === PADDING_INDEX ? -getPBMWidth(elem, ['border'], which, computedStyle) : getPBMWidth(elem, ['margin'], which, computedStyle));\n  }\n  return cssBoxValue + getPBMWidth(elem, BOX_MODELS.slice(extra), which, computedStyle);\n}\n\nvar cssShow = { position: 'absolute', visibility: 'hidden', display: 'block' };\n\n// fix #119 : https://github.com/kissyteam/kissy/issues/119\nfunction getWHIgnoreDisplay() {\n  for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  var val = undefined;\n  var elem = args[0];\n  // in case elem is window\n  // elem.offsetWidth === undefined\n  if (elem.offsetWidth !== 0) {\n    val = getWH.apply(undefined, args);\n  } else {\n    swap(elem, cssShow, function () {\n      val = getWH.apply(undefined, args);\n    });\n  }\n  return val;\n}\n\neach(['width', 'height'], function (name) {\n  var first = name.charAt(0).toUpperCase() + name.slice(1);\n  domUtils['outer' + first] = function (el, includeMargin) {\n    return el && getWHIgnoreDisplay(el, name, includeMargin ? MARGIN_INDEX : BORDER_INDEX);\n  };\n  var which = name === 'width' ? ['Left', 'Right'] : ['Top', 'Bottom'];\n\n  domUtils[name] = function (elem, v) {\n    var val = v;\n    if (val !== undefined) {\n      if (elem) {\n        var computedStyle = getComputedStyleX(elem);\n        var isBorderBox = isBorderBoxFn(elem);\n        if (isBorderBox) {\n          val += getPBMWidth(elem, ['padding', 'border'], which, computedStyle);\n        }\n        return css(elem, name, val);\n      }\n      return undefined;\n    }\n    return elem && getWHIgnoreDisplay(elem, name, CONTENT_INDEX);\n  };\n});\n\nfunction mix(to, from) {\n  for (var i in from) {\n    if (from.hasOwnProperty(i)) {\n      to[i] = from[i];\n    }\n  }\n  return to;\n}\n\nvar utils = {\n  getWindow: function getWindow(node) {\n    if (node && node.document && node.setTimeout) {\n      return node;\n    }\n    var doc = node.ownerDocument || node;\n    return doc.defaultView || doc.parentWindow;\n  },\n  offset: function offset(el, value, option) {\n    if (typeof value !== 'undefined') {\n      setOffset(el, value, option || {});\n    } else {\n      return getOffset(el);\n    }\n  },\n  isWindow: isWindow,\n  each: each,\n  css: css,\n  clone: function clone(obj) {\n    var i = undefined;\n    var ret = {};\n    for (i in obj) {\n      if (obj.hasOwnProperty(i)) {\n        ret[i] = obj[i];\n      }\n    }\n    var overflow = obj.overflow;\n    if (overflow) {\n      for (i in obj) {\n        if (obj.hasOwnProperty(i)) {\n          ret.overflow[i] = obj.overflow[i];\n        }\n      }\n    }\n    return ret;\n  },\n  mix: mix,\n  getWindowScrollLeft: function getWindowScrollLeft(w) {\n    return getScrollLeft(w);\n  },\n  getWindowScrollTop: function getWindowScrollTop(w) {\n    return getScrollTop(w);\n  },\n  merge: function merge() {\n    var ret = {};\n\n    for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      args[_key2] = arguments[_key2];\n    }\n\n    for (var i = 0; i < args.length; i++) {\n      utils.mix(ret, args[i]);\n    }\n    return ret;\n  },\n  viewportWidth: 0,\n  viewportHeight: 0\n};\n\nmix(utils, domUtils);\n\nexports['default'] = utils;\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/dom-align/lib/utils.js\n ** module id = 192\n ** module chunks = 4\n **/","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('./utils');\n\nvar _utils2 = _interopRequireDefault(_utils);\n\n/**\n * 得到会导致元素显示不全的祖先元素\n */\n\nfunction getOffsetParent(element) {\n  // ie 这个也不是完全可行\n  /*\n   <div style=\"width: 50px;height: 100px;overflow: hidden\">\n   <div style=\"width: 50px;height: 100px;position: relative;\" id=\"d6\">\n   元素 6 高 100px 宽 50px<br/>\n   </div>\n   </div>\n   */\n  // element.offsetParent does the right thing in ie7 and below. Return parent with layout!\n  //  In other browsers it only includes elements with position absolute, relative or\n  // fixed, not elements with overflow set to auto or scroll.\n  //        if (UA.ie && ieMode < 8) {\n  //            return element.offsetParent;\n  //        }\n  // 统一的 offsetParent 方法\n  var doc = element.ownerDocument;\n  var body = doc.body;\n  var parent = undefined;\n  var positionStyle = _utils2['default'].css(element, 'position');\n  var skipStatic = positionStyle === 'fixed' || positionStyle === 'absolute';\n\n  if (!skipStatic) {\n    return element.nodeName.toLowerCase() === 'html' ? null : element.parentNode;\n  }\n\n  for (parent = element.parentNode; parent && parent !== body; parent = parent.parentNode) {\n    positionStyle = _utils2['default'].css(parent, 'position');\n    if (positionStyle !== 'static') {\n      return parent;\n    }\n  }\n  return null;\n}\n\nexports['default'] = getOffsetParent;\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/dom-align/lib/getOffsetParent.js\n ** module id = 193\n ** module chunks = 4\n **/","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('./utils');\n\nvar _utils2 = _interopRequireDefault(_utils);\n\nvar _getOffsetParent = require('./getOffsetParent');\n\nvar _getOffsetParent2 = _interopRequireDefault(_getOffsetParent);\n\n/**\n * 获得元素的显示部分的区域\n */\nfunction getVisibleRectForElement(element) {\n  var visibleRect = {\n    left: 0,\n    right: Infinity,\n    top: 0,\n    bottom: Infinity\n  };\n  var el = (0, _getOffsetParent2['default'])(element);\n  var scrollX = undefined;\n  var scrollY = undefined;\n  var winSize = undefined;\n  var doc = element.ownerDocument;\n  var win = doc.defaultView || doc.parentWindow;\n  var body = doc.body;\n  var documentElement = doc.documentElement;\n\n  // Determine the size of the visible rect by climbing the dom accounting for\n  // all scrollable containers.\n  while (el) {\n    // clientWidth is zero for inline block elements in ie.\n    if ((navigator.userAgent.indexOf('MSIE') === -1 || el.clientWidth !== 0) &&\n    // body may have overflow set on it, yet we still get the entire\n    // viewport. In some browsers, el.offsetParent may be\n    // document.documentElement, so check for that too.\n    el !== body && el !== documentElement && _utils2['default'].css(el, 'overflow') !== 'visible') {\n      var pos = _utils2['default'].offset(el);\n      // add border\n      pos.left += el.clientLeft;\n      pos.top += el.clientTop;\n      visibleRect.top = Math.max(visibleRect.top, pos.top);\n      visibleRect.right = Math.min(visibleRect.right,\n      // consider area without scrollBar\n      pos.left + el.clientWidth);\n      visibleRect.bottom = Math.min(visibleRect.bottom, pos.top + el.clientHeight);\n      visibleRect.left = Math.max(visibleRect.left, pos.left);\n    } else if (el === body || el === documentElement) {\n      break;\n    }\n    el = (0, _getOffsetParent2['default'])(el);\n  }\n\n  // Clip by window's viewport.\n  scrollX = _utils2['default'].getWindowScrollLeft(win);\n  scrollY = _utils2['default'].getWindowScrollTop(win);\n  visibleRect.left = Math.max(visibleRect.left, scrollX);\n  visibleRect.top = Math.max(visibleRect.top, scrollY);\n  winSize = {\n    width: _utils2['default'].viewportWidth(win),\n    height: _utils2['default'].viewportHeight(win)\n  };\n  visibleRect.right = Math.min(visibleRect.right, scrollX + winSize.width);\n  visibleRect.bottom = Math.min(visibleRect.bottom, scrollY + winSize.height);\n  return visibleRect.top >= 0 && visibleRect.left >= 0 && visibleRect.bottom > visibleRect.top && visibleRect.right > visibleRect.left ? visibleRect : null;\n}\n\nexports['default'] = getVisibleRectForElement;\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/dom-align/lib/getVisibleRectForElement.js\n ** module id = 194\n ** module chunks = 4\n **/","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('./utils');\n\nvar _utils2 = _interopRequireDefault(_utils);\n\nfunction adjustForViewport(elFuturePos, elRegion, visibleRect, overflow) {\n  var pos = _utils2['default'].clone(elFuturePos);\n  var size = {\n    width: elRegion.width,\n    height: elRegion.height\n  };\n\n  if (overflow.adjustX && pos.left < visibleRect.left) {\n    pos.left = visibleRect.left;\n  }\n\n  // Left edge inside and right edge outside viewport, try to resize it.\n  if (overflow.resizeWidth && pos.left >= visibleRect.left && pos.left + size.width > visibleRect.right) {\n    size.width -= pos.left + size.width - visibleRect.right;\n  }\n\n  // Right edge outside viewport, try to move it.\n  if (overflow.adjustX && pos.left + size.width > visibleRect.right) {\n    // 保证左边界和可视区域左边界对齐\n    pos.left = Math.max(visibleRect.right - size.width, visibleRect.left);\n  }\n\n  // Top edge outside viewport, try to move it.\n  if (overflow.adjustY && pos.top < visibleRect.top) {\n    pos.top = visibleRect.top;\n  }\n\n  // Top edge inside and bottom edge outside viewport, try to resize it.\n  if (overflow.resizeHeight && pos.top >= visibleRect.top && pos.top + size.height > visibleRect.bottom) {\n    size.height -= pos.top + size.height - visibleRect.bottom;\n  }\n\n  // Bottom edge outside viewport, try to move it.\n  if (overflow.adjustY && pos.top + size.height > visibleRect.bottom) {\n    // 保证上边界和可视区域上边界对齐\n    pos.top = Math.max(visibleRect.bottom - size.height, visibleRect.top);\n  }\n\n  return _utils2['default'].mix(pos, size);\n}\n\nexports['default'] = adjustForViewport;\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/dom-align/lib/adjustForViewport.js\n ** module id = 195\n ** module chunks = 4\n **/","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('./utils');\n\nvar _utils2 = _interopRequireDefault(_utils);\n\nfunction getRegion(node) {\n  var offset = undefined;\n  var w = undefined;\n  var h = undefined;\n  if (!_utils2['default'].isWindow(node) && node.nodeType !== 9) {\n    offset = _utils2['default'].offset(node);\n    w = _utils2['default'].outerWidth(node);\n    h = _utils2['default'].outerHeight(node);\n  } else {\n    var win = _utils2['default'].getWindow(node);\n    offset = {\n      left: _utils2['default'].getWindowScrollLeft(win),\n      top: _utils2['default'].getWindowScrollTop(win)\n    };\n    w = _utils2['default'].viewportWidth(win);\n    h = _utils2['default'].viewportHeight(win);\n  }\n  offset.width = w;\n  offset.height = h;\n  return offset;\n}\n\nexports['default'] = getRegion;\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/dom-align/lib/getRegion.js\n ** module id = 196\n ** module chunks = 4\n **/","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _getAlignOffset = require('./getAlignOffset');\n\nvar _getAlignOffset2 = _interopRequireDefault(_getAlignOffset);\n\nfunction getElFuturePos(elRegion, refNodeRegion, points, offset, targetOffset) {\n  var xy = undefined;\n  var diff = undefined;\n  var p1 = undefined;\n  var p2 = undefined;\n\n  xy = {\n    left: elRegion.left,\n    top: elRegion.top\n  };\n\n  p1 = (0, _getAlignOffset2['default'])(refNodeRegion, points[1]);\n  p2 = (0, _getAlignOffset2['default'])(elRegion, points[0]);\n\n  diff = [p2.left - p1.left, p2.top - p1.top];\n\n  return {\n    left: xy.left - diff[0] + offset[0] - targetOffset[0],\n    top: xy.top - diff[1] + offset[1] - targetOffset[1]\n  };\n}\n\nexports['default'] = getElFuturePos;\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/dom-align/lib/getElFuturePos.js\n ** module id = 197\n ** module chunks = 4\n **/","/**\n * 获取 node 上的 align 对齐点 相对于页面的坐标\n */\n\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true\n});\nfunction getAlignOffset(region, align) {\n  var V = align.charAt(0);\n  var H = align.charAt(1);\n  var w = region.width;\n  var h = region.height;\n  var x = undefined;\n  var y = undefined;\n\n  x = region.left;\n  y = region.top;\n\n  if (V === 'c') {\n    y += h / 2;\n  } else if (V === 'b') {\n    y += h;\n  }\n\n  if (H === 'c') {\n    x += w / 2;\n  } else if (H === 'r') {\n    x += w;\n  }\n\n  return {\n    left: x,\n    top: y\n  };\n}\n\nexports['default'] = getAlignOffset;\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/dom-align/lib/getAlignOffset.js\n ** module id = 198\n ** module chunks = 4\n **/","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports[\"default\"] = isWindow;\nfunction isWindow(obj) {\n  /* eslint no-eq-null: 0 */\n  /* eslint eqeqeq: 0 */\n  return obj != null && obj == obj.window;\n}\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rc-align/lib/isWindow.js\n ** module id = 199\n ** module chunks = 4\n **/","'use strict';\n\n// export this package's api\nmodule.exports = require('./Animate');\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rc-animate/lib/index.js\n ** module id = 200\n ** module chunks = 4\n **/","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _ChildrenUtils = require('./ChildrenUtils');\n\nvar _AnimateChild = require('./AnimateChild');\n\nvar _AnimateChild2 = _interopRequireDefault(_AnimateChild);\n\nvar _util = require('./util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar defaultKey = 'rc_animate_' + Date.now();\n\n\nfunction getChildrenFromProps(props) {\n  var children = props.children;\n  if (_react2[\"default\"].isValidElement(children)) {\n    if (!children.key) {\n      return _react2[\"default\"].cloneElement(children, {\n        key: defaultKey\n      });\n    }\n  }\n  return children;\n}\n\nfunction noop() {}\n\nvar Animate = _react2[\"default\"].createClass({\n  displayName: 'Animate',\n\n  propTypes: {\n    component: _react2[\"default\"].PropTypes.any,\n    animation: _react2[\"default\"].PropTypes.object,\n    transitionName: _react2[\"default\"].PropTypes.oneOfType([_react2[\"default\"].PropTypes.string, _react2[\"default\"].PropTypes.object]),\n    transitionEnter: _react2[\"default\"].PropTypes.bool,\n    transitionAppear: _react2[\"default\"].PropTypes.bool,\n    exclusive: _react2[\"default\"].PropTypes.bool,\n    transitionLeave: _react2[\"default\"].PropTypes.bool,\n    onEnd: _react2[\"default\"].PropTypes.func,\n    onEnter: _react2[\"default\"].PropTypes.func,\n    onLeave: _react2[\"default\"].PropTypes.func,\n    onAppear: _react2[\"default\"].PropTypes.func,\n    showProp: _react2[\"default\"].PropTypes.string\n  },\n\n  getDefaultProps: function getDefaultProps() {\n    return {\n      animation: {},\n      component: 'span',\n      transitionEnter: true,\n      transitionLeave: true,\n      transitionAppear: false,\n      onEnd: noop,\n      onEnter: noop,\n      onLeave: noop,\n      onAppear: noop\n    };\n  },\n  getInitialState: function getInitialState() {\n    this.currentlyAnimatingKeys = {};\n    this.keysToEnter = [];\n    this.keysToLeave = [];\n    return {\n      children: (0, _ChildrenUtils.toArrayChildren)(getChildrenFromProps(this.props))\n    };\n  },\n  componentDidMount: function componentDidMount() {\n    var _this = this;\n\n    var showProp = this.props.showProp;\n    var children = this.state.children;\n    if (showProp) {\n      children = children.filter(function (child) {\n        return !!child.props[showProp];\n      });\n    }\n    children.forEach(function (child) {\n      if (child) {\n        _this.performAppear(child.key);\n      }\n    });\n  },\n  componentWillReceiveProps: function componentWillReceiveProps(nextProps) {\n    var _this2 = this;\n\n    this.nextProps = nextProps;\n    var nextChildren = (0, _ChildrenUtils.toArrayChildren)(getChildrenFromProps(nextProps));\n    var props = this.props;\n    // exclusive needs immediate response\n    if (props.exclusive) {\n      Object.keys(this.currentlyAnimatingKeys).forEach(function (key) {\n        _this2.stop(key);\n      });\n    }\n    var showProp = props.showProp;\n    var currentlyAnimatingKeys = this.currentlyAnimatingKeys;\n    // last props children if exclusive\n    var currentChildren = props.exclusive ? (0, _ChildrenUtils.toArrayChildren)(getChildrenFromProps(props)) : this.state.children;\n    // in case destroy in showProp mode\n    var newChildren = [];\n    if (showProp) {\n      currentChildren.forEach(function (currentChild) {\n        var nextChild = currentChild && (0, _ChildrenUtils.findChildInChildrenByKey)(nextChildren, currentChild.key);\n        var newChild = void 0;\n        if ((!nextChild || !nextChild.props[showProp]) && currentChild.props[showProp]) {\n          newChild = _react2[\"default\"].cloneElement(nextChild || currentChild, _defineProperty({}, showProp, true));\n        } else {\n          newChild = nextChild;\n        }\n        if (newChild) {\n          newChildren.push(newChild);\n        }\n      });\n      nextChildren.forEach(function (nextChild) {\n        if (!nextChild || !(0, _ChildrenUtils.findChildInChildrenByKey)(currentChildren, nextChild.key)) {\n          newChildren.push(nextChild);\n        }\n      });\n    } else {\n      newChildren = (0, _ChildrenUtils.mergeChildren)(currentChildren, nextChildren);\n    }\n\n    // need render to avoid update\n    this.setState({\n      children: newChildren\n    });\n\n    nextChildren.forEach(function (child) {\n      var key = child && child.key;\n      if (child && currentlyAnimatingKeys[key]) {\n        return;\n      }\n      var hasPrev = child && (0, _ChildrenUtils.findChildInChildrenByKey)(currentChildren, key);\n      if (showProp) {\n        var showInNext = child.props[showProp];\n        if (hasPrev) {\n          var showInNow = (0, _ChildrenUtils.findShownChildInChildrenByKey)(currentChildren, key, showProp);\n          if (!showInNow && showInNext) {\n            _this2.keysToEnter.push(key);\n          }\n        } else if (showInNext) {\n          _this2.keysToEnter.push(key);\n        }\n      } else if (!hasPrev) {\n        _this2.keysToEnter.push(key);\n      }\n    });\n\n    currentChildren.forEach(function (child) {\n      var key = child && child.key;\n      if (child && currentlyAnimatingKeys[key]) {\n        return;\n      }\n      var hasNext = child && (0, _ChildrenUtils.findChildInChildrenByKey)(nextChildren, key);\n      if (showProp) {\n        var showInNow = child.props[showProp];\n        if (hasNext) {\n          var showInNext = (0, _ChildrenUtils.findShownChildInChildrenByKey)(nextChildren, key, showProp);\n          if (!showInNext && showInNow) {\n            _this2.keysToLeave.push(key);\n          }\n        } else if (showInNow) {\n          _this2.keysToLeave.push(key);\n        }\n      } else if (!hasNext) {\n        _this2.keysToLeave.push(key);\n      }\n    });\n  },\n  componentDidUpdate: function componentDidUpdate() {\n    var keysToEnter = this.keysToEnter;\n    this.keysToEnter = [];\n    keysToEnter.forEach(this.performEnter);\n    var keysToLeave = this.keysToLeave;\n    this.keysToLeave = [];\n    keysToLeave.forEach(this.performLeave);\n  },\n  performEnter: function performEnter(key) {\n    // may already remove by exclusive\n    if (this.refs[key]) {\n      this.currentlyAnimatingKeys[key] = true;\n      this.refs[key].componentWillEnter(this.handleDoneAdding.bind(this, key, 'enter'));\n    }\n  },\n  performAppear: function performAppear(key) {\n    if (this.refs[key]) {\n      this.currentlyAnimatingKeys[key] = true;\n      this.refs[key].componentWillAppear(this.handleDoneAdding.bind(this, key, 'appear'));\n    }\n  },\n  handleDoneAdding: function handleDoneAdding(key, type) {\n    var props = this.props;\n    delete this.currentlyAnimatingKeys[key];\n    // if update on exclusive mode, skip check\n    if (props.exclusive && props !== this.nextProps) {\n      return;\n    }\n    var currentChildren = (0, _ChildrenUtils.toArrayChildren)(getChildrenFromProps(props));\n    if (!this.isValidChildByKey(currentChildren, key)) {\n      // exclusive will not need this\n      this.performLeave(key);\n    } else {\n      if (type === 'appear') {\n        if (_util2[\"default\"].allowAppearCallback(props)) {\n          props.onAppear(key);\n          props.onEnd(key, true);\n        }\n      } else {\n        if (_util2[\"default\"].allowEnterCallback(props)) {\n          props.onEnter(key);\n          props.onEnd(key, true);\n        }\n      }\n    }\n  },\n  performLeave: function performLeave(key) {\n    // may already remove by exclusive\n    if (this.refs[key]) {\n      this.currentlyAnimatingKeys[key] = true;\n      this.refs[key].componentWillLeave(this.handleDoneLeaving.bind(this, key));\n    }\n  },\n  handleDoneLeaving: function handleDoneLeaving(key) {\n    var props = this.props;\n    delete this.currentlyAnimatingKeys[key];\n    // if update on exclusive mode, skip check\n    if (props.exclusive && props !== this.nextProps) {\n      return;\n    }\n    var currentChildren = (0, _ChildrenUtils.toArrayChildren)(getChildrenFromProps(props));\n    // in case state change is too fast\n    if (this.isValidChildByKey(currentChildren, key)) {\n      this.performEnter(key);\n    } else {\n      var end = function end() {\n        if (_util2[\"default\"].allowLeaveCallback(props)) {\n          props.onLeave(key);\n          props.onEnd(key, false);\n        }\n      };\n      /* eslint react/no-is-mounted:0 */\n      if (this.isMounted() && !(0, _ChildrenUtils.isSameChildren)(this.state.children, currentChildren, props.showProp)) {\n        this.setState({\n          children: currentChildren\n        }, end);\n      } else {\n        end();\n      }\n    }\n  },\n  isValidChildByKey: function isValidChildByKey(currentChildren, key) {\n    var showProp = this.props.showProp;\n    if (showProp) {\n      return (0, _ChildrenUtils.findShownChildInChildrenByKey)(currentChildren, key, showProp);\n    }\n    return (0, _ChildrenUtils.findChildInChildrenByKey)(currentChildren, key);\n  },\n  stop: function stop(key) {\n    delete this.currentlyAnimatingKeys[key];\n    var component = this.refs[key];\n    if (component) {\n      component.stop();\n    }\n  },\n  render: function render() {\n    var props = this.props;\n    this.nextProps = props;\n    var stateChildren = this.state.children;\n    var children = null;\n    if (stateChildren) {\n      children = stateChildren.map(function (child) {\n        if (child === null || child === undefined) {\n          return child;\n        }\n        if (!child.key) {\n          throw new Error('must set key for <rc-animate> children');\n        }\n        return _react2[\"default\"].createElement(\n          _AnimateChild2[\"default\"],\n          {\n            key: child.key,\n            ref: child.key,\n            animation: props.animation,\n            transitionName: props.transitionName,\n            transitionEnter: props.transitionEnter,\n            transitionAppear: props.transitionAppear,\n            transitionLeave: props.transitionLeave\n          },\n          child\n        );\n      });\n    }\n    var Component = props.component;\n    if (Component) {\n      var passedProps = props;\n      if (typeof Component === 'string') {\n        passedProps = {\n          className: props.className,\n          style: props.style\n        };\n      }\n      return _react2[\"default\"].createElement(\n        Component,\n        passedProps,\n        children\n      );\n    }\n    return children[0] || null;\n  }\n});\n\nexports[\"default\"] = Animate;\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rc-animate/lib/Animate.js\n ** module id = 201\n ** module chunks = 4\n **/","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.toArrayChildren = toArrayChildren;\nexports.findChildInChildrenByKey = findChildInChildrenByKey;\nexports.findShownChildInChildrenByKey = findShownChildInChildrenByKey;\nexports.findHiddenChildInChildrenByKey = findHiddenChildInChildrenByKey;\nexports.isSameChildren = isSameChildren;\nexports.mergeChildren = mergeChildren;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction toArrayChildren(children) {\n  var ret = [];\n  _react2[\"default\"].Children.forEach(children, function (child) {\n    ret.push(child);\n  });\n  return ret;\n}\n\nfunction findChildInChildrenByKey(children, key) {\n  var ret = null;\n  if (children) {\n    children.forEach(function (child) {\n      if (ret) {\n        return;\n      }\n      if (child && child.key === key) {\n        ret = child;\n      }\n    });\n  }\n  return ret;\n}\n\nfunction findShownChildInChildrenByKey(children, key, showProp) {\n  var ret = null;\n  if (children) {\n    children.forEach(function (child) {\n      if (child && child.key === key && child.props[showProp]) {\n        if (ret) {\n          throw new Error('two child with same key for <rc-animate> children');\n        }\n        ret = child;\n      }\n    });\n  }\n  return ret;\n}\n\nfunction findHiddenChildInChildrenByKey(children, key, showProp) {\n  var found = 0;\n  if (children) {\n    children.forEach(function (child) {\n      if (found) {\n        return;\n      }\n      found = child && child.key === key && !child.props[showProp];\n    });\n  }\n  return found;\n}\n\nfunction isSameChildren(c1, c2, showProp) {\n  var same = c1.length === c2.length;\n  if (same) {\n    c1.forEach(function (child, index) {\n      var child2 = c2[index];\n      if (child && child2) {\n        if (child && !child2 || !child && child2) {\n          same = false;\n        } else if (child.key !== child2.key) {\n          same = false;\n        } else if (showProp && child.props[showProp] !== child2.props[showProp]) {\n          same = false;\n        }\n      }\n    });\n  }\n  return same;\n}\n\nfunction mergeChildren(prev, next) {\n  var ret = [];\n\n  // For each key of `next`, the list of keys to insert before that key in\n  // the combined list\n  var nextChildrenPending = {};\n  var pendingChildren = [];\n  prev.forEach(function (child) {\n    if (child && findChildInChildrenByKey(next, child.key)) {\n      if (pendingChildren.length) {\n        nextChildrenPending[child.key] = pendingChildren;\n        pendingChildren = [];\n      }\n    } else {\n      pendingChildren.push(child);\n    }\n  });\n\n  next.forEach(function (child) {\n    if (child && nextChildrenPending.hasOwnProperty(child.key)) {\n      ret = ret.concat(nextChildrenPending[child.key]);\n    }\n    ret.push(child);\n  });\n\n  ret = ret.concat(pendingChildren);\n\n  return ret;\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rc-animate/lib/ChildrenUtils.js\n ** module id = 202\n ** module chunks = 4\n **/","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj; };\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = require('react-dom');\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _cssAnimation = require('css-animation');\n\nvar _cssAnimation2 = _interopRequireDefault(_cssAnimation);\n\nvar _util = require('./util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nvar transitionMap = {\n  enter: 'transitionEnter',\n  appear: 'transitionAppear',\n  leave: 'transitionLeave'\n};\n\nvar AnimateChild = _react2[\"default\"].createClass({\n  displayName: 'AnimateChild',\n\n  propTypes: {\n    children: _react2[\"default\"].PropTypes.any\n  },\n\n  componentWillUnmount: function componentWillUnmount() {\n    this.stop();\n  },\n  componentWillEnter: function componentWillEnter(done) {\n    if (_util2[\"default\"].isEnterSupported(this.props)) {\n      this.transition('enter', done);\n    } else {\n      done();\n    }\n  },\n  componentWillAppear: function componentWillAppear(done) {\n    if (_util2[\"default\"].isAppearSupported(this.props)) {\n      this.transition('appear', done);\n    } else {\n      done();\n    }\n  },\n  componentWillLeave: function componentWillLeave(done) {\n    if (_util2[\"default\"].isLeaveSupported(this.props)) {\n      this.transition('leave', done);\n    } else {\n      // always sync, do not interupt with react component life cycle\n      // update hidden -> animate hidden ->\n      // didUpdate -> animate leave -> unmount (if animate is none)\n      done();\n    }\n  },\n  transition: function transition(animationType, finishCallback) {\n    var _this = this;\n\n    var node = _reactDom2[\"default\"].findDOMNode(this);\n    var props = this.props;\n    var transitionName = props.transitionName;\n    var nameIsObj = (typeof transitionName === 'undefined' ? 'undefined' : _typeof(transitionName)) === 'object';\n    this.stop();\n    var end = function end() {\n      _this.stopper = null;\n      finishCallback();\n    };\n    if ((_cssAnimation.isCssAnimationSupported || !props.animation[animationType]) && transitionName && props[transitionMap[animationType]]) {\n      var name = nameIsObj ? transitionName[animationType] : transitionName + '-' + animationType;\n      var activeName = name + '-active';\n      if (nameIsObj && transitionName[animationType + 'Active']) {\n        activeName = transitionName[animationType + 'Active'];\n      }\n      this.stopper = (0, _cssAnimation2[\"default\"])(node, {\n        name: name,\n        active: activeName\n      }, end);\n    } else {\n      this.stopper = props.animation[animationType](node, end);\n    }\n  },\n  stop: function stop() {\n    var stopper = this.stopper;\n    if (stopper) {\n      this.stopper = null;\n      stopper.stop();\n    }\n  },\n  render: function render() {\n    return this.props.children;\n  }\n});\n\nexports[\"default\"] = AnimateChild;\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rc-animate/lib/AnimateChild.js\n ** module id = 203\n ** module chunks = 4\n **/","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj; };\n\nvar _Event = require('./Event');\n\nvar _Event2 = _interopRequireDefault(_Event);\n\nvar _componentClasses = require('component-classes');\n\nvar _componentClasses2 = _interopRequireDefault(_componentClasses);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nvar isCssAnimationSupported = _Event2[\"default\"].endEvents.length !== 0;\n\n\nvar capitalPrefixes = ['Webkit', 'Moz', 'O',\n// ms is special .... !\n'ms'];\nvar prefixes = ['-webkit-', '-moz-', '-o-', 'ms-', ''];\n\nfunction getStyleProperty(node, name) {\n  var style = window.getComputedStyle(node);\n\n  var ret = '';\n  for (var i = 0; i < prefixes.length; i++) {\n    ret = style.getPropertyValue(prefixes[i] + name);\n    if (ret) {\n      break;\n    }\n  }\n  return ret;\n}\n\nfunction fixBrowserByTimeout(node) {\n  if (isCssAnimationSupported) {\n    var transitionDelay = parseFloat(getStyleProperty(node, 'transition-delay')) || 0;\n    var transitionDuration = parseFloat(getStyleProperty(node, 'transition-duration')) || 0;\n    var animationDelay = parseFloat(getStyleProperty(node, 'animation-delay')) || 0;\n    var animationDuration = parseFloat(getStyleProperty(node, 'animation-duration')) || 0;\n    var time = Math.max(transitionDuration + transitionDelay, animationDuration + animationDelay);\n    // sometimes, browser bug\n    node.rcEndAnimTimeout = setTimeout(function () {\n      node.rcEndAnimTimeout = null;\n      if (node.rcEndListener) {\n        node.rcEndListener();\n      }\n    }, time * 1000 + 200);\n  }\n}\n\nfunction clearBrowserBugTimeout(node) {\n  if (node.rcEndAnimTimeout) {\n    clearTimeout(node.rcEndAnimTimeout);\n    node.rcEndAnimTimeout = null;\n  }\n}\n\nvar cssAnimation = function cssAnimation(node, transitionName, endCallback) {\n  var nameIsObj = (typeof transitionName === 'undefined' ? 'undefined' : _typeof(transitionName)) === 'object';\n  var className = nameIsObj ? transitionName.name : transitionName;\n  var activeClassName = nameIsObj ? transitionName.active : transitionName + '-active';\n  var end = endCallback;\n  var start = void 0;\n  var active = void 0;\n  var nodeClasses = (0, _componentClasses2[\"default\"])(node);\n\n  if (endCallback && Object.prototype.toString.call(endCallback) === '[object Object]') {\n    end = endCallback.end;\n    start = endCallback.start;\n    active = endCallback.active;\n  }\n\n  if (node.rcEndListener) {\n    node.rcEndListener();\n  }\n\n  node.rcEndListener = function (e) {\n    if (e && e.target !== node) {\n      return;\n    }\n\n    if (node.rcAnimTimeout) {\n      clearTimeout(node.rcAnimTimeout);\n      node.rcAnimTimeout = null;\n    }\n\n    clearBrowserBugTimeout(node);\n\n    nodeClasses.remove(className);\n    nodeClasses.remove(activeClassName);\n\n    _Event2[\"default\"].removeEndEventListener(node, node.rcEndListener);\n    node.rcEndListener = null;\n\n    // Usually this optional end is used for informing an owner of\n    // a leave animation and telling it to remove the child.\n    if (end) {\n      end();\n    }\n  };\n\n  _Event2[\"default\"].addEndEventListener(node, node.rcEndListener);\n\n  if (start) {\n    start();\n  }\n  nodeClasses.add(className);\n\n  node.rcAnimTimeout = setTimeout(function () {\n    node.rcAnimTimeout = null;\n    nodeClasses.add(activeClassName);\n    if (active) {\n      setTimeout(active, 0);\n    }\n    fixBrowserByTimeout(node);\n    // 30ms for firefox\n  }, 30);\n\n  return {\n    stop: function stop() {\n      if (node.rcEndListener) {\n        node.rcEndListener();\n      }\n    }\n  };\n};\n\ncssAnimation.style = function (node, style, callback) {\n  if (node.rcEndListener) {\n    node.rcEndListener();\n  }\n\n  node.rcEndListener = function (e) {\n    if (e && e.target !== node) {\n      return;\n    }\n\n    if (node.rcAnimTimeout) {\n      clearTimeout(node.rcAnimTimeout);\n      node.rcAnimTimeout = null;\n    }\n\n    clearBrowserBugTimeout(node);\n\n    _Event2[\"default\"].removeEndEventListener(node, node.rcEndListener);\n    node.rcEndListener = null;\n\n    // Usually this optional callback is used for informing an owner of\n    // a leave animation and telling it to remove the child.\n    if (callback) {\n      callback();\n    }\n  };\n\n  _Event2[\"default\"].addEndEventListener(node, node.rcEndListener);\n\n  node.rcAnimTimeout = setTimeout(function () {\n    for (var s in style) {\n      if (style.hasOwnProperty(s)) {\n        node.style[s] = style[s];\n      }\n    }\n    node.rcAnimTimeout = null;\n    fixBrowserByTimeout(node);\n  }, 0);\n};\n\ncssAnimation.setTransition = function (node, p, value) {\n  var property = p;\n  var v = value;\n  if (value === undefined) {\n    v = property;\n    property = '';\n  }\n  property = property || '';\n  capitalPrefixes.forEach(function (prefix) {\n    node.style[prefix + 'Transition' + property] = v;\n  });\n};\n\ncssAnimation.isCssAnimationSupported = isCssAnimationSupported;\n\nexports[\"default\"] = cssAnimation;\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/css-animation/lib/index.js\n ** module id = 204\n ** module chunks = 4\n **/","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nvar EVENT_NAME_MAP = {\n  transitionend: {\n    transition: 'transitionend',\n    WebkitTransition: 'webkitTransitionEnd',\n    MozTransition: 'mozTransitionEnd',\n    OTransition: 'oTransitionEnd',\n    msTransition: 'MSTransitionEnd'\n  },\n\n  animationend: {\n    animation: 'animationend',\n    WebkitAnimation: 'webkitAnimationEnd',\n    MozAnimation: 'mozAnimationEnd',\n    OAnimation: 'oAnimationEnd',\n    msAnimation: 'MSAnimationEnd'\n  }\n};\n\nvar endEvents = [];\n\nfunction detectEvents() {\n  var testEl = document.createElement('div');\n  var style = testEl.style;\n\n  if (!('AnimationEvent' in window)) {\n    delete EVENT_NAME_MAP.animationend.animation;\n  }\n\n  if (!('TransitionEvent' in window)) {\n    delete EVENT_NAME_MAP.transitionend.transition;\n  }\n\n  for (var baseEventName in EVENT_NAME_MAP) {\n    if (EVENT_NAME_MAP.hasOwnProperty(baseEventName)) {\n      var baseEvents = EVENT_NAME_MAP[baseEventName];\n      for (var styleName in baseEvents) {\n        if (styleName in style) {\n          endEvents.push(baseEvents[styleName]);\n          break;\n        }\n      }\n    }\n  }\n}\n\nif (typeof window !== 'undefined' && typeof document !== 'undefined') {\n  detectEvents();\n}\n\nfunction addEventListener(node, eventName, eventListener) {\n  node.addEventListener(eventName, eventListener, false);\n}\n\nfunction removeEventListener(node, eventName, eventListener) {\n  node.removeEventListener(eventName, eventListener, false);\n}\n\nvar TransitionEvents = {\n  addEndEventListener: function addEndEventListener(node, eventListener) {\n    if (endEvents.length === 0) {\n      window.setTimeout(eventListener, 0);\n      return;\n    }\n    endEvents.forEach(function (endEvent) {\n      addEventListener(node, endEvent, eventListener);\n    });\n  },\n\n\n  endEvents: endEvents,\n\n  removeEndEventListener: function removeEndEventListener(node, eventListener) {\n    if (endEvents.length === 0) {\n      return;\n    }\n    endEvents.forEach(function (endEvent) {\n      removeEventListener(node, endEvent, eventListener);\n    });\n  }\n};\n\nexports[\"default\"] = TransitionEvents;\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/css-animation/lib/Event.js\n ** module id = 205\n ** module chunks = 4\n **/","/**\n * Module dependencies.\n */\n\ntry {\n  var index = require('indexof');\n} catch (err) {\n  var index = require('component-indexof');\n}\n\n/**\n * Whitespace regexp.\n */\n\nvar re = /\\s+/;\n\n/**\n * toString reference.\n */\n\nvar toString = Object.prototype.toString;\n\n/**\n * Wrap `el` in a `ClassList`.\n *\n * @param {Element} el\n * @return {ClassList}\n * @api public\n */\n\nmodule.exports = function(el){\n  return new ClassList(el);\n};\n\n/**\n * Initialize a new ClassList for `el`.\n *\n * @param {Element} el\n * @api private\n */\n\nfunction ClassList(el) {\n  if (!el || !el.nodeType) {\n    throw new Error('A DOM element reference is required');\n  }\n  this.el = el;\n  this.list = el.classList;\n}\n\n/**\n * Add class `name` if not already present.\n *\n * @param {String} name\n * @return {ClassList}\n * @api public\n */\n\nClassList.prototype.add = function(name){\n  // classList\n  if (this.list) {\n    this.list.add(name);\n    return this;\n  }\n\n  // fallback\n  var arr = this.array();\n  var i = index(arr, name);\n  if (!~i) arr.push(name);\n  this.el.className = arr.join(' ');\n  return this;\n};\n\n/**\n * Remove class `name` when present, or\n * pass a regular expression to remove\n * any which match.\n *\n * @param {String|RegExp} name\n * @return {ClassList}\n * @api public\n */\n\nClassList.prototype.remove = function(name){\n  if ('[object RegExp]' == toString.call(name)) {\n    return this.removeMatching(name);\n  }\n\n  // classList\n  if (this.list) {\n    this.list.remove(name);\n    return this;\n  }\n\n  // fallback\n  var arr = this.array();\n  var i = index(arr, name);\n  if (~i) arr.splice(i, 1);\n  this.el.className = arr.join(' ');\n  return this;\n};\n\n/**\n * Remove all classes matching `re`.\n *\n * @param {RegExp} re\n * @return {ClassList}\n * @api private\n */\n\nClassList.prototype.removeMatching = function(re){\n  var arr = this.array();\n  for (var i = 0; i < arr.length; i++) {\n    if (re.test(arr[i])) {\n      this.remove(arr[i]);\n    }\n  }\n  return this;\n};\n\n/**\n * Toggle class `name`, can force state via `force`.\n *\n * For browsers that support classList, but do not support `force` yet,\n * the mistake will be detected and corrected.\n *\n * @param {String} name\n * @param {Boolean} force\n * @return {ClassList}\n * @api public\n */\n\nClassList.prototype.toggle = function(name, force){\n  // classList\n  if (this.list) {\n    if (\"undefined\" !== typeof force) {\n      if (force !== this.list.toggle(name, force)) {\n        this.list.toggle(name); // toggle again to correct\n      }\n    } else {\n      this.list.toggle(name);\n    }\n    return this;\n  }\n\n  // fallback\n  if (\"undefined\" !== typeof force) {\n    if (!force) {\n      this.remove(name);\n    } else {\n      this.add(name);\n    }\n  } else {\n    if (this.has(name)) {\n      this.remove(name);\n    } else {\n      this.add(name);\n    }\n  }\n\n  return this;\n};\n\n/**\n * Return an array of classes.\n *\n * @return {Array}\n * @api public\n */\n\nClassList.prototype.array = function(){\n  var className = this.el.getAttribute('class') || '';\n  var str = className.replace(/^\\s+|\\s+$/g, '');\n  var arr = str.split(re);\n  if ('' === arr[0]) arr.shift();\n  return arr;\n};\n\n/**\n * Check if class `name` is present.\n *\n * @param {String} name\n * @return {ClassList}\n * @api public\n */\n\nClassList.prototype.has =\nClassList.prototype.contains = function(name){\n  return this.list\n    ? this.list.contains(name)\n    : !! ~index(this.array(), name);\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/component-classes/index.js\n ** module id = 206\n ** module chunks = 4\n **/","module.exports = function(arr, obj){\n  if (arr.indexOf) return arr.indexOf(obj);\n  for (var i = 0; i < arr.length; ++i) {\n    if (arr[i] === obj) return i;\n  }\n  return -1;\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/component-indexof/index.js\n ** module id = 207\n ** module chunks = 4\n **/","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nvar util = {\n  isAppearSupported: function isAppearSupported(props) {\n    return props.transitionName && props.transitionAppear || props.animation.appear;\n  },\n  isEnterSupported: function isEnterSupported(props) {\n    return props.transitionName && props.transitionEnter || props.animation.enter;\n  },\n  isLeaveSupported: function isLeaveSupported(props) {\n    return props.transitionName && props.transitionLeave || props.animation.leave;\n  },\n  allowAppearCallback: function allowAppearCallback(props) {\n    return props.transitionAppear || props.animation.appear;\n  },\n  allowEnterCallback: function allowEnterCallback(props) {\n    return props.transitionEnter || props.animation.enter;\n  },\n  allowLeaveCallback: function allowLeaveCallback(props) {\n    return props.transitionLeave || props.animation.leave;\n  }\n};\nexports[\"default\"] = util;\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rc-animate/lib/util.js\n ** module id = 208\n ** module chunks = 4\n **/","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _LazyRenderBox = require('./LazyRenderBox');\n\nvar _LazyRenderBox2 = _interopRequireDefault(_LazyRenderBox);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nvar PopupInner = _react2[\"default\"].createClass({\n  displayName: 'PopupInner',\n\n  propTypes: {\n    hiddenClassName: _react.PropTypes.string,\n    className: _react.PropTypes.string,\n    prefixCls: _react.PropTypes.string,\n    onMouseEnter: _react.PropTypes.func,\n    onMouseLeave: _react.PropTypes.func,\n    children: _react.PropTypes.any\n  },\n  render: function render() {\n    var props = this.props;\n    var className = props.className;\n    if (!props.visible) {\n      className += ' ' + props.hiddenClassName;\n    }\n    return _react2[\"default\"].createElement(\n      'div',\n      {\n        className: className,\n        onMouseEnter: props.onMouseEnter,\n        onMouseLeave: props.onMouseLeave,\n        style: props.style\n      },\n      _react2[\"default\"].createElement(\n        _LazyRenderBox2[\"default\"],\n        { className: props.prefixCls + '-content', visible: props.visible },\n        props.children\n      )\n    );\n  }\n});\n\nexports[\"default\"] = PopupInner;\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rc-trigger/lib/PopupInner.js\n ** module id = 209\n ** module chunks = 4\n **/","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nvar LazyRenderBox = _react2[\"default\"].createClass({\n  displayName: 'LazyRenderBox',\n\n  propTypes: {\n    children: _react.PropTypes.any,\n    className: _react.PropTypes.string,\n    visible: _react.PropTypes.bool,\n    hiddenClassName: _react.PropTypes.string\n  },\n  shouldComponentUpdate: function shouldComponentUpdate(nextProps) {\n    return nextProps.hiddenClassName || nextProps.visible;\n  },\n  render: function render() {\n    var _props = this.props;\n    var hiddenClassName = _props.hiddenClassName;\n    var visible = _props.visible;\n\n    var props = _objectWithoutProperties(_props, ['hiddenClassName', 'visible']);\n\n    if (hiddenClassName || _react2[\"default\"].Children.count(props.children) > 1) {\n      if (!visible && hiddenClassName) {\n        props.className += ' ' + hiddenClassName;\n      }\n      return _react2[\"default\"].createElement('div', props);\n    }\n\n    return _react2[\"default\"].Children.only(props.children);\n  }\n});\n\nexports[\"default\"] = LazyRenderBox;\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rc-trigger/lib/LazyRenderBox.js\n ** module id = 210\n ** module chunks = 4\n **/","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _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; };\n\nexports.getAlignFromPlacement = getAlignFromPlacement;\nexports.getPopupClassNameFromAlign = getPopupClassNameFromAlign;\nfunction isPointsEq(a1, a2) {\n  return a1[0] === a2[0] && a1[1] === a2[1];\n}\n\nfunction getAlignFromPlacement(builtinPlacements, placementStr, align) {\n  var baseAlign = builtinPlacements[placementStr] || {};\n  return _extends({}, baseAlign, align);\n}\n\nfunction getPopupClassNameFromAlign(builtinPlacements, prefixCls, align) {\n  var points = align.points;\n  for (var placement in builtinPlacements) {\n    if (builtinPlacements.hasOwnProperty(placement)) {\n      if (isPointsEq(builtinPlacements[placement].points, points)) {\n        return prefixCls + '-placement-' + placement;\n      }\n    }\n  }\n  return '';\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rc-trigger/lib/utils.js\n ** module id = 211\n ** module chunks = 4\n **/","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _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; };\n\nexports[\"default\"] = getContainerRenderMixin;\n\nvar _reactDom = require('react-dom');\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction defaultGetContainer() {\n  var container = document.createElement('div');\n  document.body.appendChild(container);\n  return container;\n}\n\nfunction getContainerRenderMixin(config) {\n  var _config$autoMount = config.autoMount;\n  var autoMount = _config$autoMount === undefined ? true : _config$autoMount;\n  var _config$autoDestroy = config.autoDestroy;\n  var autoDestroy = _config$autoDestroy === undefined ? true : _config$autoDestroy;\n  var isVisible = config.isVisible;\n  var getComponent = config.getComponent;\n  var _config$getContainer = config.getContainer;\n  var getContainer = _config$getContainer === undefined ? defaultGetContainer : _config$getContainer;\n\n\n  var mixin = void 0;\n\n  function _renderComponent(instance, componentArg, ready) {\n    if (!isVisible || instance._component || isVisible(instance)) {\n      if (!instance._container) {\n        instance._container = getContainer(instance);\n      }\n      _reactDom2[\"default\"].unstable_renderSubtreeIntoContainer(instance, getComponent(instance, componentArg), instance._container, function callback() {\n        instance._component = this;\n        if (ready) {\n          ready.call(this);\n        }\n      });\n    }\n  }\n\n  if (autoMount) {\n    mixin = _extends({}, mixin, {\n      componentDidMount: function componentDidMount() {\n        _renderComponent(this);\n      },\n      componentDidUpdate: function componentDidUpdate() {\n        _renderComponent(this);\n      }\n    });\n  }\n\n  if (!autoMount || !autoDestroy) {\n    mixin = _extends({}, mixin, {\n      renderComponent: function renderComponent(componentArg, ready) {\n        _renderComponent(this, componentArg, ready);\n      }\n    });\n  }\n\n  function _removeContainer(instance) {\n    if (instance._container) {\n      var container = instance._container;\n      _reactDom2[\"default\"].unmountComponentAtNode(container);\n      container.parentNode.removeChild(container);\n      instance._container = null;\n    }\n  }\n\n  if (autoDestroy) {\n    mixin = _extends({}, mixin, {\n      componentWillUnmount: function componentWillUnmount() {\n        _removeContainer(this);\n      }\n    });\n  } else {\n    mixin = _extends({}, mixin, {\n      removeContainer: function removeContainer() {\n        _removeContainer(this);\n      }\n    });\n  }\n\n  return mixin;\n}\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rc-util/lib/getContainerRenderMixin.js\n ** module id = 212\n ** module chunks = 4\n **/","import React, { PropTypes } from 'react';\nimport Header from './Header';\nimport Combobox from './Combobox';\nimport moment from 'moment';\n\nfunction noop() {\n}\n\nfunction generateOptions(length, disabledOptions, hideDisabledOptions) {\n  const arr = [];\n  for (let value = 0; value < length; value++) {\n    if (!disabledOptions || disabledOptions.indexOf(value) < 0 || !hideDisabledOptions) {\n      arr.push(value);\n    }\n  }\n  return arr;\n}\n\nconst Panel = React.createClass({\n  propTypes: {\n    clearText: PropTypes.string,\n    prefixCls: PropTypes.string,\n    defaultOpenValue: PropTypes.object,\n    value: PropTypes.object,\n    placeholder: PropTypes.string,\n    format: PropTypes.string,\n    disabledHours: PropTypes.func,\n    disabledMinutes: PropTypes.func,\n    disabledSeconds: PropTypes.func,\n    hideDisabledOptions: PropTypes.bool,\n    onChange: PropTypes.func,\n    onEsc: PropTypes.func,\n    allowEmpty: PropTypes.bool,\n    showHour: PropTypes.bool,\n    showSecond: PropTypes.bool,\n    onClear: PropTypes.func,\n  },\n\n  getDefaultProps() {\n    return {\n      prefixCls: 'rc-time-picker-panel',\n      onChange: noop,\n      onClear: noop,\n      defaultOpenValue: moment(),\n    };\n  },\n\n  getInitialState() {\n    return {\n      value: this.props.value,\n      selectionRange: [],\n    };\n  },\n\n  componentWillReceiveProps(nextProps) {\n    const value = nextProps.value;\n    if (value) {\n      this.setState({\n        value,\n      });\n    }\n  },\n\n  onChange(newValue) {\n    this.setState({ value: newValue });\n    this.props.onChange(newValue);\n  },\n\n  onClear() {\n    this.props.onClear();\n  },\n\n  onCurrentSelectPanelChange(currentSelectPanel) {\n    this.setState({ currentSelectPanel });\n  },\n\n  render() {\n    const {\n      prefixCls, placeholder, disabledHours, disabledMinutes,\n      disabledSeconds, hideDisabledOptions, allowEmpty, showHour, showSecond,\n      format, defaultOpenValue, clearText, onEsc,\n    } = this.props;\n    const {\n      value, currentSelectPanel,\n    } = this.state;\n    const disabledHourOptions = disabledHours();\n    const disabledMinuteOptions = disabledMinutes(value ? value.hour() : null);\n    const disabledSecondOptions = disabledSeconds(value ? value.hour() : null,\n      value ? value.minute() : null);\n    const hourOptions = generateOptions(24, disabledHourOptions, hideDisabledOptions);\n    const minuteOptions = generateOptions(60, disabledMinuteOptions, hideDisabledOptions);\n    const secondOptions = generateOptions(60, disabledSecondOptions, hideDisabledOptions);\n\n    return (\n      <div className={`${prefixCls}-inner`}>\n        <Header\n          clearText={clearText}\n          prefixCls={prefixCls}\n          defaultOpenValue={defaultOpenValue}\n          value={value}\n          currentSelectPanel={currentSelectPanel}\n          onEsc={onEsc}\n          format={format}\n          placeholder={placeholder}\n          hourOptions={hourOptions}\n          minuteOptions={minuteOptions}\n          secondOptions={secondOptions}\n          disabledHours={disabledHours}\n          disabledMinutes={disabledMinutes}\n          disabledSeconds={disabledSeconds}\n          onChange={this.onChange}\n          onClear={this.onClear}\n          allowEmpty={allowEmpty}\n        />\n        <Combobox\n          prefixCls={prefixCls}\n          value={value}\n          defaultOpenValue={defaultOpenValue}\n          format={format}\n          onChange={this.onChange}\n          showHour={showHour}\n          showSecond={showSecond}\n          hourOptions={hourOptions}\n          minuteOptions={minuteOptions}\n          secondOptions={secondOptions}\n          disabledHours={disabledHours}\n          disabledMinutes={disabledMinutes}\n          disabledSeconds={disabledSeconds}\n          onCurrentSelectPanelChange={this.onCurrentSelectPanelChange}\n        />\n      </div>\n    );\n  },\n});\n\nexport default Panel;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/Panel.jsx\n **/","import React, { PropTypes } from 'react';\nimport moment from 'moment';\n\nconst Header = React.createClass({\n  propTypes: {\n    format: PropTypes.string,\n    prefixCls: PropTypes.string,\n    disabledDate: PropTypes.func,\n    placeholder: PropTypes.string,\n    clearText: PropTypes.string,\n    value: PropTypes.object,\n    hourOptions: PropTypes.array,\n    minuteOptions: PropTypes.array,\n    secondOptions: PropTypes.array,\n    disabledHours: PropTypes.func,\n    disabledMinutes: PropTypes.func,\n    disabledSeconds: PropTypes.func,\n    onChange: PropTypes.func,\n    onClear: PropTypes.func,\n    onEsc: PropTypes.func,\n    allowEmpty: PropTypes.bool,\n    defaultOpenValue: PropTypes.object,\n    currentSelectPanel: PropTypes.string,\n  },\n\n  getInitialState() {\n    const { value, format } = this.props;\n    return {\n      str: value && value.format(format) || '',\n      invalid: false,\n    };\n  },\n\n  componentWillReceiveProps(nextProps) {\n    const { value, format } = nextProps;\n    this.setState({\n      str: value && value.format(format) || '',\n      invalid: false,\n    });\n  },\n\n  onInputChange(event) {\n    const str = event.target.value;\n    this.setState({\n      str,\n    });\n    const {\n      format, hourOptions, minuteOptions, secondOptions,\n      disabledHours, disabledMinutes,\n      disabledSeconds, onChange, allowEmpty,\n    } = this.props;\n\n    if (str) {\n      const originalValue = this.props.value;\n      const value = this.getProtoValue().clone();\n      const parsed = moment(str, format, true);\n      if (!parsed.isValid()) {\n        this.setState({\n          invalid: true,\n        });\n        return;\n      }\n      value.hour(parsed.hour()).minute(parsed.minute()).second(parsed.second());\n\n      // if time value not allowed, response warning.\n      if (\n        hourOptions.indexOf(value.hour()) < 0 ||\n        minuteOptions.indexOf(value.minute()) < 0 ||\n        secondOptions.indexOf(value.second()) < 0\n      ) {\n        this.setState({\n          invalid: true,\n        });\n        return;\n      }\n\n      // if time value is disabled, response warning.\n      const disabledHourOptions = disabledHours();\n      const disabledMinuteOptions = disabledMinutes(value.hour());\n      const disabledSecondOptions = disabledSeconds(value.hour(), value.minute());\n      if (\n        (disabledHourOptions && disabledHourOptions.indexOf(value.hour()) >= 0) ||\n        (disabledMinuteOptions && disabledMinuteOptions.indexOf(value.minute()) >= 0) ||\n        (disabledSecondOptions && disabledSecondOptions.indexOf(value.second()) >= 0)\n      ) {\n        this.setState({\n          invalid: true,\n        });\n        return;\n      }\n\n      if (originalValue) {\n        if (\n          originalValue.hour() !== value.hour() ||\n          originalValue.minute() !== value.minute() ||\n          originalValue.second() !== value.second()\n        ) {\n          // keep other fields for rc-calendar\n          const changedValue = originalValue.clone();\n          changedValue.hour(value.hour());\n          changedValue.minute(value.minute());\n          changedValue.second(value.second());\n          onChange(changedValue);\n        }\n      } else if (originalValue !== value) {\n        onChange(value);\n      }\n    } else if (allowEmpty) {\n      onChange(null);\n    } else {\n      this.setState({\n        invalid: true,\n      });\n      return;\n    }\n\n    this.setState({\n      invalid: false,\n    });\n  },\n\n  onKeyDown(e) {\n    if (e.keyCode === 27) {\n      this.props.onEsc();\n    }\n  },\n\n  onClear() {\n    this.setState({ str: '' });\n    this.props.onClear();\n  },\n\n  getClearButton() {\n    const { prefixCls, allowEmpty } = this.props;\n    if (!allowEmpty) {\n      return null;\n    }\n    return (<a\n      className={`${prefixCls}-clear-btn`}\n      role=\"button\"\n      title={this.props.clearText}\n      onMouseDown={this.onClear}\n    />);\n  },\n\n  getProtoValue() {\n    return this.props.value || this.props.defaultOpenValue;\n  },\n\n  getInput() {\n    const { prefixCls, placeholder } = this.props;\n    const { invalid, str } = this.state;\n    const invalidClass = invalid ? `${prefixCls}-input-invalid` : '';\n    return (<input\n      className={`${prefixCls}-input  ${invalidClass}`}\n      ref=\"input\"\n      onKeyDown={this.onKeyDown}\n      value={str}\n      placeholder={placeholder}\n      onChange={this.onInputChange}\n    />);\n  },\n\n  render() {\n    const { prefixCls } = this.props;\n    return (\n      <div className={`${prefixCls}-input-wrap`}>\n        {this.getInput()}\n        {this.getClearButton()}\n      </div>\n    );\n  },\n});\n\nexport default Header;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/Header.jsx\n **/","import React, { PropTypes } from 'react';\nimport Select from './Select';\n\nconst formatOption = (option, disabledOptions) => {\n  let value = `${option}`;\n  if (option < 10) {\n    value = `0${option}`;\n  }\n\n  let disabled = false;\n  if (disabledOptions && disabledOptions.indexOf(option) >= 0) {\n    disabled = true;\n  }\n\n  return {\n    value,\n    disabled,\n  };\n};\n\nconst Combobox = React.createClass({\n  propTypes: {\n    format: PropTypes.string,\n    defaultOpenValue: PropTypes.object,\n    prefixCls: PropTypes.string,\n    value: PropTypes.object,\n    onChange: PropTypes.func,\n    showHour: PropTypes.bool,\n    showSecond: PropTypes.bool,\n    hourOptions: PropTypes.array,\n    minuteOptions: PropTypes.array,\n    secondOptions: PropTypes.array,\n    disabledHours: PropTypes.func,\n    disabledMinutes: PropTypes.func,\n    disabledSeconds: PropTypes.func,\n    onCurrentSelectPanelChange: PropTypes.func,\n  },\n\n  onItemChange(type, itemValue) {\n    const { onChange, defaultOpenValue } = this.props;\n    const value = (this.props.value || defaultOpenValue).clone();\n    if (type === 'hour') {\n      value.hour(itemValue);\n    } else if (type === 'minute') {\n      value.minute(itemValue);\n    } else {\n      value.second(itemValue);\n    }\n    onChange(value);\n  },\n\n  onEnterSelectPanel(range) {\n    this.props.onCurrentSelectPanelChange(range);\n  },\n\n  getHourSelect(hour) {\n    const { prefixCls, hourOptions, disabledHours, showHour } = this.props;\n    if (!showHour) {\n      return null;\n    }\n    const disabledOptions = disabledHours();\n\n    return (\n      <Select\n        prefixCls={prefixCls}\n        options={hourOptions.map(option => formatOption(option, disabledOptions))}\n        selectedIndex={hourOptions.indexOf(hour)}\n        type=\"hour\"\n        onSelect={this.onItemChange}\n        onMouseEnter={this.onEnterSelectPanel.bind(this, 'hour')}\n      />\n    );\n  },\n\n  getMinuteSelect(minute) {\n    const { prefixCls, minuteOptions, disabledMinutes, defaultOpenValue } = this.props;\n    const value = this.props.value || defaultOpenValue;\n    const disabledOptions = disabledMinutes(value.hour());\n\n    return (\n      <Select\n        prefixCls={prefixCls}\n        options={minuteOptions.map(option => formatOption(option, disabledOptions))}\n        selectedIndex={minuteOptions.indexOf(minute)}\n        type=\"minute\"\n        onSelect={this.onItemChange}\n        onMouseEnter={this.onEnterSelectPanel.bind(this, 'minute')}\n      />\n    );\n  },\n\n  getSecondSelect(second) {\n    const { prefixCls, secondOptions, disabledSeconds, showSecond, defaultOpenValue } = this.props;\n    if (!showSecond) {\n      return null;\n    }\n    const value = this.props.value || defaultOpenValue;\n    const disabledOptions = disabledSeconds(value.hour(), value.minute());\n\n    return (\n      <Select\n        prefixCls={prefixCls}\n        options={secondOptions.map(option => formatOption(option, disabledOptions))}\n        selectedIndex={secondOptions.indexOf(second)}\n        type=\"second\"\n        onSelect={this.onItemChange}\n        onMouseEnter={this.onEnterSelectPanel.bind(this, 'second')}\n      />\n    );\n  },\n\n  render() {\n    const { prefixCls, defaultOpenValue } = this.props;\n    const value = this.props.value || defaultOpenValue;\n    return (\n      <div className={`${prefixCls}-combobox`}>\n        {this.getHourSelect(value.hour())}\n        {this.getMinuteSelect(value.minute())}\n        {this.getSecondSelect(value.second())}\n      </div>\n    );\n  },\n});\n\nexport default Combobox;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/Combobox.jsx\n **/","import React, { PropTypes } from 'react';\nimport ReactDom from 'react-dom';\nimport classnames from 'classnames';\n\nconst scrollTo = (element, to, duration) => {\n  const requestAnimationFrame = window.requestAnimationFrame ||\n    function requestAnimationFrameTimeout() {\n      return setTimeout(arguments[0], 10);\n    };\n  // jump to target if duration zero\n  if (duration <= 0) {\n    element.scrollTop = to;\n    return;\n  }\n  const difference = to - element.scrollTop;\n  const perTick = difference / duration * 10;\n\n  requestAnimationFrame(() => {\n    element.scrollTop = element.scrollTop + perTick;\n    if (element.scrollTop === to) return;\n    scrollTo(element, to, duration - 10);\n  });\n};\n\nconst Select = React.createClass({\n  propTypes: {\n    prefixCls: PropTypes.string,\n    options: PropTypes.array,\n    selectedIndex: PropTypes.number,\n    type: PropTypes.string,\n    onSelect: PropTypes.func,\n    onMouseEnter: PropTypes.func,\n  },\n\n  componentDidMount() {\n    // jump to selected option\n    this.scrollToSelected(0);\n  },\n\n  componentDidUpdate(prevProps) {\n    // smooth scroll to selected option\n    if (prevProps.selectedIndex !== this.props.selectedIndex) {\n      this.scrollToSelected(120);\n    }\n  },\n\n  onSelect(value) {\n    const { onSelect, type } = this.props;\n    onSelect(type, value);\n  },\n\n  getOptions() {\n    const { options, selectedIndex, prefixCls } = this.props;\n    return options.map((item, index) => {\n      const cls = classnames({\n        [`${prefixCls}-select-option-selected`]: selectedIndex === index,\n        [`${prefixCls}-select-option-disabled`]: item.disabled,\n      });\n      let onclick = null;\n      if (!item.disabled) {\n        onclick = this.onSelect.bind(this, +item.value);\n      }\n      return (<li\n        className={cls}\n        key={index}\n        onClick={onclick}\n        disabled={item.disabled}\n      >\n        {item.value}\n      </li>);\n    });\n  },\n\n  scrollToSelected(duration) {\n    // move to selected item\n    const select = ReactDom.findDOMNode(this);\n    const list = ReactDom.findDOMNode(this.refs.list);\n    let index = this.props.selectedIndex;\n    if (index < 0) {\n      index = 0;\n    }\n    const topOption = list.children[index];\n    const to = topOption.offsetTop;\n    scrollTo(select, to, duration);\n  },\n\n  render() {\n    if (this.props.options.length === 0) {\n      return null;\n    }\n\n    const { prefixCls } = this.props;\n\n    return (\n      <div\n        className={`${prefixCls}-select`}\n        onMouseEnter={this.props.onMouseEnter}\n      >\n        <ul ref=\"list\">{this.getOptions()}</ul>\n      </div>\n    );\n  },\n});\n\nexport default Select;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/Select.jsx\n **/","\"use strict\";\n\nexports.__esModule = true;\n\nvar _defineProperty = require(\"../core-js/object/define-property\");\n\nvar _defineProperty2 = _interopRequireDefault(_defineProperty);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function (obj, key, value) {\n  if (key in obj) {\n    (0, _defineProperty2.default)(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/babel-runtime/helpers/defineProperty.js\n ** module id = 217\n ** module chunks = 4\n **/","module.exports = { \"default\": require(\"core-js/library/fn/object/define-property\"), __esModule: true };\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/babel-runtime/core-js/object/define-property.js\n ** module id = 218\n ** module chunks = 4\n **/","require('../../modules/es6.object.define-property');\nvar $Object = require('../../modules/_core').Object;\nmodule.exports = function defineProperty(it, key, desc){\n  return $Object.defineProperty(it, key, desc);\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/fn/object/define-property.js\n ** module id = 219\n ** module chunks = 4\n **/","var $export = require('./_export');\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', {defineProperty: require('./_object-dp').f});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/es6.object.define-property.js\n ** module id = 220\n ** module chunks = 4\n **/","var global    = require('./_global')\n  , core      = require('./_core')\n  , ctx       = require('./_ctx')\n  , hide      = require('./_hide')\n  , PROTOTYPE = 'prototype';\n\nvar $export = function(type, name, source){\n  var IS_FORCED = type & $export.F\n    , IS_GLOBAL = type & $export.G\n    , IS_STATIC = type & $export.S\n    , IS_PROTO  = type & $export.P\n    , IS_BIND   = type & $export.B\n    , IS_WRAP   = type & $export.W\n    , exports   = IS_GLOBAL ? core : core[name] || (core[name] = {})\n    , expProto  = exports[PROTOTYPE]\n    , target    = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE]\n    , key, own, out;\n  if(IS_GLOBAL)source = name;\n  for(key in source){\n    // contains in native\n    own = !IS_FORCED && target && target[key] !== undefined;\n    if(own && key in exports)continue;\n    // export native or passed\n    out = own ? target[key] : source[key];\n    // prevent global pollution for namespaces\n    exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n    // bind timers to global for call from export context\n    : IS_BIND && own ? ctx(out, global)\n    // wrap global constructors for prevent change them in library\n    : IS_WRAP && target[key] == out ? (function(C){\n      var F = function(a, b, c){\n        if(this instanceof C){\n          switch(arguments.length){\n            case 0: return new C;\n            case 1: return new C(a);\n            case 2: return new C(a, b);\n          } return new C(a, b, c);\n        } return C.apply(this, arguments);\n      };\n      F[PROTOTYPE] = C[PROTOTYPE];\n      return F;\n    // make static versions for prototype methods\n    })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n    // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n    if(IS_PROTO){\n      (exports.virtual || (exports.virtual = {}))[key] = out;\n      // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n      if(type & $export.R && expProto && !expProto[key])hide(expProto, key, out);\n    }\n  }\n};\n// type bitmap\n$export.F = 1;   // forced\n$export.G = 2;   // global\n$export.S = 4;   // static\n$export.P = 8;   // proto\n$export.B = 16;  // bind\n$export.W = 32;  // wrap\n$export.U = 64;  // safe\n$export.R = 128; // real proto method for `library` \nmodule.exports = $export;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_export.js\n ** module id = 221\n ** module chunks = 4\n **/","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n  ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')();\nif(typeof __g == 'number')__g = global; // eslint-disable-line no-undef\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_global.js\n ** module id = 222\n ** module chunks = 4\n **/","var core = module.exports = {version: '2.4.0'};\nif(typeof __e == 'number')__e = core; // eslint-disable-line no-undef\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_core.js\n ** module id = 223\n ** module chunks = 4\n **/","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function(fn, that, length){\n  aFunction(fn);\n  if(that === undefined)return fn;\n  switch(length){\n    case 1: return function(a){\n      return fn.call(that, a);\n    };\n    case 2: return function(a, b){\n      return fn.call(that, a, b);\n    };\n    case 3: return function(a, b, c){\n      return fn.call(that, a, b, c);\n    };\n  }\n  return function(/* ...args */){\n    return fn.apply(that, arguments);\n  };\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_ctx.js\n ** module id = 224\n ** module chunks = 4\n **/","module.exports = function(it){\n  if(typeof it != 'function')throw TypeError(it + ' is not a function!');\n  return it;\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_a-function.js\n ** module id = 225\n ** module chunks = 4\n **/","var dP         = require('./_object-dp')\n  , createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function(object, key, value){\n  return dP.f(object, key, createDesc(1, value));\n} : function(object, key, value){\n  object[key] = value;\n  return object;\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_hide.js\n ** module id = 226\n ** module chunks = 4\n **/","var anObject       = require('./_an-object')\n  , IE8_DOM_DEFINE = require('./_ie8-dom-define')\n  , toPrimitive    = require('./_to-primitive')\n  , dP             = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes){\n  anObject(O);\n  P = toPrimitive(P, true);\n  anObject(Attributes);\n  if(IE8_DOM_DEFINE)try {\n    return dP(O, P, Attributes);\n  } catch(e){ /* empty */ }\n  if('get' in Attributes || 'set' in Attributes)throw TypeError('Accessors not supported!');\n  if('value' in Attributes)O[P] = Attributes.value;\n  return O;\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_object-dp.js\n ** module id = 227\n ** module chunks = 4\n **/","var isObject = require('./_is-object');\nmodule.exports = function(it){\n  if(!isObject(it))throw TypeError(it + ' is not an object!');\n  return it;\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_an-object.js\n ** module id = 228\n ** module chunks = 4\n **/","module.exports = function(it){\n  return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_is-object.js\n ** module id = 229\n ** module chunks = 4\n **/","module.exports = !require('./_descriptors') && !require('./_fails')(function(){\n  return Object.defineProperty(require('./_dom-create')('div'), 'a', {get: function(){ return 7; }}).a != 7;\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_ie8-dom-define.js\n ** module id = 230\n ** module chunks = 4\n **/","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function(){\n  return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7;\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_descriptors.js\n ** module id = 231\n ** module chunks = 4\n **/","module.exports = function(exec){\n  try {\n    return !!exec();\n  } catch(e){\n    return true;\n  }\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_fails.js\n ** module id = 232\n ** module chunks = 4\n **/","var isObject = require('./_is-object')\n  , document = require('./_global').document\n  // in old IE typeof document.createElement is 'object'\n  , is = isObject(document) && isObject(document.createElement);\nmodule.exports = function(it){\n  return is ? document.createElement(it) : {};\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_dom-create.js\n ** module id = 233\n ** module chunks = 4\n **/","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function(it, S){\n  if(!isObject(it))return it;\n  var fn, val;\n  if(S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;\n  if(typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it)))return val;\n  if(!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;\n  throw TypeError(\"Can't convert object to primitive value\");\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_to-primitive.js\n ** module id = 234\n ** module chunks = 4\n **/","module.exports = function(bitmap, value){\n  return {\n    enumerable  : !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable    : !(bitmap & 4),\n    value       : value\n  };\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_property-desc.js\n ** module id = 235\n ** module chunks = 4\n **/","/*!\n  Copyright (c) 2016 Jed Watson.\n  Licensed under the MIT License (MIT), see\n  http://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = [];\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses.push(arg);\n\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\tclasses.push(classNames.apply(null, arg));\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tfor (var key in arg) {\n\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.join(' ');\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/classnames/index.js\n ** module id = 236\n ** module chunks = 4\n **/","const autoAdjustOverflow = {\n  adjustX: 1,\n  adjustY: 1,\n};\n\nconst targetOffset = [0, 0];\n\nconst placements = {\n  bottomLeft: {\n    points: ['tl', 'tl'],\n    overflow: autoAdjustOverflow,\n    offset: [0, -3],\n    targetOffset,\n  },\n  bottomRight: {\n    points: ['tr', 'tr'],\n    overflow: autoAdjustOverflow,\n    offset: [0, -3],\n    targetOffset,\n  },\n  topRight: {\n    points: ['br', 'br'],\n    overflow: autoAdjustOverflow,\n    offset: [0, 3],\n    targetOffset,\n  },\n  topLeft: {\n    points: ['bl', 'bl'],\n    overflow: autoAdjustOverflow,\n    offset: [0, 3],\n    targetOffset,\n  },\n};\n\nexport default placements;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/placements.js\n **/"],"sourceRoot":""}
\ No newline at end of file
index 6238c54b4f9c5b5e3cf80001d64dc46bd4fbee3b..8fa693edf95573143b56bc14aacc10ccec7e987c 100644 (file)
@@ -2,12 +2,12 @@
 <html>
 
 <head>
-  <title>disabled.js - example - rc-time-picker@1.1.6</title>
+  <title>disabled.js - example - rc-time-picker@2.0.0</title>
   <meta name="viewport"
         content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no">
   <meta charset="utf-8"/>
   <meta http-equiv="X-UA-Compatible" content="IE=edge">
-  <link href="//cdnjs.cloudflare.com/ajax/libs/normalize/3.0.3/normalize.css" rel="stylesheet"/>
+  <link href="https://a.alipayobjects.com/normalize.css/3.0.1/normalize.css" rel="stylesheet"/>
   <style>
     .highlight pre {
       padding: .8em 1em;
@@ -251,41 +251,36 @@ Monokai Sublime style. Derived from Monokai by noformnocontent http://nn.mit-lic
   <!--[if lt IE 9]>
   <script src="https://a.alipayobjects.com/??es5-shim/4.0.5/es5-shim.js,es5-shim/4.0.5/es5-sham.js,html5shiv/3.7.2/src/html5shiv.js"></script>
   <![endif]-->
+  
   <link rel="stylesheet" href="common.css" />
 </head>
 
 <body>
-<div class="container">
-  <div class="header">
-    <h1>rc-time-picker@1.1.6</h1>
+  <div class="container">
+    <div class="header">
+      <h1>rc-time-picker@2.0.0</h1>
 
-    <p>React TimePicker</p>
-  </div>
-  <div class="example" id="__react-content"></div>
-  <script src="common.js?nowrap"></script>
-  <script src="disabled.js?nowrap"></script>
-  <div class="highlight"><pre><code language="js"><span class="hljs-comment">/* eslint no-console:0 */</span>
+      <p>React TimePicker</p>
+    </div>
+    <div class="example" id="__react-content"></div>
+
+    <div class="highlight"><pre><code language="js"><span class="hljs-comment">/* eslint no-console:0 */</span>
 
-import <span class="hljs-string">'rc-time-picker/assets/index.css'</span>;
+<span class="hljs-keyword">import</span> <span class="hljs-string">'rc-time-picker/assets/index.css'</span>;
 
-import React from <span class="hljs-string">'react'</span>;
-import ReactDom from <span class="hljs-string">'react-dom'</span>;
+<span class="hljs-keyword">import</span> React <span class="hljs-keyword">from</span> <span class="hljs-string">'react'</span>;
+<span class="hljs-keyword">import</span> ReactDom <span class="hljs-keyword">from</span> <span class="hljs-string">'react-dom'</span>;
 
-import GregorianCalendar from <span class="hljs-string">'gregorian-calendar'</span>;
-import DateTimeFormat from <span class="hljs-string">'gregorian-calendar-format'</span>;
+<span class="hljs-keyword">import</span> moment <span class="hljs-keyword">from</span> <span class="hljs-string">'moment'</span>;
 
-import TimePicker from <span class="hljs-string">'rc-time-picker'</span>;
-import TimePickerLocale from <span class="hljs-string">'rc-time-picker/lib/locale/zh_CN'</span>;
+<span class="hljs-keyword">import</span> TimePicker <span class="hljs-keyword">from</span> <span class="hljs-string">'rc-time-picker'</span>;
 
 <span class="hljs-keyword">const</span> showSecond = <span class="hljs-literal">true</span>;
 <span class="hljs-keyword">const</span> str = showSecond ? <span class="hljs-string">'HH:mm:ss'</span> : <span class="hljs-string">'HH:mm'</span>;
 
-<span class="hljs-keyword">const</span> formatter = <span class="hljs-keyword">new</span> DateTimeFormat(str);
+<span class="hljs-keyword">const</span> now = moment().hour(<span class="hljs-number">14</span>).minute(<span class="hljs-number">30</span>);
 
-<span class="hljs-keyword">const</span> now = <span class="hljs-keyword">new</span> GregorianCalendar(TimePickerLocale.calendar);
-now.setTime(<span class="hljs-built_in">Date</span>.now());
-
-<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">generateOptions</span><span class="hljs-params">(length, excludedOptions)</span> </span>{
+<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">generateOptions</span>(<span class="hljs-params">length, excludedOptions</span>) </span>{
   <span class="hljs-keyword">const</span> arr = [];
   <span class="hljs-keyword">for</span> (<span class="hljs-keyword">let</span> value = <span class="hljs-number">0</span>; value &lt; length; value++) {
     <span class="hljs-keyword">if</span> (excludedOptions.indexOf(value) &lt; <span class="hljs-number">0</span>) {
@@ -295,15 +290,15 @@ now.setTime(<span class="hljs-built_in">Date</span>.now());
   <span class="hljs-keyword">return</span> arr;
 }
 
-<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">onChange</span><span class="hljs-params">(value)</span> </span>{
-  <span class="hljs-built_in">console</span>.log(value &amp;&amp; formatter.format(value));
+<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">onChange</span>(<span class="hljs-params">value</span>) </span>{
+  <span class="hljs-built_in">console</span>.log(value &amp;&amp; value.format(str));
 }
 
-<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">disabledHours</span><span class="hljs-params">()</span> </span>{
+<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">disabledHours</span>(<span class="hljs-params"></span>) </span>{
   <span class="hljs-keyword">return</span> [<span class="hljs-number">0</span>, <span class="hljs-number">1</span>, <span class="hljs-number">2</span>, <span class="hljs-number">3</span>, <span class="hljs-number">4</span>, <span class="hljs-number">5</span>, <span class="hljs-number">6</span>, <span class="hljs-number">7</span>, <span class="hljs-number">8</span>, <span class="hljs-number">22</span>, <span class="hljs-number">23</span>];
 }
 
-<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">disabledMinutes</span><span class="hljs-params">(h)</span> </span>{
+<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">disabledMinutes</span>(<span class="hljs-params">h</span>) </span>{
   <span class="hljs-keyword">switch</span> (h) {
     <span class="hljs-keyword">case</span> <span class="hljs-number">9</span>:
       <span class="hljs-keyword">return</span> generateOptions(<span class="hljs-number">60</span>, [<span class="hljs-number">30</span>]);
@@ -314,29 +309,33 @@ now.setTime(<span class="hljs-built_in">Date</span>.now());
   }
 }
 
-<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">disabledSeconds</span><span class="hljs-params">(h, m)</span> </span>{
+<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">disabledSeconds</span>(<span class="hljs-params">h, m</span>) </span>{
   <span class="hljs-keyword">return</span> [h + m % <span class="hljs-number">60</span>];
 }
 
 ReactDom.render(
-  <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-title">TimePicker</span> <span class="hljs-attribute">formatter</span>=<span class="hljs-value">{formatter}</span> <span class="hljs-attribute">locale</span>=<span class="hljs-value">{TimePickerLocale}</span>
-              <span class="hljs-attribute">showSecond</span>=<span class="hljs-value">{showSecond}</span>
-              <span class="hljs-attribute">defaultValue</span>=<span class="hljs-value">{now}</span>
-              <span class="hljs-attribute">className</span>=<span class="hljs-value">"xxx"</span>
-              <span class="hljs-attribute">onChange</span>=<span class="hljs-value">{onChange}</span>
-              <span class="hljs-attribute">disabledHours</span>=<span class="hljs-value">{disabledHours}</span>
-              <span class="hljs-attribute">disabledMinutes</span>=<span class="hljs-value">{disabledMinutes}</span>
-              <span class="hljs-attribute">disabledSeconds</span>=<span class="hljs-value">{disabledSeconds}</span>/&gt;</span>,
+  <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-title">TimePicker</span>
+    <span class="hljs-attribute">showSecond</span>=<span class="hljs-value">{showSecond}</span>
+    <span class="hljs-attribute">defaultValue</span>=<span class="hljs-value">{now}</span>
+    <span class="hljs-attribute">className</span>=<span class="hljs-value">"xxx"</span>
+    <span class="hljs-attribute">onChange</span>=<span class="hljs-value">{onChange}</span>
+    <span class="hljs-attribute">disabledHours</span>=<span class="hljs-value">{disabledHours}</span>
+    <span class="hljs-attribute">disabledMinutes</span>=<span class="hljs-value">{disabledMinutes}</span>
+    <span class="hljs-attribute">disabledSeconds</span>=<span class="hljs-value">{disabledSeconds}</span>
+  /&gt;</span>,
   document.getElementById('__react-content')
 );
 </span></code></pre></div>
-</div>
-<a href="http://github.com/react-component/time-picker">
-  <img style="position: absolute; top: 0; right: 0; border: 0;"
-       src="https://camo.githubusercontent.com/38ef81f8aca64bb9a64448d0d70f1308ef5341ab/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f6461726b626c75655f3132313632312e706e67"
-       alt="Fork me on GitHub"
-       data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png">
-</a>
+  </div>
+  <a href="http://github.com/react-component/time-picker">
+    <img style="position: absolute; top: 0; right: 0; border: 0;"
+         src="https://camo.githubusercontent.com/38ef81f8aca64bb9a64448d0d70f1308ef5341ab/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f6461726b626c75655f3132313632312e706e67"
+         alt="Fork me on GitHub"
+         data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png">
+  </a>
+  
+  <script src="common.js?nowrap"></script>
+  <script src="disabled.js?nowrap"></script>
 </body>
 
 </html>
index d90e379f9e09bd4ab878b7414339836d74bdad1c..a4bf6aeb08b8ffcf3358ce47aab73a4d59d16698 100644 (file)
@@ -9,45 +9,33 @@ webpackJsonp([0],[
 /* 1 */
 /***/ function(module, exports, __webpack_require__) {
 
-       /* eslint no-console:0 */
-       
        'use strict';
        
-       function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
-       
        __webpack_require__(2);
        
        var _react = __webpack_require__(3);
        
        var _react2 = _interopRequireDefault(_react);
        
-       var _reactDom = __webpack_require__(160);
+       var _reactDom = __webpack_require__(37);
        
        var _reactDom2 = _interopRequireDefault(_reactDom);
        
-       var _gregorianCalendar = __webpack_require__(161);
-       
-       var _gregorianCalendar2 = _interopRequireDefault(_gregorianCalendar);
+       var _moment = __webpack_require__(177);
        
-       var _gregorianCalendarFormat = __webpack_require__(165);
+       var _moment2 = _interopRequireDefault(_moment);
        
-       var _gregorianCalendarFormat2 = _interopRequireDefault(_gregorianCalendarFormat);
-       
-       var _rcTimePicker = __webpack_require__(168);
+       var _rcTimePicker = __webpack_require__(178);
        
        var _rcTimePicker2 = _interopRequireDefault(_rcTimePicker);
        
-       var _rcTimePickerSrcLocaleZh_CN = __webpack_require__(227);
+       function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
        
-       var _rcTimePickerSrcLocaleZh_CN2 = _interopRequireDefault(_rcTimePickerSrcLocaleZh_CN);
+       var showSecond = true; /* eslint no-console:0 */
        
-       var showSecond = true;
        var str = showSecond ? 'HH:mm:ss' : 'HH:mm';
        
-       var formatter = new _gregorianCalendarFormat2['default'](str);
-       
-       var now = new _gregorianCalendar2['default'](_rcTimePickerSrcLocaleZh_CN2['default'].calendar);
-       now.setTime(Date.now());
+       var now = (0, _moment2.default)().hour(14).minute(30);
        
        function generateOptions(length, excludedOptions) {
          var arr = [];
@@ -60,7 +48,7 @@ webpackJsonp([0],[
        }
        
        function onChange(value) {
-         console.log(value && formatter.format(value));
+         console.log(value && value.format(str));
        }
        
        function disabledHours() {
@@ -82,14 +70,15 @@ webpackJsonp([0],[
          return [h + m % 60];
        }
        
-       _reactDom2['default'].render(_react2['default'].createElement(_rcTimePicker2['default'], { formatter: formatter, locale: _rcTimePickerSrcLocaleZh_CN2['default'],
+       _reactDom2.default.render(_react2.default.createElement(_rcTimePicker2.default, {
          showSecond: showSecond,
          defaultValue: now,
          className: 'xxx',
          onChange: onChange,
          disabledHours: disabledHours,
          disabledMinutes: disabledMinutes,
-         disabledSeconds: disabledSeconds }), document.getElementById('__react-content'));
+         disabledSeconds: disabledSeconds
+       }), document.getElementById('__react-content'));
 
 /***/ }
 ]);
index 3a4fd1869ca5a8c7fe6882490202b8531d4e505b..b4569ddb86abfdc2773f46796c9a4ab816440173 100644 (file)
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///./examples/disabled.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;qBAEO,CAAkC;;kCAEvB,CAAO;;;;qCACJ,GAAW;;;;8CAEF,GAAoB;;;;oDACvB,GAA2B;;;;yCAE/B,GAAgB;;;;uDACV,GAAiC;;;;AAE9D,KAAM,UAAU,GAAG,IAAI,CAAC;AACxB,KAAM,GAAG,GAAG,UAAU,GAAG,UAAU,GAAG,OAAO,CAAC;;AAE9C,KAAM,SAAS,GAAG,yCAAmB,GAAG,CAAC,CAAC;;AAE1C,KAAM,GAAG,GAAG,mCAAsB,wCAAiB,QAAQ,CAAC,CAAC;AAC7D,IAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;;AAExB,UAAS,eAAe,CAAC,MAAM,EAAE,eAAe,EAAE;AAChD,OAAM,GAAG,GAAG,EAAE,CAAC;AACf,QAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,EAAE,KAAK,EAAE,EAAE;AAC3C,SAAI,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;AACtC,UAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;MACjB;IACF;AACD,UAAO,GAAG,CAAC;EACZ;;AAED,UAAS,QAAQ,CAAC,KAAK,EAAE;AACvB,UAAO,CAAC,GAAG,CAAC,KAAK,IAAI,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;EAC/C;;AAED,UAAS,aAAa,GAAG;AACvB,UAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;EAC5C;;AAED,UAAS,eAAe,CAAC,CAAC,EAAE;AAC1B,WAAQ,CAAC;AACP,UAAK,CAAC;AACJ,cAAO,eAAe,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACnC,UAAK,EAAE;AACL,cAAO,eAAe,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAClC;AACE,cAAO,eAAe,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,IACvC;EACF;;AAED,UAAS,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE;AAC7B,UAAO,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;EACrB;;AAED,uBAAS,MAAM,CACb,8DAAY,SAAS,EAAE,SAAU,EAAC,MAAM,yCAAmB;AAC/C,aAAU,EAAE,UAAW;AACvB,eAAY,EAAE,GAAI;AAClB,YAAS,EAAC,KAAK;AACf,WAAQ,EAAE,QAAS;AACnB,gBAAa,EAAE,aAAc;AAC7B,kBAAe,EAAE,eAAgB;AACjC,kBAAe,EAAE,eAAgB,GAAE,EAC/C,QAAQ,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAC3C,C","file":"disabled.js","sourcesContent":["/* eslint no-console:0 */\n\nimport 'rc-time-picker/assets/index.less';\n\nimport React from 'react';\nimport ReactDom from 'react-dom';\n\nimport GregorianCalendar from 'gregorian-calendar';\nimport DateTimeFormat from 'gregorian-calendar-format';\n\nimport TimePicker from 'rc-time-picker';\nimport TimePickerLocale from 'rc-time-picker/src/locale/zh_CN';\n\nconst showSecond = true;\nconst str = showSecond ? 'HH:mm:ss' : 'HH:mm';\n\nconst formatter = new DateTimeFormat(str);\n\nconst now = new GregorianCalendar(TimePickerLocale.calendar);\nnow.setTime(Date.now());\n\nfunction generateOptions(length, excludedOptions) {\n  const arr = [];\n  for (let value = 0; value < length; value++) {\n    if (excludedOptions.indexOf(value) < 0) {\n      arr.push(value);\n    }\n  }\n  return arr;\n}\n\nfunction onChange(value) {\n  console.log(value && formatter.format(value));\n}\n\nfunction disabledHours() {\n  return [0, 1, 2, 3, 4, 5, 6, 7, 8, 22, 23];\n}\n\nfunction disabledMinutes(h) {\n  switch (h) {\n    case 9:\n      return generateOptions(60, [30]);\n    case 21:\n      return generateOptions(60, [0]);\n    default:\n      return generateOptions(60, [0, 30]);\n  }\n}\n\nfunction disabledSeconds(h, m) {\n  return [h + m % 60];\n}\n\nReactDom.render(\n  <TimePicker formatter={formatter} locale={TimePickerLocale}\n              showSecond={showSecond}\n              defaultValue={now}\n              className=\"xxx\"\n              onChange={onChange}\n              disabledHours={disabledHours}\n              disabledMinutes={disabledMinutes}\n              disabledSeconds={disabledSeconds}/>,\n  document.getElementById('__react-content')\n);\n\n\n\n/** WEBPACK FOOTER **\n ** ./examples/disabled.js\n **/"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"sources":["webpack:///./examples/disabled.js"],"names":[],"mappings":";;;;;;;;;;;;;AAEA;;AAEA;;;;AACA;;;;AAEA;;;;AAEA;;;;;;AAEA,KAAM,aAAa,IAAnB,C,CAXA;;AAYA,KAAM,MAAM,aAAa,UAAb,GAA0B,OAAtC;;AAEA,KAAM,MAAM,wBAAS,IAAT,CAAc,EAAd,EAAkB,MAAlB,CAAyB,EAAzB,CAAZ;;AAEA,UAAS,eAAT,CAAyB,MAAzB,EAAiC,eAAjC,EAAkD;AAChD,OAAM,MAAM,EAAZ;AACA,QAAK,IAAI,QAAQ,CAAjB,EAAoB,QAAQ,MAA5B,EAAoC,OAApC,EAA6C;AAC3C,SAAI,gBAAgB,OAAhB,CAAwB,KAAxB,IAAiC,CAArC,EAAwC;AACtC,WAAI,IAAJ,CAAS,KAAT;AACD;AACF;AACD,UAAO,GAAP;AACD;;AAED,UAAS,QAAT,CAAkB,KAAlB,EAAyB;AACvB,WAAQ,GAAR,CAAY,SAAS,MAAM,MAAN,CAAa,GAAb,CAArB;AACD;;AAED,UAAS,aAAT,GAAyB;AACvB,UAAO,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,CAAV,EAAa,CAAb,EAAgB,CAAhB,EAAmB,CAAnB,EAAsB,CAAtB,EAAyB,CAAzB,EAA4B,EAA5B,EAAgC,EAAhC,CAAP;AACD;;AAED,UAAS,eAAT,CAAyB,CAAzB,EAA4B;AAC1B,WAAQ,CAAR;AACE,UAAK,CAAL;AACE,cAAO,gBAAgB,EAAhB,EAAoB,CAAC,EAAD,CAApB,CAAP;AACF,UAAK,EAAL;AACE,cAAO,gBAAgB,EAAhB,EAAoB,CAAC,CAAD,CAApB,CAAP;AACF;AACE,cAAO,gBAAgB,EAAhB,EAAoB,CAAC,CAAD,EAAI,EAAJ,CAApB,CAAP;AANJ;AAQD;;AAED,UAAS,eAAT,CAAyB,CAAzB,EAA4B,CAA5B,EAA+B;AAC7B,UAAO,CAAC,IAAI,IAAI,EAAT,CAAP;AACD;;AAED,oBAAS,MAAT,CACE;AACE,eAAY,UADd;AAEE,iBAAc,GAFhB;AAGE,cAAU,KAHZ;AAIE,aAAU,QAJZ;AAKE,kBAAe,aALjB;AAME,oBAAiB,eANnB;AAOE,oBAAiB;AAPnB,GADF,EAUE,SAAS,cAAT,CAAwB,iBAAxB,CAVF,E","file":"disabled.js","sourcesContent":["/* eslint no-console:0 */\n\nimport 'rc-time-picker/assets/index.less';\n\nimport React from 'react';\nimport ReactDom from 'react-dom';\n\nimport moment from 'moment';\n\nimport TimePicker from 'rc-time-picker';\n\nconst showSecond = true;\nconst str = showSecond ? 'HH:mm:ss' : 'HH:mm';\n\nconst now = moment().hour(14).minute(30);\n\nfunction generateOptions(length, excludedOptions) {\n  const arr = [];\n  for (let value = 0; value < length; value++) {\n    if (excludedOptions.indexOf(value) < 0) {\n      arr.push(value);\n    }\n  }\n  return arr;\n}\n\nfunction onChange(value) {\n  console.log(value && value.format(str));\n}\n\nfunction disabledHours() {\n  return [0, 1, 2, 3, 4, 5, 6, 7, 8, 22, 23];\n}\n\nfunction disabledMinutes(h) {\n  switch (h) {\n    case 9:\n      return generateOptions(60, [30]);\n    case 21:\n      return generateOptions(60, [0]);\n    default:\n      return generateOptions(60, [0, 30]);\n  }\n}\n\nfunction disabledSeconds(h, m) {\n  return [h + m % 60];\n}\n\nReactDom.render(\n  <TimePicker\n    showSecond={showSecond}\n    defaultValue={now}\n    className=\"xxx\"\n    onChange={onChange}\n    disabledHours={disabledHours}\n    disabledMinutes={disabledMinutes}\n    disabledSeconds={disabledSeconds}\n  />,\n  document.getElementById('__react-content')\n);\n\n\n\n/** WEBPACK FOOTER **\n ** ./examples/disabled.js\n **/"],"sourceRoot":""}
\ No newline at end of file
index 3c1daadeaa380cfb0d16780dc4aca21c56d69870..02f16686b35157acf3c4d89f2bba8c470486891a 100644 (file)
@@ -2,12 +2,12 @@
 <html>
 
 <head>
-  <title>hidden.js - example - rc-time-picker@1.1.6</title>
+  <title>hidden.js - example - rc-time-picker@2.0.0</title>
   <meta name="viewport"
         content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no">
   <meta charset="utf-8"/>
   <meta http-equiv="X-UA-Compatible" content="IE=edge">
-  <link href="//cdnjs.cloudflare.com/ajax/libs/normalize/3.0.3/normalize.css" rel="stylesheet"/>
+  <link href="https://a.alipayobjects.com/normalize.css/3.0.1/normalize.css" rel="stylesheet"/>
   <style>
     .highlight pre {
       padding: .8em 1em;
@@ -251,63 +251,62 @@ Monokai Sublime style. Derived from Monokai by noformnocontent http://nn.mit-lic
   <!--[if lt IE 9]>
   <script src="https://a.alipayobjects.com/??es5-shim/4.0.5/es5-shim.js,es5-shim/4.0.5/es5-sham.js,html5shiv/3.7.2/src/html5shiv.js"></script>
   <![endif]-->
+  
   <link rel="stylesheet" href="common.css" />
 </head>
 
 <body>
-<div class="container">
-  <div class="header">
-    <h1>rc-time-picker@1.1.6</h1>
+  <div class="container">
+    <div class="header">
+      <h1>rc-time-picker@2.0.0</h1>
 
-    <p>React TimePicker</p>
-  </div>
-  <div class="example" id="__react-content"></div>
-  <script src="common.js?nowrap"></script>
-  <script src="hidden.js?nowrap"></script>
-  <div class="highlight"><pre><code language="js"><span class="hljs-comment">/* eslint no-console:0 */</span>
+      <p>React TimePicker</p>
+    </div>
+    <div class="example" id="__react-content"></div>
 
-import <span class="hljs-string">'rc-time-picker/assets/index.css'</span>;
+    <div class="highlight"><pre><code language="js"><span class="hljs-comment">/* eslint no-console:0 */</span>
 
-import React from <span class="hljs-string">'react'</span>;
-import ReactDom from <span class="hljs-string">'react-dom'</span>;
+<span class="hljs-keyword">import</span> <span class="hljs-string">'rc-time-picker/assets/index.css'</span>;
 
-import GregorianCalendar from <span class="hljs-string">'gregorian-calendar'</span>;
-import DateTimeFormat from <span class="hljs-string">'gregorian-calendar-format'</span>;
+<span class="hljs-keyword">import</span> React <span class="hljs-keyword">from</span> <span class="hljs-string">'react'</span>;
+<span class="hljs-keyword">import</span> ReactDom <span class="hljs-keyword">from</span> <span class="hljs-string">'react-dom'</span>;
 
-import TimePicker from <span class="hljs-string">'rc-time-picker'</span>;
-import TimePickerLocale from <span class="hljs-string">'rc-time-picker/lib/locale/zh_CN'</span>;
+<span class="hljs-keyword">import</span> moment <span class="hljs-keyword">from</span> <span class="hljs-string">'moment'</span>;
+
+<span class="hljs-keyword">import</span> TimePicker <span class="hljs-keyword">from</span> <span class="hljs-string">'rc-time-picker'</span>;
 
 <span class="hljs-keyword">const</span> showSecond = <span class="hljs-literal">true</span>;
 <span class="hljs-keyword">const</span> str = showSecond ? <span class="hljs-string">'HH:mm:ss'</span> : <span class="hljs-string">'HH:mm'</span>;
 
-<span class="hljs-keyword">const</span> formatter = <span class="hljs-keyword">new</span> DateTimeFormat(str);
-
-<span class="hljs-keyword">const</span> now = <span class="hljs-keyword">new</span> GregorianCalendar(TimePickerLocale.calendar);
-now.setTime(<span class="hljs-built_in">Date</span>.now());
-
-<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">onChange</span><span class="hljs-params">(value)</span> </span>{
-  <span class="hljs-built_in">console</span>.log(value &amp;&amp; formatter.format(value));
+<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">onChange</span>(<span class="hljs-params">value</span>) </span>{
+  <span class="hljs-built_in">console</span>.log(value &amp;&amp; value.format(str));
 }
 
 ReactDom.render(
-  <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-title">TimePicker</span> <span class="hljs-attribute">formatter</span>=<span class="hljs-value">{formatter}</span> <span class="hljs-attribute">locale</span>=<span class="hljs-value">{TimePickerLocale}</span>
-              <span class="hljs-attribute">showSecond</span>=<span class="hljs-value">{showSecond}</span>
-              <span class="hljs-attribute">defaultValue</span>=<span class="hljs-value">{now}</span>
-              <span class="hljs-attribute">className</span>=<span class="hljs-value">"xxx"</span>
-              <span class="hljs-attribute">onChange</span>=<span class="hljs-value">{onChange}</span>
-              <span class="hljs-attribute">disabledHours</span>=<span class="hljs-value">{()</span> =&gt;</span> [0, 1, 2, 3, 4, 5, 6, 7, 8, 22, 23]}
-              disabledMinutes={() =&gt; [0, 2, 4, 6, 8]}
-              hideDisabledOptions /&gt;,
+  <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-title">TimePicker</span>
+    <span class="hljs-attribute">format</span>=<span class="hljs-value">{str}</span>
+    <span class="hljs-attribute">showSecond</span>=<span class="hljs-value">{showSecond}</span>
+    // <span class="hljs-attribute">use</span> <span class="hljs-attribute">to</span> <span class="hljs-attribute">control</span> <span class="hljs-attribute">utfOffset</span>, <span class="hljs-attribute">locale</span>, <span class="hljs-attribute">default</span> <span class="hljs-attribute">open</span> <span class="hljs-attribute">value</span>
+    <span class="hljs-attribute">defaultOpenValue</span>=<span class="hljs-value">{moment()}</span>
+    <span class="hljs-attribute">className</span>=<span class="hljs-value">"xxx"</span>
+    <span class="hljs-attribute">onChange</span>=<span class="hljs-value">{onChange}</span>
+    <span class="hljs-attribute">disabledHours</span>=<span class="hljs-value">{()</span> =&gt;</span> [0, 1, 2, 3, 4, 5, 6, 7, 8, 22, 23]}
+    disabledMinutes={() =&gt; [0, 2, 4, 6, 8]}
+    hideDisabledOptions
+  /&gt;,
   document.getElementById('__react-content')
 );
 </span></code></pre></div>
-</div>
-<a href="http://github.com/react-component/time-picker">
-  <img style="position: absolute; top: 0; right: 0; border: 0;"
-       src="https://camo.githubusercontent.com/38ef81f8aca64bb9a64448d0d70f1308ef5341ab/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f6461726b626c75655f3132313632312e706e67"
-       alt="Fork me on GitHub"
-       data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png">
-</a>
+  </div>
+  <a href="http://github.com/react-component/time-picker">
+    <img style="position: absolute; top: 0; right: 0; border: 0;"
+         src="https://camo.githubusercontent.com/38ef81f8aca64bb9a64448d0d70f1308ef5341ab/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f6461726b626c75655f3132313632312e706e67"
+         alt="Fork me on GitHub"
+         data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png">
+  </a>
+  
+  <script src="common.js?nowrap"></script>
+  <script src="hidden.js?nowrap"></script>
 </body>
 
 </html>
index fc2180ed6eec708dfd7bf98970e4221a6ab4673c..cab464f76afb058e14ca75eb9fb2b8bee1156540 100644 (file)
@@ -3,70 +3,59 @@ webpackJsonp([1],{
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-       module.exports = __webpack_require__(230);
+       module.exports = __webpack_require__(238);
 
 
 /***/ },
 
-/***/ 230:
+/***/ 238:
 /***/ function(module, exports, __webpack_require__) {
 
-       /* eslint no-console:0 */
-       
        'use strict';
        
-       function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
-       
        __webpack_require__(2);
        
        var _react = __webpack_require__(3);
        
        var _react2 = _interopRequireDefault(_react);
        
-       var _reactDom = __webpack_require__(160);
+       var _reactDom = __webpack_require__(37);
        
        var _reactDom2 = _interopRequireDefault(_reactDom);
        
-       var _gregorianCalendar = __webpack_require__(161);
-       
-       var _gregorianCalendar2 = _interopRequireDefault(_gregorianCalendar);
+       var _moment = __webpack_require__(177);
        
-       var _gregorianCalendarFormat = __webpack_require__(165);
+       var _moment2 = _interopRequireDefault(_moment);
        
-       var _gregorianCalendarFormat2 = _interopRequireDefault(_gregorianCalendarFormat);
-       
-       var _rcTimePicker = __webpack_require__(168);
+       var _rcTimePicker = __webpack_require__(178);
        
        var _rcTimePicker2 = _interopRequireDefault(_rcTimePicker);
        
-       var _rcTimePickerSrcLocaleZh_CN = __webpack_require__(227);
+       function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
        
-       var _rcTimePickerSrcLocaleZh_CN2 = _interopRequireDefault(_rcTimePickerSrcLocaleZh_CN);
+       var showSecond = true; /* eslint no-console:0 */
        
-       var showSecond = true;
        var str = showSecond ? 'HH:mm:ss' : 'HH:mm';
        
-       var formatter = new _gregorianCalendarFormat2['default'](str);
-       
-       var now = new _gregorianCalendar2['default'](_rcTimePickerSrcLocaleZh_CN2['default'].calendar);
-       now.setTime(Date.now());
-       
        function onChange(value) {
-         console.log(value && formatter.format(value));
+         console.log(value && value.format(str));
        }
        
-       _reactDom2['default'].render(_react2['default'].createElement(_rcTimePicker2['default'], { formatter: formatter, locale: _rcTimePickerSrcLocaleZh_CN2['default'],
-         showSecond: showSecond,
-         defaultValue: now,
+       _reactDom2.default.render(_react2.default.createElement(_rcTimePicker2.default, {
+         format: str,
+         showSecond: showSecond
+         // use to control utfOffset, locale, default open value
+         , defaultOpenValue: (0, _moment2.default)(),
          className: 'xxx',
          onChange: onChange,
-         disabledHours: function () {
+         disabledHours: function disabledHours() {
            return [0, 1, 2, 3, 4, 5, 6, 7, 8, 22, 23];
          },
-         disabledMinutes: function () {
+         disabledMinutes: function disabledMinutes() {
            return [0, 2, 4, 6, 8];
          },
-         hideDisabledOptions: true }), document.getElementById('__react-content'));
+         hideDisabledOptions: true
+       }), document.getElementById('__react-content'));
 
 /***/ }
 
index 8088ddf2c3389995cd324f7acff84866c4149048..6e990a2d458f7b637159139d0bbd80b54a9adeea 100644 (file)
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///./examples/hidden.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;qBAEO,CAAkC;;kCAEvB,CAAO;;;;qCACJ,GAAW;;;;8CAEF,GAAoB;;;;oDACvB,GAA2B;;;;yCAE/B,GAAgB;;;;uDACV,GAAiC;;;;AAE9D,KAAM,UAAU,GAAG,IAAI,CAAC;AACxB,KAAM,GAAG,GAAG,UAAU,GAAG,UAAU,GAAG,OAAO,CAAC;;AAE9C,KAAM,SAAS,GAAG,yCAAmB,GAAG,CAAC,CAAC;;AAE1C,KAAM,GAAG,GAAG,mCAAsB,wCAAiB,QAAQ,CAAC,CAAC;AAC7D,IAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;;AAExB,UAAS,QAAQ,CAAC,KAAK,EAAE;AACvB,UAAO,CAAC,GAAG,CAAC,KAAK,IAAI,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;EAC/C;;AAED,uBAAS,MAAM,CACb,8DAAY,SAAS,EAAE,SAAU,EAAC,MAAM,yCAAmB;AAC/C,aAAU,EAAE,UAAW;AACvB,eAAY,EAAE,GAAI;AAClB,YAAS,EAAC,KAAK;AACf,WAAQ,EAAE,QAAS;AACnB,gBAAa,EAAE;YAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;IAAC;AACzD,kBAAe,EAAE;YAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAAC;AACvC,sBAAmB,SAAG,EAClC,QAAQ,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAC3C,C","file":"hidden.js","sourcesContent":["/* eslint no-console:0 */\n\nimport 'rc-time-picker/assets/index.less';\n\nimport React from 'react';\nimport ReactDom from 'react-dom';\n\nimport GregorianCalendar from 'gregorian-calendar';\nimport DateTimeFormat from 'gregorian-calendar-format';\n\nimport TimePicker from 'rc-time-picker';\nimport TimePickerLocale from 'rc-time-picker/src/locale/zh_CN';\n\nconst showSecond = true;\nconst str = showSecond ? 'HH:mm:ss' : 'HH:mm';\n\nconst formatter = new DateTimeFormat(str);\n\nconst now = new GregorianCalendar(TimePickerLocale.calendar);\nnow.setTime(Date.now());\n\nfunction onChange(value) {\n  console.log(value && formatter.format(value));\n}\n\nReactDom.render(\n  <TimePicker formatter={formatter} locale={TimePickerLocale}\n              showSecond={showSecond}\n              defaultValue={now}\n              className=\"xxx\"\n              onChange={onChange}\n              disabledHours={() => [0, 1, 2, 3, 4, 5, 6, 7, 8, 22, 23]}\n              disabledMinutes={() => [0, 2, 4, 6, 8]}\n              hideDisabledOptions />,\n  document.getElementById('__react-content')\n);\n\n\n\n/** WEBPACK FOOTER **\n ** ./examples/hidden.js\n **/"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"sources":["webpack:///./examples/hidden.js"],"names":[],"mappings":";;;;;;;;;;;;;;;AAEA;;AAEA;;;;AACA;;;;AAEA;;;;AAEA;;;;;;AAEA,KAAM,aAAa,IAAnB,C,CAXA;;AAYA,KAAM,MAAM,aAAa,UAAb,GAA0B,OAAtC;;AAEA,UAAS,QAAT,CAAkB,KAAlB,EAAyB;AACvB,WAAQ,GAAR,CAAY,SAAS,MAAM,MAAN,CAAa,GAAb,CAArB;AACD;;AAED,oBAAS,MAAT,CACE;AACE,WAAQ,GADV;AAEE,eAAY;AACZ;AAHF,KAIE,kBAAkB,uBAJpB;AAKE,cAAU,KALZ;AAME,aAAU,QANZ;AAOE,kBAAe;AAAA,YAAM,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,CAAV,EAAa,CAAb,EAAgB,CAAhB,EAAmB,CAAnB,EAAsB,CAAtB,EAAyB,CAAzB,EAA4B,EAA5B,EAAgC,EAAhC,CAAN;AAAA,IAPjB;AAQE,oBAAiB;AAAA,YAAM,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,CAAV,EAAa,CAAb,CAAN;AAAA,IARnB;AASE;AATF,GADF,EAYE,SAAS,cAAT,CAAwB,iBAAxB,CAZF,E","file":"hidden.js","sourcesContent":["/* eslint no-console:0 */\n\nimport 'rc-time-picker/assets/index.less';\n\nimport React from 'react';\nimport ReactDom from 'react-dom';\n\nimport moment from 'moment';\n\nimport TimePicker from 'rc-time-picker';\n\nconst showSecond = true;\nconst str = showSecond ? 'HH:mm:ss' : 'HH:mm';\n\nfunction onChange(value) {\n  console.log(value && value.format(str));\n}\n\nReactDom.render(\n  <TimePicker\n    format={str}\n    showSecond={showSecond}\n    // use to control utfOffset, locale, default open value\n    defaultOpenValue={moment()}\n    className=\"xxx\"\n    onChange={onChange}\n    disabledHours={() => [0, 1, 2, 3, 4, 5, 6, 7, 8, 22, 23]}\n    disabledMinutes={() => [0, 2, 4, 6, 8]}\n    hideDisabledOptions\n  />,\n  document.getElementById('__react-content')\n);\n\n\n\n/** WEBPACK FOOTER **\n ** ./examples/hidden.js\n **/"],"sourceRoot":""}
\ No newline at end of file
index a2e6b114c99d38a92d7122a935bfffb063a03a9f..594e96fa5b811f4db0769cafdc4f9bda35518fe3 100644 (file)
@@ -2,12 +2,12 @@
 <html>
 
 <head>
-  <title>pick-time.js - example - rc-time-picker@1.1.6</title>
+  <title>pick-time.js - example - rc-time-picker@2.0.0</title>
   <meta name="viewport"
         content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no">
   <meta charset="utf-8"/>
   <meta http-equiv="X-UA-Compatible" content="IE=edge">
-  <link href="//cdnjs.cloudflare.com/ajax/libs/normalize/3.0.3/normalize.css" rel="stylesheet"/>
+  <link href="https://a.alipayobjects.com/normalize.css/3.0.1/normalize.css" rel="stylesheet"/>
   <style>
     .highlight pre {
       padding: .8em 1em;
@@ -251,61 +251,59 @@ Monokai Sublime style. Derived from Monokai by noformnocontent http://nn.mit-lic
   <!--[if lt IE 9]>
   <script src="https://a.alipayobjects.com/??es5-shim/4.0.5/es5-shim.js,es5-shim/4.0.5/es5-sham.js,html5shiv/3.7.2/src/html5shiv.js"></script>
   <![endif]-->
+  
   <link rel="stylesheet" href="common.css" />
 </head>
 
 <body>
-<div class="container">
-  <div class="header">
-    <h1>rc-time-picker@1.1.6</h1>
+  <div class="container">
+    <div class="header">
+      <h1>rc-time-picker@2.0.0</h1>
 
-    <p>React TimePicker</p>
-  </div>
-  <div class="example" id="__react-content"></div>
-  <script src="common.js?nowrap"></script>
-  <script src="pick-time.js?nowrap"></script>
-  <div class="highlight"><pre><code language="js"><span class="hljs-comment">/* eslint no-console:0 */</span>
+      <p>React TimePicker</p>
+    </div>
+    <div class="example" id="__react-content"></div>
+
+    <div class="highlight"><pre><code language="js"><span class="hljs-comment">/* eslint no-console:0 */</span>
 
-import <span class="hljs-string">'rc-time-picker/assets/index.css'</span>;
+<span class="hljs-keyword">import</span> <span class="hljs-string">'rc-time-picker/assets/index.css'</span>;
 
-import React from <span class="hljs-string">'react'</span>;
-import ReactDom from <span class="hljs-string">'react-dom'</span>;
+<span class="hljs-keyword">import</span> React <span class="hljs-keyword">from</span> <span class="hljs-string">'react'</span>;
+<span class="hljs-keyword">import</span> ReactDom <span class="hljs-keyword">from</span> <span class="hljs-string">'react-dom'</span>;
 
-import GregorianCalendar from <span class="hljs-string">'gregorian-calendar'</span>;
-import DateTimeFormat from <span class="hljs-string">'gregorian-calendar-format'</span>;
+<span class="hljs-keyword">import</span> moment <span class="hljs-keyword">from</span> <span class="hljs-string">'moment'</span>;
 
-import TimePicker from <span class="hljs-string">'rc-time-picker'</span>;
-import TimePickerLocale from <span class="hljs-string">'rc-time-picker/lib/locale/zh_CN'</span>;
+<span class="hljs-keyword">import</span> TimePicker <span class="hljs-keyword">from</span> <span class="hljs-string">'rc-time-picker'</span>;
 
 <span class="hljs-keyword">const</span> showSecond = <span class="hljs-literal">true</span>;
 <span class="hljs-keyword">const</span> str = showSecond ? <span class="hljs-string">'HH:mm:ss'</span> : <span class="hljs-string">'HH:mm'</span>;
 
-<span class="hljs-keyword">const</span> formatter = <span class="hljs-keyword">new</span> DateTimeFormat(str);
 
-<span class="hljs-keyword">const</span> now = <span class="hljs-keyword">new</span> GregorianCalendar(TimePickerLocale.calendar);
-now.setTime(<span class="hljs-built_in">Date</span>.now());
-
-<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">onChange</span><span class="hljs-params">(value)</span> </span>{
-  <span class="hljs-built_in">console</span>.log(value &amp;&amp; formatter.format(value));
+<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">onChange</span>(<span class="hljs-params">value</span>) </span>{
+  <span class="hljs-built_in">console</span>.log(value &amp;&amp; value.format(str));
 }
 
 ReactDom.render(
-  <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-title">TimePicker</span> <span class="hljs-attribute">formatter</span>=<span class="hljs-value">{formatter}</span> <span class="hljs-attribute">locale</span>=<span class="hljs-value">{TimePickerLocale}</span>
-              <span class="hljs-attribute">style</span>=<span class="hljs-value">{{width:</span> <span class="hljs-attribute">100</span>}}
-              <span class="hljs-attribute">showSecond</span>=<span class="hljs-value">{showSecond}</span>
-              <span class="hljs-attribute">defaultValue</span>=<span class="hljs-value">{now}</span>
-              <span class="hljs-attribute">className</span>=<span class="hljs-value">"xxx"</span>
-              <span class="hljs-attribute">onChange</span>=<span class="hljs-value">{onChange}</span> /&gt;</span>,
+  <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-title">TimePicker</span>
+    <span class="hljs-attribute">style</span>=<span class="hljs-value">{{</span> <span class="hljs-attribute">width:</span> <span class="hljs-attribute">100</span> }}
+    <span class="hljs-attribute">showSecond</span>=<span class="hljs-value">{showSecond}</span>
+    <span class="hljs-attribute">defaultValue</span>=<span class="hljs-value">{moment()}</span>
+    <span class="hljs-attribute">className</span>=<span class="hljs-value">"xxx"</span>
+    <span class="hljs-attribute">onChange</span>=<span class="hljs-value">{onChange}</span>
+  /&gt;</span>,
   document.getElementById('__react-content')
 );
 </span></code></pre></div>
-</div>
-<a href="http://github.com/react-component/time-picker">
-  <img style="position: absolute; top: 0; right: 0; border: 0;"
-       src="https://camo.githubusercontent.com/38ef81f8aca64bb9a64448d0d70f1308ef5341ab/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f6461726b626c75655f3132313632312e706e67"
-       alt="Fork me on GitHub"
-       data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png">
-</a>
+  </div>
+  <a href="http://github.com/react-component/time-picker">
+    <img style="position: absolute; top: 0; right: 0; border: 0;"
+         src="https://camo.githubusercontent.com/38ef81f8aca64bb9a64448d0d70f1308ef5341ab/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f6461726b626c75655f3132313632312e706e67"
+         alt="Fork me on GitHub"
+         data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png">
+  </a>
+  
+  <script src="common.js?nowrap"></script>
+  <script src="pick-time.js?nowrap"></script>
 </body>
 
 </html>
index 59af11c3a50906d3d2e2428f42dce451403cfdb3..57a653be0472a9ad5ea6833c8387abb51b1ff397 100644 (file)
@@ -3,64 +3,51 @@ webpackJsonp([2],{
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-       module.exports = __webpack_require__(231);
+       module.exports = __webpack_require__(239);
 
 
 /***/ },
 
-/***/ 231:
+/***/ 239:
 /***/ function(module, exports, __webpack_require__) {
 
-       /* eslint no-console:0 */
-       
        'use strict';
        
-       function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
-       
        __webpack_require__(2);
        
        var _react = __webpack_require__(3);
        
        var _react2 = _interopRequireDefault(_react);
        
-       var _reactDom = __webpack_require__(160);
+       var _reactDom = __webpack_require__(37);
        
        var _reactDom2 = _interopRequireDefault(_reactDom);
        
-       var _gregorianCalendar = __webpack_require__(161);
-       
-       var _gregorianCalendar2 = _interopRequireDefault(_gregorianCalendar);
+       var _moment = __webpack_require__(177);
        
-       var _gregorianCalendarFormat = __webpack_require__(165);
+       var _moment2 = _interopRequireDefault(_moment);
        
-       var _gregorianCalendarFormat2 = _interopRequireDefault(_gregorianCalendarFormat);
-       
-       var _rcTimePicker = __webpack_require__(168);
+       var _rcTimePicker = __webpack_require__(178);
        
        var _rcTimePicker2 = _interopRequireDefault(_rcTimePicker);
        
-       var _rcTimePickerSrcLocaleZh_CN = __webpack_require__(227);
+       function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
        
-       var _rcTimePickerSrcLocaleZh_CN2 = _interopRequireDefault(_rcTimePickerSrcLocaleZh_CN);
+       var showSecond = true; /* eslint no-console:0 */
        
-       var showSecond = true;
        var str = showSecond ? 'HH:mm:ss' : 'HH:mm';
        
-       var formatter = new _gregorianCalendarFormat2['default'](str);
-       
-       var now = new _gregorianCalendar2['default'](_rcTimePickerSrcLocaleZh_CN2['default'].calendar);
-       now.setTime(Date.now());
-       
        function onChange(value) {
-         console.log(value && formatter.format(value));
+         console.log(value && value.format(str));
        }
        
-       _reactDom2['default'].render(_react2['default'].createElement(_rcTimePicker2['default'], { formatter: formatter, locale: _rcTimePickerSrcLocaleZh_CN2['default'],
+       _reactDom2.default.render(_react2.default.createElement(_rcTimePicker2.default, {
          style: { width: 100 },
          showSecond: showSecond,
-         defaultValue: now,
+         defaultValue: (0, _moment2.default)(),
          className: 'xxx',
-         onChange: onChange }), document.getElementById('__react-content'));
+         onChange: onChange
+       }), document.getElementById('__react-content'));
 
 /***/ }
 
index 1ba2472512219114ae63264e665ef56adaae50ff..1988632a772b08f5e4c67a3d52116f5d681209aa 100644 (file)
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///./examples/pick-time.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;qBAEO,CAAkC;;kCAEvB,CAAO;;;;qCACJ,GAAW;;;;8CAEF,GAAoB;;;;oDACvB,GAA2B;;;;yCAE/B,GAAgB;;;;uDACV,GAAiC;;;;AAE9D,KAAM,UAAU,GAAG,IAAI,CAAC;AACxB,KAAM,GAAG,GAAG,UAAU,GAAG,UAAU,GAAG,OAAO,CAAC;;AAE9C,KAAM,SAAS,GAAG,yCAAmB,GAAG,CAAC,CAAC;;AAE1C,KAAM,GAAG,GAAG,mCAAsB,wCAAiB,QAAQ,CAAC,CAAC;AAC7D,IAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;;AAExB,UAAS,QAAQ,CAAC,KAAK,EAAE;AACvB,UAAO,CAAC,GAAG,CAAC,KAAK,IAAI,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;EAC/C;;AAED,uBAAS,MAAM,CACb,8DAAY,SAAS,EAAE,SAAU,EAAC,MAAM,yCAAmB;AAC/C,QAAK,EAAE,EAAC,KAAK,EAAE,GAAG,EAAE;AACpB,aAAU,EAAE,UAAW;AACvB,eAAY,EAAE,GAAI;AAClB,YAAS,EAAC,KAAK;AACf,WAAQ,EAAE,QAAS,GAAG,EAClC,QAAQ,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAC3C,C","file":"pick-time.js","sourcesContent":["/* eslint no-console:0 */\n\nimport 'rc-time-picker/assets/index.less';\n\nimport React from 'react';\nimport ReactDom from 'react-dom';\n\nimport GregorianCalendar from 'gregorian-calendar';\nimport DateTimeFormat from 'gregorian-calendar-format';\n\nimport TimePicker from 'rc-time-picker';\nimport TimePickerLocale from 'rc-time-picker/src/locale/zh_CN';\n\nconst showSecond = true;\nconst str = showSecond ? 'HH:mm:ss' : 'HH:mm';\n\nconst formatter = new DateTimeFormat(str);\n\nconst now = new GregorianCalendar(TimePickerLocale.calendar);\nnow.setTime(Date.now());\n\nfunction onChange(value) {\n  console.log(value && formatter.format(value));\n}\n\nReactDom.render(\n  <TimePicker formatter={formatter} locale={TimePickerLocale}\n              style={{width: 100}}\n              showSecond={showSecond}\n              defaultValue={now}\n              className=\"xxx\"\n              onChange={onChange} />,\n  document.getElementById('__react-content')\n);\n\n\n\n/** WEBPACK FOOTER **\n ** ./examples/pick-time.js\n **/"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"sources":["webpack:///./examples/pick-time.js"],"names":[],"mappings":";;;;;;;;;;;;;;;AAEA;;AAEA;;;;AACA;;;;AAEA;;;;AAEA;;;;;;AAEA,KAAM,aAAa,IAAnB,C,CAXA;;AAYA,KAAM,MAAM,aAAa,UAAb,GAA0B,OAAtC;;AAGA,UAAS,QAAT,CAAkB,KAAlB,EAAyB;AACvB,WAAQ,GAAR,CAAY,SAAS,MAAM,MAAN,CAAa,GAAb,CAArB;AACD;;AAED,oBAAS,MAAT,CACE;AACE,UAAO,EAAE,OAAO,GAAT,EADT;AAEE,eAAY,UAFd;AAGE,iBAAc,uBAHhB;AAIE,cAAU,KAJZ;AAKE,aAAU;AALZ,GADF,EAQE,SAAS,cAAT,CAAwB,iBAAxB,CARF,E","file":"pick-time.js","sourcesContent":["/* eslint no-console:0 */\n\nimport 'rc-time-picker/assets/index.less';\n\nimport React from 'react';\nimport ReactDom from 'react-dom';\n\nimport moment from 'moment';\n\nimport TimePicker from 'rc-time-picker';\n\nconst showSecond = true;\nconst str = showSecond ? 'HH:mm:ss' : 'HH:mm';\n\n\nfunction onChange(value) {\n  console.log(value && value.format(str));\n}\n\nReactDom.render(\n  <TimePicker\n    style={{ width: 100 }}\n    showSecond={showSecond}\n    defaultValue={moment()}\n    className=\"xxx\"\n    onChange={onChange}\n  />,\n  document.getElementById('__react-content')\n);\n\n\n\n/** WEBPACK FOOTER **\n ** ./examples/pick-time.js\n **/"],"sourceRoot":""}
\ No newline at end of file
index 349c106cad4ca2f9dae6cc63d96a664b0c8b7197..ea5cbed8e878542e972c3b5b6711ae439f90c645 100644 (file)
@@ -2,12 +2,12 @@
 <html>
 
 <head>
-  <title>value-and-defaultValue.js - example - rc-time-picker@1.1.6</title>
+  <title>value-and-defaultValue.js - example - rc-time-picker@2.0.0</title>
   <meta name="viewport"
         content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no">
   <meta charset="utf-8"/>
   <meta http-equiv="X-UA-Compatible" content="IE=edge">
-  <link href="//cdnjs.cloudflare.com/ajax/libs/normalize/3.0.3/normalize.css" rel="stylesheet"/>
+  <link href="https://a.alipayobjects.com/normalize.css/3.0.1/normalize.css" rel="stylesheet"/>
   <style>
     .highlight pre {
       padding: .8em 1em;
@@ -251,44 +251,36 @@ Monokai Sublime style. Derived from Monokai by noformnocontent http://nn.mit-lic
   <!--[if lt IE 9]>
   <script src="https://a.alipayobjects.com/??es5-shim/4.0.5/es5-shim.js,es5-shim/4.0.5/es5-sham.js,html5shiv/3.7.2/src/html5shiv.js"></script>
   <![endif]-->
+  
   <link rel="stylesheet" href="common.css" />
 </head>
 
 <body>
-<div class="container">
-  <div class="header">
-    <h1>rc-time-picker@1.1.6</h1>
+  <div class="container">
+    <div class="header">
+      <h1>rc-time-picker@2.0.0</h1>
 
-    <p>React TimePicker</p>
-  </div>
-  <div class="example" id="__react-content"></div>
-  <script src="common.js?nowrap"></script>
-  <script src="value-and-defaultValue.js?nowrap"></script>
-  <div class="highlight"><pre><code language="js"><span class="hljs-comment">/* eslint no-console:0 */</span>
-
-import <span class="hljs-string">'rc-time-picker/assets/index.css'</span>;
+      <p>React TimePicker</p>
+    </div>
+    <div class="example" id="__react-content"></div>
 
-import React from <span class="hljs-string">'react'</span>;
-import ReactDom from <span class="hljs-string">'react-dom'</span>;
+    <div class="highlight"><pre><code language="js"><span class="hljs-comment">/* eslint no-console:0 */</span>
 
-import GregorianCalendar from <span class="hljs-string">'gregorian-calendar'</span>;
-import DateTimeFormat from <span class="hljs-string">'gregorian-calendar-format'</span>;
-import TimePicker from <span class="hljs-string">'rc-time-picker'</span>;
-import TimePickerLocale from <span class="hljs-string">'rc-time-picker/lib/locale/zh_CN'</span>;
+<span class="hljs-keyword">import</span> <span class="hljs-string">'rc-time-picker/assets/index.css'</span>;
 
-<span class="hljs-keyword">const</span> formatter = <span class="hljs-keyword">new</span> DateTimeFormat(<span class="hljs-string">'HH:mm:ss'</span>);
-
-<span class="hljs-keyword">const</span> now = <span class="hljs-keyword">new</span> GregorianCalendar(TimePickerLocale.calendar);
-now.setTime(<span class="hljs-built_in">Date</span>.now());
+<span class="hljs-keyword">import</span> React <span class="hljs-keyword">from</span> <span class="hljs-string">'react'</span>;
+<span class="hljs-keyword">import</span> ReactDom <span class="hljs-keyword">from</span> <span class="hljs-string">'react-dom'</span>;
+<span class="hljs-keyword">import</span> moment <span class="hljs-keyword">from</span> <span class="hljs-string">'moment'</span>;
+<span class="hljs-keyword">import</span> TimePicker <span class="hljs-keyword">from</span> <span class="hljs-string">'rc-time-picker'</span>;
 
 <span class="hljs-keyword">const</span> App = React.createClass({
   getInitialState() {
     <span class="hljs-keyword">return</span> {
-      value: now,
+      value: moment(),
     };
   },
   handleValueChange(value) {
-    <span class="hljs-built_in">console</span>.log(value &amp;&amp; formatter.format(value));
+    <span class="hljs-built_in">console</span>.log(value &amp;&amp; value.format(<span class="hljs-string">'HH:mm:ss'</span>));
     <span class="hljs-keyword">this</span>.setState({ value });
   },
   clear() {
@@ -299,29 +291,35 @@ now.setTime(<span class="hljs-built_in">Date</span>.now());
   render() {
     <span class="hljs-keyword">return</span> (
       <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-title">div</span>&gt;</span>
-        <span class="hljs-tag">&lt;<span class="hljs-title">TimePicker</span> <span class="hljs-attribute">formatter</span>=<span class="hljs-value">{formatter}</span> <span class="hljs-attribute">locale</span>=<span class="hljs-value">{TimePickerLocale}</span>
-              <span class="hljs-attribute">defaultValue</span>=<span class="hljs-value">{now}</span> /&gt;</span>
-        <span class="hljs-tag">&lt;<span class="hljs-title">TimePicker</span> <span class="hljs-attribute">formatter</span>=<span class="hljs-value">{formatter}</span> <span class="hljs-attribute">locale</span>=<span class="hljs-value">{TimePickerLocale}</span>
-              <span class="hljs-attribute">value</span>=<span class="hljs-value">{this.state.value}</span>
-              <span class="hljs-attribute">onChange</span>=<span class="hljs-value">{this.handleValueChange}</span>/&gt;</span>
+        <span class="hljs-tag">&lt;<span class="hljs-title">TimePicker</span>
+          <span class="hljs-attribute">defaultValue</span>=<span class="hljs-value">{this.state.value}</span>
+          <span class="hljs-attribute">onChange</span>=<span class="hljs-value">{this.handleValueChange}</span>
+        /&gt;</span>
+        <span class="hljs-tag">&lt;<span class="hljs-title">TimePicker</span>
+          <span class="hljs-attribute">value</span>=<span class="hljs-value">{this.state.value}</span>
+          <span class="hljs-attribute">onChange</span>=<span class="hljs-value">{this.handleValueChange}</span>
+        /&gt;</span>
         <span class="hljs-tag">&lt;<span class="hljs-title">button</span> <span class="hljs-attribute">onClick</span>=<span class="hljs-value">{this.clear}</span>&gt;</span>clear<span class="hljs-tag">&lt;/<span class="hljs-title">button</span>&gt;</span>
       <span class="hljs-tag">&lt;/<span class="hljs-title">div</span>&gt;</span>
-    );
+    )</span>;
   },
 });
 
 ReactDom.render(
-  <span class="hljs-tag">&lt;<span class="hljs-title">App</span> /&gt;</span>,
+  <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-title">App</span> /&gt;</span>,
   document.getElementById('__react-content')
 );
 </span></code></pre></div>
-</div>
-<a href="http://github.com/react-component/time-picker">
-  <img style="position: absolute; top: 0; right: 0; border: 0;"
-       src="https://camo.githubusercontent.com/38ef81f8aca64bb9a64448d0d70f1308ef5341ab/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f6461726b626c75655f3132313632312e706e67"
-       alt="Fork me on GitHub"
-       data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png">
-</a>
+  </div>
+  <a href="http://github.com/react-component/time-picker">
+    <img style="position: absolute; top: 0; right: 0; border: 0;"
+         src="https://camo.githubusercontent.com/38ef81f8aca64bb9a64448d0d70f1308ef5341ab/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f6461726b626c75655f3132313632312e706e67"
+         alt="Fork me on GitHub"
+         data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png">
+  </a>
+  
+  <script src="common.js?nowrap"></script>
+  <script src="value-and-defaultValue.js?nowrap"></script>
 </body>
 
 </html>
index 4c295a6362d0b513fdee8ba2bf212399f83f9b81..9d092f3ec5228daa699d12a9e06919961c85619f 100644 (file)
@@ -3,61 +3,45 @@ webpackJsonp([3],{
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-       module.exports = __webpack_require__(232);
+       module.exports = __webpack_require__(240);
 
 
 /***/ },
 
-/***/ 232:
+/***/ 240:
 /***/ function(module, exports, __webpack_require__) {
 
-       /* eslint no-console:0 */
-       
        'use strict';
        
-       function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
-       
        __webpack_require__(2);
        
        var _react = __webpack_require__(3);
        
        var _react2 = _interopRequireDefault(_react);
        
-       var _reactDom = __webpack_require__(160);
+       var _reactDom = __webpack_require__(37);
        
        var _reactDom2 = _interopRequireDefault(_reactDom);
        
-       var _gregorianCalendar = __webpack_require__(161);
-       
-       var _gregorianCalendar2 = _interopRequireDefault(_gregorianCalendar);
-       
-       var _gregorianCalendarFormat = __webpack_require__(165);
+       var _moment = __webpack_require__(177);
        
-       var _gregorianCalendarFormat2 = _interopRequireDefault(_gregorianCalendarFormat);
+       var _moment2 = _interopRequireDefault(_moment);
        
-       var _rcTimePicker = __webpack_require__(168);
+       var _rcTimePicker = __webpack_require__(178);
        
        var _rcTimePicker2 = _interopRequireDefault(_rcTimePicker);
        
-       var _rcTimePickerSrcLocaleZh_CN = __webpack_require__(227);
+       function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
        
-       var _rcTimePickerSrcLocaleZh_CN2 = _interopRequireDefault(_rcTimePickerSrcLocaleZh_CN);
-       
-       var formatter = new _gregorianCalendarFormat2['default']('HH:mm:ss');
-       
-       var now = new _gregorianCalendar2['default'](_rcTimePickerSrcLocaleZh_CN2['default'].calendar);
-       now.setTime(Date.now());
-       
-       var App = _react2['default'].createClass({
+       var App = _react2.default.createClass({
          displayName: 'App',
-       
          getInitialState: function getInitialState() {
            return {
-             value: now
+             value: (0, _moment2.default)()
            };
          },
          handleValueChange: function handleValueChange(value) {
-           console.log(value && formatter.format(value));
+           console.log(value && value.format('HH:mm:ss'));
            this.setState({ value: value });
          },
          clear: function clear() {
@@ -66,24 +50,27 @@ webpackJsonp([3],{
            });
          },
          render: function render() {
-           return _react2['default'].createElement(
+           return _react2.default.createElement(
              'div',
              null,
-             _react2['default'].createElement(_rcTimePicker2['default'], { formatter: formatter, locale: _rcTimePickerSrcLocaleZh_CN2['default'],
-               defaultValue: now }),
-             _react2['default'].createElement(_rcTimePicker2['default'], { formatter: formatter, locale: _rcTimePickerSrcLocaleZh_CN2['default'],
+             _react2.default.createElement(_rcTimePicker2.default, {
+               defaultValue: this.state.value,
+               onChange: this.handleValueChange
+             }),
+             _react2.default.createElement(_rcTimePicker2.default, {
                value: this.state.value,
-               onChange: this.handleValueChange }),
-             _react2['default'].createElement(
+               onChange: this.handleValueChange
+             }),
+             _react2.default.createElement(
                'button',
                { onClick: this.clear },
                'clear'
              )
            );
          }
-       });
+       }); /* eslint no-console:0 */
        
-       _reactDom2['default'].render(_react2['default'].createElement(App, null), document.getElementById('__react-content'));
+       _reactDom2.default.render(_react2.default.createElement(App, null), document.getElementById('__react-content'));
 
 /***/ }
 
index 8b708bc5a41b2187fbe3ccd33294651a07b98650..51cb26253ef4d55cf4e9e0b89f7197d16965ac5c 100644 (file)
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///./examples/value-and-defaultValue.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;qBAEO,CAAkC;;kCAEvB,CAAO;;;;qCACJ,GAAW;;;;8CAEF,GAAoB;;;;oDACvB,GAA2B;;;;yCAC/B,GAAgB;;;;uDACV,GAAiC;;;;AAE9D,KAAM,SAAS,GAAG,yCAAmB,UAAU,CAAC,CAAC;;AAEjD,KAAM,GAAG,GAAG,mCAAsB,wCAAiB,QAAQ,CAAC,CAAC;AAC7D,IAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;;AAExB,KAAM,GAAG,GAAG,mBAAM,WAAW,CAAC;;;AAC5B,kBAAe,6BAAG;AAChB,YAAO;AACL,YAAK,EAAE,GAAG;MACX,CAAC;IACH;AACD,oBAAiB,6BAAC,KAAK,EAAE;AACvB,YAAO,CAAC,GAAG,CAAC,KAAK,IAAI,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9C,SAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAL,KAAK,EAAE,CAAC,CAAC;IAC1B;AACD,QAAK,mBAAG;AACN,SAAI,CAAC,QAAQ,CAAC;AACZ,YAAK,EAAE,SAAS;MACjB,CAAC,CAAC;IACJ;AACD,SAAM,oBAAG;AACP,YACE;;;OACE,8DAAY,SAAS,EAAE,SAAU,EAAC,MAAM,yCAAmB;AACrD,qBAAY,EAAE,GAAI,GAAG;OAC3B,8DAAY,SAAS,EAAE,SAAU,EAAC,MAAM,yCAAmB;AACrD,cAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAM;AACxB,iBAAQ,EAAE,IAAI,CAAC,iBAAkB,GAAE;OACzC;;WAAQ,OAAO,EAAE,IAAI,CAAC,KAAM;;QAAe;MACvC,CACN;IACH;EACF,CAAC,CAAC;;AAEH,uBAAS,MAAM,CACb,iCAAC,GAAG,OAAG,EACP,QAAQ,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAC3C,C","file":"value-and-defaultValue.js","sourcesContent":["/* eslint no-console:0 */\n\nimport 'rc-time-picker/assets/index.less';\n\nimport React from 'react';\nimport ReactDom from 'react-dom';\n\nimport GregorianCalendar from 'gregorian-calendar';\nimport DateTimeFormat from 'gregorian-calendar-format';\nimport TimePicker from 'rc-time-picker';\nimport TimePickerLocale from 'rc-time-picker/src/locale/zh_CN';\n\nconst formatter = new DateTimeFormat('HH:mm:ss');\n\nconst now = new GregorianCalendar(TimePickerLocale.calendar);\nnow.setTime(Date.now());\n\nconst App = React.createClass({\n  getInitialState() {\n    return {\n      value: now,\n    };\n  },\n  handleValueChange(value) {\n    console.log(value && formatter.format(value));\n    this.setState({ value });\n  },\n  clear() {\n    this.setState({\n      value: undefined,\n    });\n  },\n  render() {\n    return (\n      <div>\n        <TimePicker formatter={formatter} locale={TimePickerLocale}\n              defaultValue={now} />\n        <TimePicker formatter={formatter} locale={TimePickerLocale}\n              value={this.state.value}\n              onChange={this.handleValueChange}/>\n        <button onClick={this.clear}>clear</button>\n      </div>\n    );\n  },\n});\n\nReactDom.render(\n  <App />,\n  document.getElementById('__react-content')\n);\n\n\n\n/** WEBPACK FOOTER **\n ** ./examples/value-and-defaultValue.js\n **/"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"sources":["webpack:///./examples/value-and-defaultValue.js"],"names":[],"mappings":";;;;;;;;;;;;;;;AAEA;;AAEA;;;;AACA;;;;AACA;;;;AACA;;;;;;AAEA,KAAM,MAAM,gBAAM,WAAN,CAAkB;AAAA;AAC5B,kBAD4B,6BACV;AAChB,YAAO;AACL,cAAO;AADF,MAAP;AAGD,IAL2B;AAM5B,oBAN4B,6BAMV,KANU,EAMH;AACvB,aAAQ,GAAR,CAAY,SAAS,MAAM,MAAN,CAAa,UAAb,CAArB;AACA,UAAK,QAAL,CAAc,EAAE,YAAF,EAAd;AACD,IAT2B;AAU5B,QAV4B,mBAUpB;AACN,UAAK,QAAL,CAAc;AACZ,cAAO;AADK,MAAd;AAGD,IAd2B;AAe5B,SAf4B,oBAenB;AACP,YACE;AAAA;AAAA;AACE;AACE,uBAAc,KAAK,KAAL,CAAW,KAD3B;AAEE,mBAAU,KAAK;AAFjB,SADF;AAKE;AACE,gBAAO,KAAK,KAAL,CAAW,KADpB;AAEE,mBAAU,KAAK;AAFjB,SALF;AASE;AAAA;AAAA,WAAQ,SAAS,KAAK,KAAtB;AAAA;AAAA;AATF,MADF;AAaD;AA7B2B,EAAlB,CAAZ,C,CATA;;AAyCA,oBAAS,MAAT,CACE,8BAAC,GAAD,OADF,EAEE,SAAS,cAAT,CAAwB,iBAAxB,CAFF,E","file":"value-and-defaultValue.js","sourcesContent":["/* eslint no-console:0 */\n\nimport 'rc-time-picker/assets/index.less';\n\nimport React from 'react';\nimport ReactDom from 'react-dom';\nimport moment from 'moment';\nimport TimePicker from 'rc-time-picker';\n\nconst App = React.createClass({\n  getInitialState() {\n    return {\n      value: moment(),\n    };\n  },\n  handleValueChange(value) {\n    console.log(value && value.format('HH:mm:ss'));\n    this.setState({ value });\n  },\n  clear() {\n    this.setState({\n      value: undefined,\n    });\n  },\n  render() {\n    return (\n      <div>\n        <TimePicker\n          defaultValue={this.state.value}\n          onChange={this.handleValueChange}\n        />\n        <TimePicker\n          value={this.state.value}\n          onChange={this.handleValueChange}\n        />\n        <button onClick={this.clear}>clear</button>\n      </div>\n    );\n  },\n});\n\nReactDom.render(\n  <App />,\n  document.getElementById('__react-content')\n);\n\n\n\n/** WEBPACK FOOTER **\n ** ./examples/value-and-defaultValue.js\n **/"],"sourceRoot":""}
\ No newline at end of file
index 7f5d7bd4322f26596608387c3bce2f3668265b9e..32b2efa799b8de4bf30594fb868505ffa0573d4e 100644 (file)
@@ -7,7 +7,7 @@
   <meta charset="utf-8"/>
   <meta http-equiv="X-UA-Compatible" content="IE=edge">
   <link href="//cdnjs.cloudflare.com/ajax/libs/normalize/3.0.3/normalize.css" rel="stylesheet"/>
-  <title>rc-time-picker@1.1.6 - React TimePicker</title>
+  <title>rc-time-picker@2.0.0 - React TimePicker</title>
   <style>
     @font-face {
       font-family: octicons-anchor;
 
 <body>
 <div class="header">
-  <h1>rc-time-picker@1.1.6</h1>
+  <h1>rc-time-picker@2.0.0</h1>
 </div>
 <div class="examples">
   <h3>EXAMPLES</h3>
 <a href="http://nodejs.org/download/" title="null"><img src="https://img.shields.io/badge/node.js-%3E=_4.0.0-green.svg?style=flat-square" alt="node version"></a>
 <a href="https://npmjs.org/package/rc-time-picker" title="null"><img src="https://img.shields.io/npm/dm/rc-time-picker.svg?style=flat-square" alt="npm download"></a></p>
 <h2>example<a id="user-content-example" name="example" class="anchor" aria-hidden="true" href="#example"><span class="octicon octicon-link"></span></a></h2><p><a href="http://react-component.github.io/time-picker/" title="null">http://react-component.github.io/time-picker/</a></p>
-<h2>install<a id="user-content-install" name="install" class="anchor" aria-hidden="true" href="#install"><span class="octicon octicon-link"></span></a></h2><div class="highlight"><pre><code language="undefined">npm install rc-time-picker</code></pre></div><h2>Usage<a id="user-content-usage" name="usage" class="anchor" aria-hidden="true" href="#usage"><span class="octicon octicon-link"></span></a></h2><div class="highlight"><pre><code language="js">import TimePicker from <span class="hljs-string">'rc-time-picker'</span>;
-import ReactDOM from <span class="hljs-string">'react-dom'</span>;
+<h2>install<a id="user-content-install" name="install" class="anchor" aria-hidden="true" href="#install"><span class="octicon octicon-link"></span></a></h2><div class="highlight"><pre><code language="undefined">npm install rc-time-picker</code></pre></div><h2>Usage<a id="user-content-usage" name="usage" class="anchor" aria-hidden="true" href="#usage"><span class="octicon octicon-link"></span></a></h2><div class="highlight"><pre><code language="js"><span class="hljs-keyword">import</span> TimePicker <span class="hljs-keyword">from</span> <span class="hljs-string">'rc-time-picker'</span>;
+<span class="hljs-keyword">import</span> ReactDOM <span class="hljs-keyword">from</span> <span class="hljs-string">'react-dom'</span>;
 ReactDOM.render(<span class="xml"><span class="hljs-tag">&lt;<span class="hljs-title">TimePicker</span> /&gt;</span>, container);</span></code></pre></div><h2>API<a id="user-content-api" name="api" class="anchor" aria-hidden="true" href="#api"><span class="octicon octicon-link"></span></a></h2><h3>TimePicker<a id="user-content-timepicker" name="timepicker" class="anchor" aria-hidden="true" href="#timepicker"><span class="octicon octicon-link"></span></a></h3><table>
 <thead>
 <tr>
@@ -785,9 +785,9 @@ ReactDOM.render(<span class="xml"><span class="hljs-tag">&lt;<span class="hljs-t
 <td>prefixCls of this component</td>
 </tr>
 <tr>
-<td>locale</td>
-<td>Object</td>
-<td>import from &#39;rc-time-picker/lib/locale/en_US&#39;</td>
+<td>clearText</td>
+<td>String</td>
+<td>&#39;clear&#39;</td>
 <td></td>
 </tr>
 <tr>
@@ -797,6 +797,12 @@ ReactDOM.render(<span class="xml"><span class="hljs-tag">&lt;<span class="hljs-t
 <td>whether picker is disabled</td>
 </tr>
 <tr>
+<td>clearText</td>
+<td>String</td>
+<td>clear</td>
+<td>clear text</td>
+</tr>
+<tr>
 <td>open</td>
 <td>Boolean</td>
 <td>false</td>
@@ -804,13 +810,19 @@ ReactDOM.render(<span class="xml"><span class="hljs-tag">&lt;<span class="hljs-t
 </tr>
 <tr>
 <td>defaultValue</td>
-<td>GregorianCalendar</td>
+<td>moment</td>
 <td>null</td>
 <td>default initial value</td>
 </tr>
 <tr>
+<td>defaultOpenValue</td>
+<td>moment</td>
+<td>moment()</td>
+<td>default open panel value, used to set utcOffset,locale if value/defaultValue absent</td>
+</tr>
+<tr>
 <td>value</td>
-<td>GregorianCalendar</td>
+<td>moment</td>
 <td>null</td>
 <td>current value</td>
 </tr>
@@ -833,9 +845,8 @@ ReactDOM.render(<span class="xml"><span class="hljs-tag">&lt;<span class="hljs-t
 <td></td>
 </tr>
 <tr>
-<td>formatter</td>
+<td>format</td>
 <td>String</td>
-<td>GregorianCalendarFormatter</td>
 <td></td>
 <td></td>
 </tr>
@@ -882,6 +893,8 @@ ReactDOM.render(<span class="xml"><span class="hljs-tag">&lt;<span class="hljs-t
 </tr>
 </tbody>
 </table>
+<h2>Test Case<a id="user-content-test-case" name="test-case" class="anchor" aria-hidden="true" href="#test-case"><span class="octicon octicon-link"></span></a></h2><div class="highlight"><pre><code language="undefined">npm test
+npm run chrome-test</code></pre></div><h2>Coverage<a id="user-content-coverage" name="coverage" class="anchor" aria-hidden="true" href="#coverage"><span class="octicon octicon-link"></span></a></h2><div class="highlight"><pre><code language="undefined">npm run coverage</code></pre></div><p>open coverage/ dir</p>
 <h2>License<a id="user-content-license" name="license" class="anchor" aria-hidden="true" href="#license"><span class="octicon octicon-link"></span></a></h2><p>rc-time-picker is released under the MIT license.</p>
 
   </div>